Skip to content

Commit 67c114a

Browse files
Merge pull request openshift#7725 from r4f4/azure-metadata-in-tags
no-jira: azure: add metadata info to resource group tags
2 parents 7f1cebe + dbfc684 commit 67c114a

File tree

6 files changed

+79
-15
lines changed

6 files changed

+79
-15
lines changed

data/data/azure/variables-azure.tf

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,3 +302,9 @@ variable "azure_user_assigned_identity_key" {
302302
description = "Defines the user identity key used for the encryption of storage account."
303303
default = ""
304304
}
305+
306+
variable "azure_resource_group_metadata_tags" {
307+
type = map(string)
308+
description = "Metadata Azure tags to be applied to the cluster resource group."
309+
default = {}
310+
}

data/data/azure/vnet/main.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ resource "azurerm_resource_group" "main" {
2828

2929
name = "${var.cluster_id}-rg"
3030
location = var.azure_region
31-
tags = var.azure_extra_tags
31+
tags = merge(var.azure_extra_tags, var.azure_resource_group_metadata_tags)
3232
}
3333

3434
data "azurerm_resource_group" "main" {

pkg/asset/cluster/azure/azure.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,17 @@ func tagResourceGroup(ctx context.Context, clusterID string, installConfig *inst
124124
tagKey, tagValue := ownedTag(clusterID)
125125
group.Tags[tagKey] = tagValue
126126
logrus.Debugf("Tagging resource group %s with %s: %s", installConfig.Config.Azure.ResourceGroupName, tagKey, *tagValue)
127+
128+
// Save metadata needed to destroy cluster into tags
129+
config := installConfig.Config.Azure
130+
group.Tags[azure.TagMetadataRegion] = to.StringPtr(config.Region)
131+
if len(config.BaseDomainResourceGroupName) > 0 {
132+
group.Tags[azure.TagMetadataBaseDomainRG] = to.StringPtr(config.BaseDomainResourceGroupName)
133+
}
134+
if len(config.NetworkResourceGroupName) > 0 {
135+
group.Tags[azure.TagMetadataNetworkRG] = to.StringPtr(config.NetworkResourceGroupName)
136+
}
137+
127138
_, err = client.Update(ctx, installConfig.Config.Azure.ResourceGroupName, resources.GroupPatchable{
128139
Tags: group.Tags,
129140
})

pkg/destroy/azure/azure.go

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ type ClusterUninstaller struct {
4646
InfraID string
4747
ResourceGroupName string
4848
BaseDomainResourceGroupName string
49+
NetworkResourceGroupName string
4950

5051
Logger logrus.FieldLogger
5152

@@ -126,15 +127,10 @@ func New(logger logrus.FieldLogger, metadata *types.ClusterMetadata) (providers.
126127
return nil, err
127128
}
128129

129-
group := metadata.Azure.ResourceGroupName
130-
if len(group) == 0 {
131-
group = metadata.InfraID + "-rg"
132-
}
133-
134130
return &ClusterUninstaller{
135131
Session: session,
136132
InfraID: metadata.InfraID,
137-
ResourceGroupName: group,
133+
ResourceGroupName: metadata.Azure.ResourceGroupName,
138134
Logger: logger,
139135
BaseDomainResourceGroupName: metadata.Azure.BaseDomainResourceGroupName,
140136
CloudName: cloudName,
@@ -156,6 +152,38 @@ func (o *ClusterUninstaller) Run() (*types.ClusterQuota, error) {
156152
waitCtx, cancel := context.WithTimeout(context.Background(), timeout)
157153
defer cancel()
158154

155+
// Retrieve metadata from resource group tags, if available
156+
filter := fmt.Sprintf("tagName eq 'kubernetes.io_cluster.%s' and tagValue eq 'owned'", o.InfraID)
157+
groupPager, err := o.resourceGroupsClient.ListComplete(waitCtx, filter, to.Int32Ptr(1))
158+
if err != nil {
159+
return nil, fmt.Errorf("could not list resource groups: %w", err)
160+
}
161+
162+
for ; groupPager.NotDone(); err = groupPager.NextWithContext(waitCtx) {
163+
if err != nil {
164+
o.Logger.Debugf("failed to advance to next resource group list page: %v", err)
165+
continue
166+
}
167+
group := groupPager.Value()
168+
if len(o.ResourceGroupName) == 0 {
169+
o.ResourceGroupName = to.String(group.Name)
170+
o.Logger.Debugf("found resource group name=%s from tags", o.ResourceGroupName)
171+
}
172+
if len(o.BaseDomainResourceGroupName) == 0 {
173+
o.BaseDomainResourceGroupName = to.String(group.Tags[azure.TagMetadataBaseDomainRG])
174+
o.Logger.Debugf("found base domain resource group name=%s from tags", o.BaseDomainResourceGroupName)
175+
}
176+
if len(o.NetworkResourceGroupName) == 0 {
177+
o.NetworkResourceGroupName = to.String(group.Tags[azure.TagMetadataNetworkRG])
178+
o.Logger.Debugf("found network resource group name=%s from tags", o.NetworkResourceGroupName)
179+
}
180+
}
181+
182+
if len(o.ResourceGroupName) == 0 {
183+
o.ResourceGroupName = o.InfraID + "-rg"
184+
o.Logger.Debugf("using default resource group name=%s", o.ResourceGroupName)
185+
}
186+
159187
err = wait.PollUntilContextCancel(
160188
waitCtx,
161189
1*time.Second,

pkg/tfvars/azure/azure.go

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -65,14 +65,15 @@ type config struct {
6565
UseMarketplaceImage bool `json:"azure_use_marketplace_image"`
6666
MarketplaceImageHasPlan bool `json:"azure_marketplace_image_has_plan"`
6767
OSImage `json:",inline"`
68-
SecurityEncryptionType string `json:"azure_master_security_encryption_type,omitempty"`
69-
SecureVirtualMachineDiskEncryptionSetID string `json:"azure_master_secure_vm_disk_encryption_set_id,omitempty"`
70-
SecureBoot string `json:"azure_master_secure_boot,omitempty"`
71-
VirtualizedTrustedPlatformModule string `json:"azure_master_virtualized_trusted_platform_module,omitempty"`
72-
KeyVaultResourceGroup string `json:"azure_keyvault_resource_group,omitempty"`
73-
KeyVaultName string `json:"azure_keyvault_name,omitempty"`
74-
KeyVaultKeyName string `json:"azure_keyvault_key_name,omitempty"`
75-
UserAssignedIdentity string `json:"azure_user_assigned_identity_key,omitempty"`
68+
SecurityEncryptionType string `json:"azure_master_security_encryption_type,omitempty"`
69+
SecureVirtualMachineDiskEncryptionSetID string `json:"azure_master_secure_vm_disk_encryption_set_id,omitempty"`
70+
SecureBoot string `json:"azure_master_secure_boot,omitempty"`
71+
VirtualizedTrustedPlatformModule string `json:"azure_master_virtualized_trusted_platform_module,omitempty"`
72+
KeyVaultResourceGroup string `json:"azure_keyvault_resource_group,omitempty"`
73+
KeyVaultName string `json:"azure_keyvault_name,omitempty"`
74+
KeyVaultKeyName string `json:"azure_keyvault_key_name,omitempty"`
75+
UserAssignedIdentity string `json:"azure_user_assigned_identity_key,omitempty"`
76+
ResourceGroupMetadataTags map[string]string `json:"azure_resource_group_metadata_tags"`
7677
}
7778

7879
// TFVarsSources contains the parameters to be converted into Terraform variables
@@ -157,6 +158,16 @@ func TFVars(sources TFVarsSources) ([]byte, error) {
157158
Version: masterConfig.Image.Version,
158159
}
159160

161+
// Metadata tags to be added to the resource group for the cluster destroy
162+
metadataTags := map[string]string{}
163+
metadataTags[azure.TagMetadataRegion] = region
164+
if len(sources.BaseDomainResourceGroupName) > 0 {
165+
metadataTags[azure.TagMetadataBaseDomainRG] = sources.BaseDomainResourceGroupName
166+
}
167+
if len(masterConfig.NetworkResourceGroup) > 0 {
168+
metadataTags[azure.TagMetadataNetworkRG] = masterConfig.NetworkResourceGroup
169+
}
170+
160171
cfg := &config{
161172
Auth: sources.Auth,
162173
Environment: environment,
@@ -198,6 +209,7 @@ func TFVars(sources TFVarsSources) ([]byte, error) {
198209
KeyVaultName: sources.KeyVault.Name,
199210
KeyVaultKeyName: sources.KeyVault.KeyName,
200211
UserAssignedIdentity: sources.UserAssignedIdentityKey,
212+
ResourceGroupMetadataTags: metadataTags,
201213
}
202214

203215
return json.MarshalIndent(cfg, "", " ")

pkg/types/azure/metadata.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,10 @@ type Metadata struct {
88
ResourceGroupName string `json:"resourceGroupName"`
99
BaseDomainResourceGroupName string `json:"baseDomainResourceGroupName"`
1010
}
11+
12+
// Keys used to save Metadata information as tags.
13+
const (
14+
TagMetadataRegion = "openshift_region"
15+
TagMetadataBaseDomainRG = "openshift_basedomainRG"
16+
TagMetadataNetworkRG = "openshift_networkRG"
17+
)

0 commit comments

Comments
 (0)