fix the random order of block_device_mappings render

Include a new function to get the keys of the map used for block_device_mappings to access elements in deterministic order.
This commit is contained in:
Aldo Fuster Turpin 2025-01-07 14:43:16 +01:00
parent eb170d2beb
commit ba0a94fee4
1 changed files with 35 additions and 33 deletions

View File

@ -22,6 +22,7 @@ import (
"k8s.io/kops/upup/pkg/fi/cloudup/awsup" "k8s.io/kops/upup/pkg/fi/cloudup/awsup"
"k8s.io/kops/upup/pkg/fi/cloudup/terraform" "k8s.io/kops/upup/pkg/fi/cloudup/terraform"
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter" "k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
"k8s.io/kops/util/pkg/maps"
) )
type terraformLaunchTemplateNetworkInterface struct { type terraformLaunchTemplateNetworkInterface struct {
@ -262,55 +263,39 @@ func (t *LaunchTemplate) RenderTerraform(target *terraform.TerraformTarget, a, e
} }
} }
} }
devices, err := e.buildRootDevice(cloud) devices, err := e.buildRootDevice(cloud)
if err != nil { if err != nil {
return err return err
} }
for n, x := range devices {
tf.BlockDeviceMappings = append(tf.BlockDeviceMappings, &terraformLaunchTemplateBlockDevice{ devicesKeys := maps.SortedKeys(devices)
DeviceName: fi.PtrTo(n), for _, key := range devicesKeys {
EBS: []*terraformLaunchTemplateBlockDeviceEBS{ terraformLaunchTemplateBlockDevice := createTerraformLaunchTemplateBlockDevice(key, devices[key])
{ tf.BlockDeviceMappings = append(tf.BlockDeviceMappings, terraformLaunchTemplateBlockDevice)
DeleteOnTermination: fi.PtrTo(true),
Encrypted: x.EbsEncrypted,
KmsKeyID: x.EbsKmsKey,
IOPS: x.EbsVolumeIops,
Throughput: x.EbsVolumeThroughput,
VolumeSize: x.EbsVolumeSize,
VolumeType: fi.PtrTo(string(x.EbsVolumeType)),
},
},
})
} }
additionals, err := buildAdditionalDevices(e.BlockDeviceMappings) additionals, err := buildAdditionalDevices(e.BlockDeviceMappings)
if err != nil { if err != nil {
return err return err
} }
for n, x := range additionals {
tf.BlockDeviceMappings = append(tf.BlockDeviceMappings, &terraformLaunchTemplateBlockDevice{ additionalsKeys := maps.SortedKeys(additionals)
DeviceName: fi.PtrTo(n), for _, key := range additionalsKeys {
EBS: []*terraformLaunchTemplateBlockDeviceEBS{ terraformLaunchTemplateBlockDevice := createTerraformLaunchTemplateBlockDevice(key, additionals[key])
{ tf.BlockDeviceMappings = append(tf.BlockDeviceMappings, terraformLaunchTemplateBlockDevice)
DeleteOnTermination: fi.PtrTo(true),
Encrypted: x.EbsEncrypted,
IOPS: x.EbsVolumeIops,
Throughput: x.EbsVolumeThroughput,
KmsKeyID: x.EbsKmsKey,
VolumeSize: x.EbsVolumeSize,
VolumeType: fi.PtrTo(string(x.EbsVolumeType)),
},
},
})
} }
devices, err = buildEphemeralDevices(cloud, fi.ValueOf(e.InstanceType)) devices, err = buildEphemeralDevices(cloud, fi.ValueOf(e.InstanceType))
if err != nil { if err != nil {
return err return err
} }
for n, x := range devices {
devicesKeys = maps.SortedKeys(devices)
for _, key := range devicesKeys {
tf.BlockDeviceMappings = append(tf.BlockDeviceMappings, &terraformLaunchTemplateBlockDevice{ tf.BlockDeviceMappings = append(tf.BlockDeviceMappings, &terraformLaunchTemplateBlockDevice{
VirtualName: x.VirtualName, VirtualName: devices[key].VirtualName,
DeviceName: fi.PtrTo(n), DeviceName: fi.PtrTo(key),
}) })
} }
@ -328,3 +313,20 @@ func (t *LaunchTemplate) RenderTerraform(target *terraform.TerraformTarget, a, e
return target.RenderResource("aws_launch_template", fi.ValueOf(e.Name), tf) return target.RenderResource("aws_launch_template", fi.ValueOf(e.Name), tf)
} }
func createTerraformLaunchTemplateBlockDevice(deviceName string, v *BlockDeviceMapping) *terraformLaunchTemplateBlockDevice {
return &terraformLaunchTemplateBlockDevice{
DeviceName: fi.PtrTo(deviceName),
EBS: []*terraformLaunchTemplateBlockDeviceEBS{
{
DeleteOnTermination: fi.PtrTo(true),
Encrypted: v.EbsEncrypted,
KmsKeyID: v.EbsKmsKey,
IOPS: v.EbsVolumeIops,
Throughput: v.EbsVolumeThroughput,
VolumeSize: v.EbsVolumeSize,
VolumeType: fi.PtrTo(string(v.EbsVolumeType)),
},
},
}
}