# Jinja templating not working in cloud config

**URL:** <https://discuss.hashicorp.com/t/jinja-templating-not-working-in-cloud-config/60740>\
**Category:** Terraform\
**Created:** [December 8, 2023, 8:00pm UTC](https://discuss.hashicorp.com/t/jinja-templating-not-working-in-cloud-config/60740 "2023-12-08T20:00:41Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![shape\_of\_earth](https://sea2.discourse-cdn.com/hashicorp/user_avatar/discuss.hashicorp.com/shape_of_earth/32/42721_2.png) [@shape\_of\_earth](https://discuss.hashicorp.com/u/shape_of_earth)\
**Post date:** [December 8, 2023, 8:00pm UTC](https://discuss.hashicorp.com/t/jinja-templating-not-working-in-cloud-config/60740/1 "2023-12-08T20:00:41Z")

</div>

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](https://cloudinit.readthedocs.io/en/latest/explanation/instancedata.html), but the interpolation is not happening. Any insight into why?

main.tf

```auto
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

```auto
## 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:

```auto
  - 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:

```auto
cloud-init query --format="$(cat test-templating.yaml )"

```

It produced the output I was looking for:

```auto
  - https://s3.us-west-2.amazonaws.com/amazon-ssm-us-west-2/latest/linux_amd64/amazon-ssm-agent.rpm

```

Terraform details

```auto
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

```auto
Platform: Red Hat Enterprise Linux release 9.2 (Plow)
Architecture: aarch64
Hyperscaler: AWS
Cloud-init version: 22.1-10.el9_2

```

---

<div class="post-metadata">

**Author:** ![Cafeine42](https://sea2.discourse-cdn.com/hashicorp/user_avatar/discuss.hashicorp.com/cafeine42/32/40800_2.png) [@Cafeine42](https://discuss.hashicorp.com/u/Cafeine42)\
**Post date:** [March 14, 2024, 8:23am UTC](https://discuss.hashicorp.com/t/jinja-templating-not-working-in-cloud-config/60740/2 "2024-03-14T08:23:11Z")

</div>

When trying to use jinja to use variables from IMDSv2 I also encountered this problem.

I think there is a mime type/multipart problem. In my case, having a simple template, I worked around using the templatefile function.

Terraform

```auto
user_data = base64encode(templatefile("userdata.tftpl", {
  aws_network_interface_id = aws_network_interface.this.id
}))

```

Template

```auto
## template: jinja
#cloud-config
package_update: true
package_upgrade: true

bootcmd:
- aws ec2 attach-network-interface --instance-id {{v1.instance_id}} --network-interface-id ${aws_network_interface_id} --device-index 1 --region {{v1.region}}

```
