Terraform: run script on new server
July 22, 2018
I'm provisioning a new machine on AWS using terraform, and I want to use puppet to configure it. I don't need to have a puppet server, I just want to put a puppet file onto the machine and then execute it with puppet.
Terraform
The initial terraform script installs puppet, and copies a file from the local machine onto the new server. It then creates a new user and copies the ssh keys, before executing puppet apply on the newly copied file.
resource "aws_instance" "bbr-web" {
ami = "${lookup(var.ec2ami, var.region)}"
instance_type = "t2.micro"
key_name = "${lookup(var.keypair, var.region)}"
security_groups = [
"${aws_security_group.web_traffic.name}",
"${aws_security_group.admin_access.name}"
]
tags {
Name = "bbr-web"
}
provisioner "file" {
source = "../web/puppet/bootstrap.pp"
destination = "bootstrap.pp"
}
provisioner "remote-exec" {
inline = [
"sudo apt-get update",
"sudo apt-get upgrade",
"sudo addgroup ${var.prefix}",
"sudo adduser ${var.prefix} --ingroup ${var.prefix} --disabled-password --gecos \"\"",
"sudo bash -c echo ${var.prefix}:${var.web_ssh_password} | chpasswd",
"sudo mkdir /home/${var.prefix}/.ssh",
"sudo cp ~/.ssh/authorized_keys /home/${var.prefix}/.ssh",
"sudo chown -R bbr:bbr /home/${var.prefix}/.ssh",
"sudo apt-get install puppet -y",
"sudo puppet apply ~/bootstrap.pp",
]
}
connection {
type = "ssh"
agent = false
private_key = "${file("${var.ec2_private_key}")}"
user = "admin"
}
}


