Skip to content

Commit b46a565

Browse files
committed
add option for additional user data
1 parent f095b50 commit b46a565

File tree

7 files changed

+60
-1
lines changed

7 files changed

+60
-1
lines changed

environments/site/tofu/additional.tf

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ module "additional" {
3232
availability_zone = lookup(each.value, "availability_zone", null)
3333
ip_addresses = lookup(each.value, "ip_addresses", null)
3434
security_group_ids = lookup(each.value, "security_group_ids", [for o in data.openstack_networking_secgroup_v2.nonlogin: o.id])
35+
additional_cloud_config = lookup(each.value, "additional_cloud_config", var.additional_cloud_config)
36+
additional_cloud_config_vars = lookup(each.value, "additional_cloud_config_vars", var.additional_cloud_config_vars)
3537

3638
# can't be set for additional nodes
3739
compute_init_enable = []
@@ -64,5 +66,7 @@ module "additional" {
6466
"gateway_ip",
6567
"nodename_template",
6668
"security_group_ids",
69+
"additional_cloud_config",
70+
"additional_cloud_config_vars"
6771
]
6872
}

environments/site/tofu/compute.tf

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ module "compute" {
2121
root_volume_type = lookup(each.value, "root_volume_type", var.root_volume_type)
2222
gateway_ip = lookup(each.value, "gateway_ip", var.gateway_ip)
2323
nodename_template = lookup(each.value, "nodename_template", var.cluster_nodename_template)
24+
additional_cloud_config = lookup(each.value, "additional_cloud_config", var.additional_cloud_config)
25+
additional_cloud_config_vars = lookup(each.value, "additional_cloud_config_vars", var.additional_cloud_config_vars)
2426

2527
# optionally set for group:
2628
networks = concat(var.cluster_networks, lookup(each.value, "extra_networks", []))
@@ -59,6 +61,8 @@ module "compute" {
5961
"ip_addresses",
6062
"gateway_ip",
6163
"nodename_template",
64+
"additional_cloud_config",
65+
"additional_cloud_config_vars"
6266
]
6367

6468
config_drive = var.config_drive

environments/site/tofu/control.tf

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,10 @@ resource "openstack_compute_instance_v2" "control" {
9292
%{if var.home_volume_provisioning != "none"}
9393
- [LABEL=home, /exports/home]
9494
%{endif}
95+
96+
%{if var.additional_cloud_config != ""}
97+
${templatestring(var.additional_cloud_config, var.additional_cloud_config_vars)}
98+
%{endif}
9599
EOF
96100

97101
config_drive = var.config_drive

environments/site/tofu/login.tf

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ module "login" {
2121
root_volume_type = lookup(each.value, "root_volume_type", var.root_volume_type)
2222
gateway_ip = lookup(each.value, "gateway_ip", var.gateway_ip)
2323
nodename_template = lookup(each.value, "nodename_template", var.cluster_nodename_template)
24+
additional_cloud_config = lookup(each.value, "additional_cloud_config", var.additional_cloud_config)
25+
additional_cloud_config_vars = lookup(each.value, "additional_cloud_config_vars", var.additional_cloud_config_vars)
2426

2527
# optionally set for group:
2628
networks = concat(var.cluster_networks, lookup(each.value, "extra_networks", []))
@@ -63,8 +65,9 @@ module "login" {
6365
"ip_addresses",
6466
"gateway_ip",
6567
"nodename_template",
68+
"additional_cloud_config",
69+
"additional_cloud_config_vars"
6670
]
6771

6872
config_drive = var.config_drive
69-
7073
}

environments/site/tofu/node_group/nodes.tf

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,10 @@ resource "openstack_compute_instance_v2" "compute_fixed_image" {
116116
user_data = <<-EOF
117117
#cloud-config
118118
fqdn: ${local.fqdns[each.key]}
119+
120+
%{if var.additional_cloud_config != ""}
121+
${templatestring(var.additional_cloud_config, var.additional_cloud_config_vars)}
122+
%{endif}
119123
EOF
120124

121125
availability_zone = var.match_ironic_node ? "${local.baremetal_az}::${var.baremetal_nodes[each.key]}" : var.availability_zone
@@ -173,6 +177,10 @@ resource "openstack_compute_instance_v2" "compute" {
173177
user_data = <<-EOF
174178
#cloud-config
175179
fqdn: ${local.fqdns[each.key]}
180+
181+
%{if var.additional_cloud_config != ""}
182+
${templatestring(var.additional_cloud_config, var.additional_cloud_config_vars)}
183+
%{endif}
176184
EOF
177185

178186
availability_zone = var.match_ironic_node ? "${local.baremetal_az}::${var.baremetal_nodes[each.key]}" : var.availability_zone

environments/site/tofu/node_group/variables.tf

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,3 +201,20 @@ variable "config_drive" {
201201
type = bool
202202
default = false
203203
}
204+
205+
variable "additional_cloud_config" {
206+
description = <<-EOT
207+
Multiline string to be appended to the node's cloud-init cloud-config user-data.
208+
Must be in yaml format and not include the #cloud-config or any other user-data headers.
209+
See https://cloudinit.readthedocs.io/en/latest/explanation/format.html#cloud-config-data.
210+
Can be a templatestring parameterised by `additional_cloud_config_vars`
211+
EOT
212+
type = string
213+
default = ""
214+
}
215+
216+
variable "additional_cloud_config_vars" {
217+
description = "Map of values passed to the `additional_cloud_config` templatestring"
218+
type = map(any)
219+
default = {}
220+
}

environments/site/tofu/variables.tf

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,3 +322,22 @@ variable "config_drive" {
322322
type = bool
323323
default = false
324324
}
325+
326+
variable "additional_cloud_config" {
327+
description = <<-EOT
328+
Multiline string to be appended to the node's cloud-init cloud-config user-data.
329+
Must be in yaml format and not include the #cloud-config or any other user-data headers.
330+
See https://cloudinit.readthedocs.io/en/latest/explanation/format.html#cloud-config-data.
331+
Can be a templatestring parameterised by `additional_cloud_config_vars`
332+
Can't set the `boot-cmd`, `fqdn` or `mounts` variables here
333+
EOT
334+
type = string
335+
default = ""
336+
}
337+
338+
variable "additional_cloud_config_vars" {
339+
description = "Map of values passed to the `additional_cloud_config` templatestring"
340+
type = map(any)
341+
default = {}
342+
}
343+

0 commit comments

Comments
 (0)