Jack
Jack

Reputation: 1

terraform, pass on user data only if variable is provided

I have the following

I have a AWS EC2 instance I want to pass on user data, but only if a variable neccessary for the userdata was provided by terraform apply.

I tried various ways but I cannot get to my goal

step 1:

resource "aws_instance" "publisher_instance" {
    ami = var.publisher_instance_ami
    instance_type = var.publisher_instance_type
    subnet_id = "${aws_subnet.subnet2.id}"
    key_name = var.key_name
    vpc_security_group_ids = ["${aws_security_group.publisher_security_group.id}"]
    tags = {
      Name = "${local.workspace["name"]}-Test"
    }
    user_data     = <<EOF
     #!/bin/bash
     /home/centos/launch -token ${var.token}
     yum update -y
     EOF
}

As you can see I only want to pass on user_data if the var.token was provided while applying

I then tried to put the user_data into a data object like

data "template_cloudinit_config" "userdata" {
  gzip          = false
  base64_encode = false
  part {
    content_type = "text/x-shellscript"
    content      = <<-EOF
    #!/bin/bash
    /home/centos/launch -token ${var.token}
   yum update -y
    EOF
  }

}

and tried this

    user_data     = 
 ${data.template_cloudinit_config.userdata.rendered}"

but I cannot figure out how I can put this into a condition.

Can you help me?

thanks

Upvotes: 0

Views: 813

Answers (1)

Mark B
Mark B

Reputation: 200607

Use the ternary operator, and pass null if there is no token:

user_data     = length(var.token) == 0 ? null : data.template_cloudinit_config.userdata.rendered

Upvotes: 2

Related Questions