Initial Commit
This commit is contained in:
commit
d8f31c1625
7
.gitignore
vendored
Normal file
7
.gitignore
vendored
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
terraform.tfvars
|
||||||
|
*.tfplan
|
||||||
|
.terraform
|
||||||
|
*.tfstate*
|
||||||
|
*.swp
|
||||||
|
*.bak
|
||||||
|
private.key
|
70
README.md
Normal file
70
README.md
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
# Terraform setup for DigitalOcean
|
||||||
|
|
||||||
|
This is a teraform setup for my LPI Labs. The servers are deployed on DigitalOcean. The DNS is automatically updated with the server names.
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
* Install *Terraform* on your local host:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ wget https://releases.hashicorp.com/terraform/0.11.7/terraform_0.11.7_linux_amd64.zip
|
||||||
|
$ unzip terraform_0.11.7_linux_amd64.zip
|
||||||
|
$ sudo cp terraform /usr/local/bin
|
||||||
|
```
|
||||||
|
|
||||||
|
## Instructions
|
||||||
|
|
||||||
|
* Get the repo
|
||||||
|
|
||||||
|
```
|
||||||
|
$ git clone https://git.theo-andreou.org/Personal/lpi-deploy-digitalocean.git
|
||||||
|
$ cd terraform-scaleway
|
||||||
|
```
|
||||||
|
|
||||||
|
* Copy the *terraform.tfvars.example* to *terraform.tfvars* and setup your settings:
|
||||||
|
|
||||||
|
```
|
||||||
|
do_token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||||
|
domain = "example.org"
|
||||||
|
count = 14
|
||||||
|
|
||||||
|
server_name = {
|
||||||
|
"debian" = "lpi-deb"
|
||||||
|
"centos" = "lpi-centos"
|
||||||
|
}
|
||||||
|
|
||||||
|
images = {
|
||||||
|
"debian" = "debian-9-x64"
|
||||||
|
"centos" = "centos-7-x64"
|
||||||
|
}
|
||||||
|
|
||||||
|
ssh_keys = [
|
||||||
|
"xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx",
|
||||||
|
]
|
||||||
|
|
||||||
|
dns_server = "ns1.example.org"
|
||||||
|
dns_key_name = "control.ns1.example.org"
|
||||||
|
dns_key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxx+xxxxxxxxxxxxxxxxxxxxx+xxx=="
|
||||||
|
```
|
||||||
|
|
||||||
|
* Initialize your *Terraform* environment:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ terraform init
|
||||||
|
```
|
||||||
|
|
||||||
|
* Create a *Terraform* plan:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ terraform plan -out lpi.plan
|
||||||
|
```
|
||||||
|
|
||||||
|
* Apply the plan:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ terraform apply "lpi.plan"
|
||||||
|
```
|
||||||
|
|
||||||
|
## References
|
||||||
|
* https://www.terraform.io/docs/providers/scaleway/index.html
|
||||||
|
* https://scaleway.com
|
92
lpi.tf
Normal file
92
lpi.tf
Normal file
|
@ -0,0 +1,92 @@
|
||||||
|
provider "digitalocean" {
|
||||||
|
token = "${var.do_token}"
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "digitalocean_volume" "centos_lpi" {
|
||||||
|
count = "${var.count}"
|
||||||
|
name = "${var.server_name["centos"]}-${count.index}.vol"
|
||||||
|
region = "${var.region}"
|
||||||
|
size = 20
|
||||||
|
description = "Empty Volume"
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "digitalocean_droplet" "centos_lpi" {
|
||||||
|
count = "${var.count}"
|
||||||
|
name = "${var.server_name["centos"]}-${count.index}.${var.domain}"
|
||||||
|
image = "${var.images["centos"]}"
|
||||||
|
size = "${var.size}"
|
||||||
|
region = "${var.region}"
|
||||||
|
ssh_keys = "${var.ssh_keys}"
|
||||||
|
volume_ids = ["${element(digitalocean_volume.centos_lpi.*.id, count.index)}"]
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "digitalocean_volume" "debian_lpi" {
|
||||||
|
count = "${var.count}"
|
||||||
|
name = "${var.server_name["debian"]}-${count.index}.vol"
|
||||||
|
region = "${var.region}"
|
||||||
|
size = 20
|
||||||
|
description = "Empty Volume"
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "digitalocean_droplet" "debian_lpi" {
|
||||||
|
count = "${var.count}"
|
||||||
|
name = "${var.server_name["debian"]}-${count.index}.${var.domain}"
|
||||||
|
image = "${var.images["debian"]}"
|
||||||
|
size = "${var.size}"
|
||||||
|
region = "${var.region}"
|
||||||
|
ssh_keys = "${var.ssh_keys}"
|
||||||
|
volume_ids = ["${element(digitalocean_volume.debian_lpi.*.id, count.index)}"]
|
||||||
|
}
|
||||||
|
|
||||||
|
provider "dns" {
|
||||||
|
update {
|
||||||
|
server = "${var.dns_server}"
|
||||||
|
key_name = "${var.dns_key_name}"
|
||||||
|
key_algorithm = "hmac-sha512"
|
||||||
|
key_secret = "${var.dns_key}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "dns_a_record_set" "centos_lpi" {
|
||||||
|
count = "${var.count}"
|
||||||
|
zone = "${var.domain}."
|
||||||
|
name = "${var.server_name["centos"]}-${count.index}"
|
||||||
|
addresses = ["${element(digitalocean_droplet.centos_lpi.*.ipv4_address, count.index)}"]
|
||||||
|
ttl = 300
|
||||||
|
|
||||||
|
provisioner "remote-exec" {
|
||||||
|
inline = [
|
||||||
|
"rndc sync -clean",
|
||||||
|
]
|
||||||
|
|
||||||
|
connection {
|
||||||
|
type = "ssh"
|
||||||
|
host = "${var.dns_server}"
|
||||||
|
user = "root"
|
||||||
|
port = "3347"
|
||||||
|
private_key = "${file("private.key")}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "dns_a_record_set" "debian_lpi" {
|
||||||
|
count = "${var.count}"
|
||||||
|
zone = "${var.domain}."
|
||||||
|
name = "${var.server_name["debian"]}-${count.index}"
|
||||||
|
addresses = ["${element(digitalocean_droplet.debian_lpi.*.ipv4_address, count.index)}"]
|
||||||
|
ttl = 300
|
||||||
|
|
||||||
|
provisioner "remote-exec" {
|
||||||
|
inline = [
|
||||||
|
"rndc sync -clean",
|
||||||
|
]
|
||||||
|
|
||||||
|
connection {
|
||||||
|
type = "ssh"
|
||||||
|
host = "${var.dns_server}"
|
||||||
|
user = "root"
|
||||||
|
port = "3347"
|
||||||
|
private_key = "${file("private.key")}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
21
terraform.tfvars.example
Normal file
21
terraform.tfvars.example
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
do_token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||||
|
domain = "example.org"
|
||||||
|
count = 14
|
||||||
|
|
||||||
|
server_name = {
|
||||||
|
"debian" = "lpi-deb"
|
||||||
|
"centos" = "lpi-centos"
|
||||||
|
}
|
||||||
|
|
||||||
|
images = {
|
||||||
|
"debian" = "debian-9-x64"
|
||||||
|
"centos" = "centos-7-x64"
|
||||||
|
}
|
||||||
|
|
||||||
|
ssh_keys = [
|
||||||
|
"xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx",
|
||||||
|
]
|
||||||
|
|
||||||
|
dns_server = "ns1.example.org"
|
||||||
|
dns_key_name = "control.ns1.example.org"
|
||||||
|
dns_key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxx+xxxxxxxxxxxxxxxxxxxxx+xxx=="
|
35
variables.tf
Normal file
35
variables.tf
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
variable "do_token" {}
|
||||||
|
|
||||||
|
variable "count" {
|
||||||
|
default = 11
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "region" {
|
||||||
|
default = "lon1"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "size" {
|
||||||
|
default = "1gb"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "server_name" {
|
||||||
|
type = "map"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "domain" {
|
||||||
|
default = "example.com"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "images" {
|
||||||
|
type = "map"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "ssh_keys" {
|
||||||
|
type = "list"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "dns_server" {}
|
||||||
|
|
||||||
|
variable "dns_key_name" {}
|
||||||
|
|
||||||
|
variable "dns_key" {}
|
Loading…
Reference in a new issue