diff --git a/terraform/multi-part cloud-init/data.tf b/terraform/multi-part cloud-init/data.tf new file mode 100644 index 0000000..478de89 --- /dev/null +++ b/terraform/multi-part cloud-init/data.tf @@ -0,0 +1,45 @@ +# https://registry.terraform.io/providers/hashicorp/cloudinit/latest/docs +# https://github.com/chrusty/terraform-multipart-userdata/blob/master/example/cloudinit.tf + +data "cloudinit_config" "azurerm_linux_virtual_machine" { + # Disabled only to make the rendered config readable in the outputs. + gzip = false + base64_encode = false + + part { + content = file("${path.module}/files/base.yaml") + content_type = "text/cloud-config" + filename = "base" + } + + # part { + # content = file("${path.module}/templates/n-th.yaml") + # content_type = "text/cloud-config" + # merge_type = "dict(recurse_array,no_replace)+list(append)" + # filename = "n-th.yaml" + # } +} + +data "cloudinit_config" "oci_core_instance" { + # Disabled only to make the rendered config readable in the outputs. + gzip = false + base64_encode = false + + part { + content = file("${path.module}/files/base.yaml") + content_type = "text/cloud-config" + filename = "base" + } + + part { + content = templatefile( + "${path.module}/templates/boinc-client.oci-core-instance.yaml.tftpl", + { + user = "opc" + } + ) + content_type = "text/cloud-config" + merge_type = "dict(recurse_array,no_replace)+list(append)" + filename = "n-th.yaml" + } +} diff --git a/terraform/multi-part cloud-init/files/base.yaml b/terraform/multi-part cloud-init/files/base.yaml new file mode 100644 index 0000000..9d37cc1 --- /dev/null +++ b/terraform/multi-part cloud-init/files/base.yaml @@ -0,0 +1,4 @@ +#cloud-config + +package_reboot_if_required: false +package_upgrade: false diff --git a/terraform/multi-part cloud-init/main.tf b/terraform/multi-part cloud-init/main.tf new file mode 100644 index 0000000..2e5d001 --- /dev/null +++ b/terraform/multi-part cloud-init/main.tf @@ -0,0 +1,12 @@ +# resource "azurerm_linux_virtual_machine" "vm" { +# user_data = data.cloudinit_config.azurerm_linux_virtual_machine.rendered +# … +# } + +# resource "oci_core_instance" "instance" { +# … +# metadata = { +# … +# user_data = data.cloudinit_config.oci_core_instance.rendered +# } +# } diff --git a/terraform/multi-part cloud-init/outputs.tf b/terraform/multi-part cloud-init/outputs.tf new file mode 100644 index 0000000..300cf27 --- /dev/null +++ b/terraform/multi-part cloud-init/outputs.tf @@ -0,0 +1,7 @@ +output "cloudinit_config_azurerm_linux_virtual_machine" { + value = data.cloudinit_config.azurerm_linux_virtual_machine.rendered +} + +output "cloudinit_config_oci_core_instance" { + value = data.cloudinit_config.oci_core_instance.rendered +} diff --git a/terraform/multi-part cloud-init/templates/boinc-client.oci-core-instance.yaml.tftpl b/terraform/multi-part cloud-init/templates/boinc-client.oci-core-instance.yaml.tftpl new file mode 100644 index 0000000..917d708 --- /dev/null +++ b/terraform/multi-part cloud-init/templates/boinc-client.oci-core-instance.yaml.tftpl @@ -0,0 +1,6 @@ +#cloud-config + +packages: + - boinc-client + +# Something about user ${user}