Skip to content

Commit 0119340

Browse files
authored
Merge pull request #10957 from dlipovetsky/fix-create-target-object-mutated
🐛 Ensure move uses mutated metadata when updating a target object
2 parents 3f21042 + 8d73c0e commit 0119340

File tree

2 files changed

+52
-7
lines changed

2 files changed

+52
-7
lines changed

cmd/clusterctl/client/cluster/mover.go

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -946,12 +946,10 @@ func (o *objectMover) createTargetObject(ctx context.Context, nodeToCreate *node
946946
obj := &unstructured.Unstructured{}
947947
obj.SetAPIVersion(nodeToCreate.identity.APIVersion)
948948
obj.SetKind(nodeToCreate.identity.Kind)
949-
objKey := client.ObjectKey{
950-
Namespace: nodeToCreate.identity.Namespace,
951-
Name: nodeToCreate.identity.Name,
952-
}
949+
obj.SetName(nodeToCreate.identity.Name)
950+
obj.SetNamespace(nodeToCreate.identity.Namespace)
953951

954-
if err := cFrom.Get(ctx, objKey, obj); err != nil {
952+
if err := cFrom.Get(ctx, client.ObjectKeyFromObject(obj), obj); err != nil {
955953
return errors.Wrapf(err, "error reading %q %s/%s",
956954
obj.GroupVersionKind(), obj.GetNamespace(), obj.GetName())
957955
}
@@ -1006,7 +1004,7 @@ func (o *objectMover) createTargetObject(ctx context.Context, nodeToCreate *node
10061004
existingTargetObj := &unstructured.Unstructured{}
10071005
existingTargetObj.SetAPIVersion(obj.GetAPIVersion())
10081006
existingTargetObj.SetKind(obj.GetKind())
1009-
if err := cTo.Get(ctx, objKey, existingTargetObj); err != nil {
1007+
if err := cTo.Get(ctx, client.ObjectKeyFromObject(obj), existingTargetObj); err != nil {
10101008
return errors.Wrapf(err, "error reading resource for %q %s/%s",
10111009
existingTargetObj.GroupVersionKind(), existingTargetObj.GetNamespace(), existingTargetObj.GetName())
10121010
}

cmd/clusterctl/client/cluster/mover_test.go

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1956,6 +1956,7 @@ func Test_createTargetObject(t *testing.T) {
19561956
fromProxy Proxy
19571957
toProxy Proxy
19581958
node *node
1959+
mutators []ResourceMutatorFunc
19591960
}
19601961

19611962
tests := []struct {
@@ -2075,6 +2076,52 @@ func Test_createTargetObject(t *testing.T) {
20752076
g.Expect(c.Annotations).To(BeEmpty())
20762077
},
20772078
},
2079+
{
2080+
name: "updates object whose namespace is mutated, if it already exists and the object is not Global/GlobalHierarchy",
2081+
args: args{
2082+
fromProxy: test.NewFakeProxy().WithObjs(
2083+
&clusterv1.Cluster{
2084+
ObjectMeta: metav1.ObjectMeta{
2085+
Name: "foo",
2086+
Namespace: "ns1",
2087+
},
2088+
},
2089+
),
2090+
toProxy: test.NewFakeProxy().WithObjs(
2091+
&clusterv1.Cluster{
2092+
ObjectMeta: metav1.ObjectMeta{
2093+
Name: "foo",
2094+
Namespace: "mutatedns1",
2095+
Annotations: map[string]string{"foo": "bar"},
2096+
},
2097+
},
2098+
),
2099+
node: &node{
2100+
identity: corev1.ObjectReference{
2101+
Kind: "Cluster",
2102+
Namespace: "ns1",
2103+
Name: "foo",
2104+
APIVersion: "cluster.x-k8s.io/v1beta1",
2105+
},
2106+
},
2107+
mutators: []ResourceMutatorFunc{
2108+
func(u *unstructured.Unstructured) error {
2109+
return unstructured.SetNestedField(u.Object,
2110+
"mutatedns1",
2111+
"metadata", "namespace")
2112+
},
2113+
},
2114+
},
2115+
want: func(g *WithT, toClient client.Client) {
2116+
c := &clusterv1.Cluster{}
2117+
key := client.ObjectKey{
2118+
Namespace: "mutatedns1",
2119+
Name: "foo",
2120+
}
2121+
g.Expect(toClient.Get(context.Background(), key, c)).ToNot(HaveOccurred())
2122+
g.Expect(c.Annotations).To(BeEmpty())
2123+
},
2124+
},
20782125
{
20792126
name: "should not update Global objects",
20802127
args: args{
@@ -2163,7 +2210,7 @@ func Test_createTargetObject(t *testing.T) {
21632210
fromProxy: tt.args.fromProxy,
21642211
}
21652212

2166-
err := mover.createTargetObject(ctx, tt.args.node, tt.args.toProxy, nil, sets.New[string]())
2213+
err := mover.createTargetObject(ctx, tt.args.node, tt.args.toProxy, tt.args.mutators, sets.New[string]())
21672214
if tt.wantErr {
21682215
g.Expect(err).To(HaveOccurred())
21692216
return

0 commit comments

Comments
 (0)