From adcf41d52c8bc2653266e683fe0f7f6d249b101b Mon Sep 17 00:00:00 2001 From: Brian Green Date: Mon, 5 Sep 2016 18:22:56 -0500 Subject: [PATCH] Add Terraform config for Digital Ocean --- terraform/digitalocean/README.md | 28 +++++++ terraform/digitalocean/consul.tf | 41 ++++++++++ terraform/digitalocean/outputs.tf | 7 ++ .../digitalocean/terraform.tfvars.example | 4 + terraform/digitalocean/variables.tf | 79 +++++++++++++++++++ 5 files changed, 159 insertions(+) create mode 100644 terraform/digitalocean/README.md create mode 100644 terraform/digitalocean/consul.tf create mode 100644 terraform/digitalocean/outputs.tf create mode 100644 terraform/digitalocean/terraform.tfvars.example create mode 100644 terraform/digitalocean/variables.tf diff --git a/terraform/digitalocean/README.md b/terraform/digitalocean/README.md new file mode 100644 index 000000000..04f2cc920 --- /dev/null +++ b/terraform/digitalocean/README.md @@ -0,0 +1,28 @@ + +# Requirements +Terraform installed +Digital Ocean account with API key +SSH key uploaded to Digital Ocean + +### Variables +Populate terraform.tfvars as follows (or execute with arguments as shown in Usage) + + key_path = "~/.ssh/id_rsa" + do_token = "ASDFQWERTYDERP" + num_instances = "3" + ssh_key_ID = "my_ssh_keyID_in_digital_ocean" + + +# Usage + + terraform plan \ + -var 'key_path=~/.ssh/id_rsa' \ + -var 'do_token=ASDFQWERTYDERP' \ + -var 'num_instances=3' \ + - var 'ssh_key_ID=86:75:30:99:88:88:AA:FF:DD' + + terraform apply \ + -var 'key_path=~/.ssh/id_rsa' \ + -var 'do_token=ASDFQWERTYDERP' \ + -var 'num_instances=3' \ + - var 'ssh_key_ID=86:75:30:99:88:88:AA:FF:DD' diff --git a/terraform/digitalocean/consul.tf b/terraform/digitalocean/consul.tf new file mode 100644 index 000000000..20005ce49 --- /dev/null +++ b/terraform/digitalocean/consul.tf @@ -0,0 +1,41 @@ +provider "digitalocean" { + token = "${var.do_token}" +} + +resource "digitalocean_droplet" "consul" { + ssh_keys = ["${var.ssh_key_ID}"] + image = "${var.ubuntu}" + region = "${var.do_tor1}" + size = "2gb" + private_networking = true + name = "consul${count.index + 1}" + count = "${var.num_instances}" + + connection { + type = "ssh" + private_key = "${file("${var.key_path}")}" + user = "root" + timeout = "2m" + } + + provisioner "file" { + source = "${path.module}/../shared/scripts/debian_upstart.conf" + destination = "/tmp/upstart.conf" + } + + provisioner "remote-exec" { + inline = [ + "echo ${var.num_instances} > /tmp/consul-server-count", + "echo ${digitalocean_droplet.consul.0.ipv4_address} > /tmp/consul-server-addr", + ] + } + + provisioner "remote-exec" { + scripts = [ + "${path.module}/../shared/scripts/install.sh", + "${path.module}/../shared/scripts/service.sh", + "${path.module}/../shared/scripts/ip_tables.sh", + ] + } + +} diff --git a/terraform/digitalocean/outputs.tf b/terraform/digitalocean/outputs.tf new file mode 100644 index 000000000..7aee1b09d --- /dev/null +++ b/terraform/digitalocean/outputs.tf @@ -0,0 +1,7 @@ +output "first_consule_node_address" { + value = "${digitalocean_droplet.consul.0.ipv4_address}" +} + +output "all_addresses" { + value = ["${digitalocean_droplet.consul.*.ipv4_address}"] +} diff --git a/terraform/digitalocean/terraform.tfvars.example b/terraform/digitalocean/terraform.tfvars.example new file mode 100644 index 000000000..fe0a5dcfa --- /dev/null +++ b/terraform/digitalocean/terraform.tfvars.example @@ -0,0 +1,4 @@ +key_path = "~/.ssh/id_rsa" +ssh_key_ID = "my_ssh_key_ID_or_fingerprint_NOT_SSH_KEY_NAME" +do_token = "ASDFQWERTYDERP" +num_instances = "3" diff --git a/terraform/digitalocean/variables.tf b/terraform/digitalocean/variables.tf new file mode 100644 index 000000000..d7a626aaf --- /dev/null +++ b/terraform/digitalocean/variables.tf @@ -0,0 +1,79 @@ +variable "do_token" {} +variable "key_path" {} +variable "ssh_key_ID" {} +variable "num_instances" {} + +## below sourced from +## https://github.com/hashicorp/terraform/blob/master/examples/digitalocean/variable.tf + +# #### +# Current Availiable Datacenter Regions +# As of 05-07-2016 +# + +variable "do_ams2" { + description = "Digital Ocean Amsterdam Data Center 2" + default = "ams2" +} + +variable "do_ams3" { + description = "Digital Ocean Amsterdam Data Center 3" + default = "ams3" +} + +variable "do_fra1" { + description = "Digital Ocean Frankfurt Data Center 1" + default = "fra1" +} + +variable "do_lon1" { + description = "Digital Ocean London Data Center 1" + default = "lon1" +} + +variable "do_nyc1" { + description = "Digital Ocean New York Data Center 1" + default = "nyc1" +} + +variable "do_nyc2" { + description = "Digital Ocean New York Data Center 2" + default = "nyc2" +} + +variable "do_nyc3" { + description = "Digital Ocean New York Data Center 3" + default = "nyc3" +} + +variable "do_sfo1" { + description = "Digital Ocean San Francisco Data Center 1" + default = "sfo1" +} + +variable "do_sgp1" { + description = "Digital Ocean Singapore Data Center 1" + default = "sgp1" +} + +variable "do_tor1" { + description = "Digital Ocean Toronto Datacenter 1" + default = "tor1" +} + +# Default Os + +variable "ubuntu" { + description = "Default LTS" + default = "ubuntu-14-04-x64" +} + +variable "centos" { + description = "Default Centos" + default = "centos-72-x64" +} + +variable "coreos" { + description = "Defaut Coreos" + default = "coreos-899.17.0" +}