/**
|
|
* Cluster on DO
|
|
*
|
|
*/
|
|
|
|
variable "name" {
|
|
description = "The cluster name, e.g cdn"
|
|
}
|
|
|
|
variable "environment" {
|
|
description = "Environment tag, e.g prod"
|
|
}
|
|
|
|
variable "image_id" {
|
|
description = "Image ID"
|
|
}
|
|
|
|
variable "regions" {
|
|
description = "Regions to launch in"
|
|
type = "list"
|
|
}
|
|
|
|
variable "key_ids" {
|
|
description = "SSH keys to use"
|
|
type = "list"
|
|
}
|
|
|
|
variable "instance_size" {
|
|
description = "The instance size to use, e.g 2gb"
|
|
}
|
|
|
|
variable "desired_capacity" {
|
|
description = "Desired instance count"
|
|
default = 3
|
|
}
|
|
|
|
#-----------------------
|
|
# Instances
|
|
|
|
resource "digitalocean_droplet" "cluster" {
|
|
# set the image and instance type
|
|
name = "${var.name}${count.index}"
|
|
image = "${var.image_id}"
|
|
size = "${var.instance_size}"
|
|
|
|
# the `element` function handles modulo
|
|
region = "${element(var.regions, count.index)}"
|
|
|
|
ssh_keys = "${var.key_ids}"
|
|
|
|
count = "${var.desired_capacity}"
|
|
lifecycle = {
|
|
prevent_destroy = false
|
|
}
|
|
}
|
|
|
|
#-----------------------
|
|
|
|
// The cluster name, e.g cdn
|
|
output "name" {
|
|
value = "${var.name}"
|
|
}
|
|
|
|
// The list of cluster instance ids
|
|
output "instances" {
|
|
value = ["${digitalocean_droplet.cluster.*.id}"]
|
|
}
|
|
|
|
// The list of cluster instance ips
|
|
output "private_ips" {
|
|
value = ["${digitalocean_droplet.cluster.*.ipv4_address_private}"]
|
|
}
|
|
|
|
// The list of cluster instance ips
|
|
output "public_ips" {
|
|
value = ["${digitalocean_droplet.cluster.*.ipv4_address}"]
|
|
}
|