diff --git a/pkg/resource/resource.go b/pkg/resource/resource.go index 2bf143f67..ba7d7f1d9 100644 --- a/pkg/resource/resource.go +++ b/pkg/resource/resource.go @@ -49,6 +49,7 @@ const SecretTypeConnection corev1.SecretType = "connection.crossplane.io/v1alpha const ( ExternalResourceTagKeyKind = "crossplane-kind" ExternalResourceTagKeyName = "crossplane-name" + ExternalResourceTagKeyNamespace = "crossplane-namespace" ExternalResourceTagKeyProvider = "crossplane-providerconfig" ExternalResourceTagKeyProviderConfigKind = "crossplane-providerconfig-kind" @@ -414,6 +415,10 @@ func GetExternalTags(mg Managed) map[string]string { ExternalResourceTagKeyName: mg.GetName(), } + if namespace := mg.GetNamespace(); namespace != "" { + tags[ExternalResourceTagKeyNamespace] = namespace + } + switch mg := mg.(type) { case TypedProviderConfigReferencer: if pcRef := mg.GetProviderConfigReference(); pcRef != nil { diff --git a/pkg/resource/resource_test.go b/pkg/resource/resource_test.go index ddad8a79e..c04dc6442 100644 --- a/pkg/resource/resource_test.go +++ b/pkg/resource/resource_test.go @@ -636,6 +636,24 @@ func TestGetExternalTags(t *testing.T) { ExternalResourceTagKeyProviderConfigKind: "ProviderConfig", }, }, + "SuccessfulWithNamespacedObject": { + o: &fake.ModernManaged{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + Namespace: namespace, + }, + TypedProviderConfigReferencer: fake.TypedProviderConfigReferencer{ + Ref: &xpv1.ProviderConfigReference{Name: provName, Kind: "ProviderConfig"}, + }, + }, + want: map[string]string{ + ExternalResourceTagKeyKind: strings.ToLower((&fake.Managed{}).GetObjectKind().GroupVersionKind().GroupKind().String()), + ExternalResourceTagKeyName: name, + ExternalResourceTagKeyNamespace: namespace, + ExternalResourceTagKeyProvider: provName, + ExternalResourceTagKeyProviderConfigKind: "ProviderConfig", + }, + }, "SuccessfulWithLegacyProviderConfig": { o: &fake.LegacyManaged{ ObjectMeta: metav1.ObjectMeta{