snippetterraformMajor
How to use cloud-init with Terraform?
Viewed 0 times
withinitcloudhowuseterraform
Problem
I am working with Digital Ocean and Terraform and I already can automate the domain, subdomain, network preferences and the host but there is a section called
The description of that field says
How to take advantage of this while using Terraform?
User data that looks like this:The description of that field says
Allows the use of Cloud-init to configure your droplet. Looking around I found the documentation.How to take advantage of this while using Terraform?
Solution
Cloud-init files are essentially bootstrap codes, that run before each startup, and can - among others - modify files, set up services, create users, etc.
Not all types of droplets support all functionalities of cloud-init, for example CoreOS uses it's own implementation, with a very limited subset of valid values.
To use this in terraform, simply provide the cloud-init file during droplet creation:
This will for example create a droplet, where CoreOS will run etcd2 and fleet during startup
You can find some more examples in this repository, where I show how one can use these configuration options to set up some simple docker based services on CoreOS
Not all types of droplets support all functionalities of cloud-init, for example CoreOS uses it's own implementation, with a very limited subset of valid values.
To use this in terraform, simply provide the cloud-init file during droplet creation:
main.tf:resource "digitalocean_droplet" "web" {
image = "coreos-stable"
name = "web"
region = "lon1"
size = "2gb"
private_networking = true
ssh_keys = ["${digitalocean_ssh_key.dodemo.id}"]
user_data = "${file("web.conf")}"
}web.conf:#cloud-config
coreos:
units:
- name: "etcd2.service"
command: "start"
- name: "fleet.service"
command: "start"This will for example create a droplet, where CoreOS will run etcd2 and fleet during startup
You can find some more examples in this repository, where I show how one can use these configuration options to set up some simple docker based services on CoreOS
Code Snippets
resource "digitalocean_droplet" "web" {
image = "coreos-stable"
name = "web"
region = "lon1"
size = "2gb"
private_networking = true
ssh_keys = ["${digitalocean_ssh_key.dodemo.id}"]
user_data = "${file("web.conf")}"
}#cloud-config
coreos:
units:
- name: "etcd2.service"
command: "start"
- name: "fleet.service"
command: "start"Context
StackExchange DevOps Q#10, answer score: 25
Revisions (0)
No revisions yet.