Reputation: 10467
when launching an EC2, can I include a script file with arguments in user_data field? such as: user_data = "${file("install_software.sh"), user_name pass_word}"
besides, can I include multiple script files in user_data field? such as: user_data = "${file("install_software1.sh","install_software2.sh")}"
I did not see any examples of them yet, so I do not know what can be the format. If I cannot do that using user_data, how to do that? should I use remote-exec or sth. else?
============= update: Thanks KOE for responding me. Here I post the complete answers in case sb. else need. I have tested them.
+++++++++++ how to include arguments in user_data field:
userdata_arguments_test.tf:
data "template_file" "user_data_test" {
template = "${file("userdata_arg_test.tfl")}"
vars {
myuser = "${var.myuser}"
mypassword = "${var.mypassword}"
}
}
resource "aws_instance" "user_data_test" {
......
user_data = "${data.template_file.user_data_test.rendered}"
}
userdata_arg_test.tfl
#!/bin/bash
echo ${myuser}, ${mypassword} >/tmp/my_info.log
+++++++++++ how to include multiple files in user_data field:
userdata_mfiles_test.tf:
data "template_file" "user_data_common" {
template = "${file("userdata_arg_test.tfl")}"
vars {
myuser = "${var.myuser}"
mypassword = "${var.mypassword}"
}
}
data "template_file" "user_data_master" {
template = "${file("userdata_arg_test2.tfl")}"
vars {
myuser2 = "${var.myuser}"
mypassword2 = "${var.mypassword}"
}
}
data "template_cloudinit_config" "master" {
gzip = true
base64_encode = true
part {
content_type = "text/x-shellscript"
content = "${data.template_file.user_data_common.rendered}"
}
part {
content_type = "text/x-shellscript"
content = "${data.template_file.user_data_master.rendered}"
}
}
resource "aws_instance" "user_data_test" {
....
user_data = "${data.template_cloudinit_config.master.rendered}"
}
userdata_arg_test.tfl
#!/bin/bash
echo ${myuser}, ${mypassword} >/tmp/my_info.log
userdata_arg_test2.tfl
#!/bin/bash
echo ${myuser2} + ${mypassword2} >/tmp/my_info2.log
Upvotes: 3
Views: 1425
Reputation: 10467
Thanks KOE for responding me. Here I post the complete answers in case sb. else need. I have tested them.
userdata_arguments_test.tf:
data "template_file" "user_data_test" {
template = "${file("userdata_arg_test.tfl")}"
vars {
myuser = "${var.myuser}"
mypassword = "${var.mypassword}"
}
}
resource "aws_instance" "user_data_test" {
......
user_data = "${data.template_file.user_data_test.rendered}"
}
userdata_arg_test.tfl
#!/bin/bash
echo ${myuser}, ${mypassword} >/tmp/my_info.log
userdata_mfiles_test.tf:
data "template_file" "user_data_common" {
template = "${file("userdata_arg_test.tfl")}"
vars {
myuser = "${var.myuser}"
mypassword = "${var.mypassword}"
}
}
data "template_file" "user_data_master" {
template = "${file("userdata_arg_test2.tfl")}"
vars {
myuser2 = "${var.myuser}"
mypassword2 = "${var.mypassword}"
}
}
data "template_cloudinit_config" "master" {
gzip = true
base64_encode = true
part {
content_type = "text/x-shellscript"
content = "${data.template_file.user_data_common.rendered}"
}
part {
content_type = "text/x-shellscript"
content = "${data.template_file.user_data_master.rendered}"
}
}
resource "aws_instance" "user_data_test" {
....
user_data = "${data.template_cloudinit_config.master.rendered}"
}
userdata_arg_test.tfl
#!/bin/bash
echo ${myuser}, ${mypassword} >/tmp/my_info.log
userdata_arg_test2.tfl
#!/bin/bash
echo ${myuser2} + ${mypassword2} >/tmp/my_info2.log
Upvotes: 1
Reputation: 1298
What you want to use is template_file
data "template_file" "user_data" {
template = "${file("script1.sh.tpl")}"
vars {
var1 = "foo"
var2 = "bar"
}
}
If you want to use multiple scripts in your user_data you need to follow the cloud-init multipart format and put it in one or several file *.tpl, then combine them using terraform standard interpolation or inline templates.
Reference:
https://www.terraform.io/docs/providers/template/d/file.html http://cloudinit.readthedocs.io/en/latest/topics/format.html#mime-multi-part-archive https://github.com/ukayani/cloud-init-example/blob/master/SampleUserData
Upvotes: 4