diff --git a/migrate/snapshot.go b/migrate/snapshot.go index 77f2ca5f2..4029fbb11 100644 --- a/migrate/snapshot.go +++ b/migrate/snapshot.go @@ -105,9 +105,23 @@ func pullNodesFromEtcd(n *node) map[string]uint64 { return out } -func fixEtcd(n *node) { - n.Path = "/0" - machines := n.Children["machines"] +func fixEtcd(etcdref *node) *node { + n := &node{ + Path: "/0", + CreatedIndex: etcdref.CreatedIndex, + ModifiedIndex: etcdref.ModifiedIndex, + ExpireTime: etcdref.ExpireTime, + ACL: etcdref.ACL, + Children: make(map[string]*node), + } + + var machines *node + if machineOrig, ok := etcdref.Children["machines"]; ok { + machines = deepCopyNode(machineOrig, n) + } + if machines == nil { + return n + } n.Children["members"] = &node{ Path: "/0/members", CreatedIndex: machines.CreatedIndex, @@ -160,13 +174,7 @@ func fixEtcd(n *node) { } n.Children["members"].Children[m.ID.String()] = newNode } - - for k, _ := range n.Children { - if k != "members" { - delete(n.Children, k) - } - } - + return n } func mangleRoot(n *node) *node { @@ -180,11 +188,9 @@ func mangleRoot(n *node) *node { } newRoot.Children["1"] = n etcd := n.Children["_etcd"] - newEtcd := deepCopyNode(etcd, newRoot) replacePathNames(n, "/", "/1/") - fixEtcd(newEtcd) - newRoot.Children["0"] = newEtcd - newRoot.Children["0"].Parent = newRoot + newZero := fixEtcd(etcd) + newRoot.Children["0"] = newZero return newRoot }