From 2a1ff4c5564e045a125729d3384883a62ecc1ad8 Mon Sep 17 00:00:00 2001 From: Michele Cereda Date: Wed, 18 Jan 2023 01:02:04 +0100 Subject: [PATCH] Added terraform cloud-init example --- terraform/multi-part cloud-init/data.tf | 45 +++++++++++++++++++ .../multi-part cloud-init/files/base.yaml | 4 ++ terraform/multi-part cloud-init/main.tf | 12 +++++ terraform/multi-part cloud-init/outputs.tf | 7 +++ .../boinc-client.oci-core-instance.yaml.tftpl | 6 +++ 5 files changed, 74 insertions(+) create mode 100644 terraform/multi-part cloud-init/data.tf create mode 100644 terraform/multi-part cloud-init/files/base.yaml create mode 100644 terraform/multi-part cloud-init/main.tf create mode 100644 terraform/multi-part cloud-init/outputs.tf create mode 100644 terraform/multi-part cloud-init/templates/boinc-client.oci-core-instance.yaml.tftpl 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}