I am trying to read instance metadata using Jinja in a cloud-init config as per the docs here: Instance metadata - cloud-init 23.4 documentation, but the interpolation is not happening. Any insight into why?
main.tf
data "cloudinit_config" "i" {
part {
content_type = "text/cloud-config"
content = templatefile("${path.module}/templates/cloudconfig.tftpl", var.cloud_config_vars)
}
}
resource "aws_instance" "i" {
ami = var.ami
instance_type = var.instance_type
subnet_id = var.subnet
user_data = data.cloudinit_config.i.rendered
}
cloudconfig.tftpl
## template: jinja
#cloud-config
packages:
- https://s3.us-west-2.amazonaws.com/amazon-ssm-us-west-2/latest/linux_{{- 'arm64' if v1.machine == 'aarch64' else 'amd64' -}}/amazon-ssm-agent.rpm
My Jinja syntax seems to be fine. I tested it as follows.
I created test-templating.yaml
as follows:
- https://s3.us-west-2.amazonaws.com/amazon-ssm-us-west-2/latest/linux_{{- 'arm64' if v1.machine == 'aarch64' else 'amd64' -}}/amazon-ssm-agent.rpm
Then run:
cloud-init query --format="$(cat test-templating.yaml )"
It produced the output I was looking for:
- https://s3.us-west-2.amazonaws.com/amazon-ssm-us-west-2/latest/linux_amd64/amazon-ssm-agent.rpm
Terraform details
Terraform v1.5.5
on linux_arm64
+ provider registry.terraform.io/hashicorp/aws v5.13.1
+ provider registry.terraform.io/hashicorp/cloudinit v2.3.2
Target system details
Platform: Red Hat Enterprise Linux release 9.2 (Plow)
Architecture: aarch64
Hyperscaler: AWS
Cloud-init version: 22.1-10.el9_2