99 # this is a mapping with
1010 # keys "compute-0-vol-a", "compute-0-vol-b" ...
1111 # values which are a mapping e.g. {"node"="compute-0", "volume"="vol-a"}
12+ compute_instances = var. ignore_image_changes ? openstack_compute_instance_v2. compute_fixed_image : openstack_compute_instance_v2. compute
1213}
1314
1415resource "openstack_blockstorage_volume_v3" "compute" {
@@ -24,7 +25,7 @@ resource "openstack_compute_volume_attach_v2" "compute" {
2425
2526 for_each = local. all_compute_volumes
2627
27- instance_id = openstack_compute_instance_v2 . compute [" ${ each . value . node } " ]. id
28+ instance_id = local . compute_instances [" ${ each . value . node } " ]. id
2829 volume_id = openstack_blockstorage_volume_v3. compute [" ${ each . key } " ]. id
2930}
3031
@@ -48,9 +49,57 @@ resource "openstack_networking_port_v2" "compute" {
4849 }
4950}
5051
52+ resource "openstack_compute_instance_v2" "compute_fixed_image" {
53+
54+ for_each = var. ignore_image_changes ? toset (var. nodes ) : []
55+
56+ name = " ${ var . cluster_name } -${ each . key } "
57+ image_id = var. image_id
58+ flavor_name = var. flavor
59+ key_pair = var. key_pair
60+
61+ dynamic "block_device" {
62+ for_each = var. volume_backed_instances ? [1 ]: []
63+ content {
64+ uuid = var. image_id
65+ source_type = " image"
66+ destination_type = " volume"
67+ volume_size = var. root_volume_size
68+ boot_index = 0
69+ delete_on_termination = true
70+ }
71+ }
72+
73+ network {
74+ port = openstack_networking_port_v2. compute [each . key ]. id
75+ access_network = true
76+ }
77+
78+ metadata = merge (
79+ {
80+ environment_root = var.environment_root
81+ k3s_token = var.k3s_token
82+ control_address = var.control_address
83+ },
84+ {for e in var . compute_init_enable : e => true }
85+ )
86+
87+ user_data = <<- EOF
88+ #cloud-config
89+ fqdn: ${ var . cluster_name } -${ each . key } .${ var . cluster_name } .${ var . cluster_domain_suffix }
90+ EOF
91+
92+ lifecycle {
93+ ignore_changes = [
94+ image_id ,
95+ ]
96+ }
97+
98+ }
99+
51100resource "openstack_compute_instance_v2" "compute" {
52101
53- for_each = toset (var. nodes )
102+ for_each = var . ignore_image_changes ? [] : toset (var. nodes )
54103
55104 name = " ${ var . cluster_name } -${ each . key } "
56105 image_id = var. image_id
@@ -91,5 +140,5 @@ resource "openstack_compute_instance_v2" "compute" {
91140}
92141
93142output "compute_instances" {
94- value = openstack_compute_instance_v2 . compute
143+ value = local . compute_instances
95144}
0 commit comments