Skip to content
This repository was archived by the owner on Oct 31, 2019. It is now read-only.

[WIP] Initial cut of moving all etcd stuff to a module #181

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 0 additions & 55 deletions bashsource.tf
Original file line number Diff line number Diff line change
Expand Up @@ -4,61 +4,6 @@ resource null_resource "build_source" {
}
}

resource null_resource "etcd-ad1" {
count = "${var.etcdAd1Count}"
depends_on = [
"module.instances-etcd-ad1",
"null_resource.build_source"
]

triggers {
etcd_id = "${element(module.instances-etcd-ad1.ids, count.index)}"
build_source_id = "${null_resource.build_source.id}"
}

provisioner "local-exec" {
command = "echo 'alias ${var.label_prefix}etcdad1-${count.index}=\"ssh -i ${path.root}/generated/instances_id_rsa opc@${element(module.instances-etcd-ad1.instance_public_ips, count.index)}\"' >> source.sh"
}
}

resource null_resource "etcd-ad2" {
count = "${var.etcdAd2Count}"
depends_on = [
"module.instances-etcd-ad2",
"null_resource.build_source"
]

triggers {
etcd_id = "${element(module.instances-etcd-ad2.ids, count.index)}"
build_source_id = "${null_resource.build_source.id}"
}

provisioner "local-exec" {
command = "echo 'alias ${var.label_prefix}etcdad2-${count.index}=\"ssh -i ${path.root}/generated/instances_id_rsa opc@${element(module.instances-etcd-ad2.instance_public_ips, count.index)}\"' >> source.sh"
}
}


resource null_resource "etcd-ad3" {
count = "${var.etcdAd3Count}"
depends_on = [
"module.instances-etcd-ad3",
]

triggers {
etcd_id = "${element(module.instances-etcd-ad3.ids, count.index)}"
build_source_id = "${null_resource.build_source.id}"
}

provisioner "local-exec" {
command = "echo 'alias ${var.label_prefix}etcad3-${count.index}=\"ssh -i ${path.root}/generated/instances_id_rsa opc@${element(module.instances-etcd-ad3.instance_public_ips, count.index)}\"' >> source.sh"
}
}





resource null_resource "k8smaster-ad1" {
count = "${var.k8sMasterAd1Count}"
depends_on = [
Expand Down
5 changes: 0 additions & 5 deletions datasources.tf
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,3 @@ data "oci_identity_availability_domains" "ADs" {
compartment_id = "${var.tenancy_ocid}"
}

resource "template_file" "etcd_discovery_url" {
provisioner "local-exec" {
command = "[ -d ${path.root}/generated ] || mkdir -p ${path.root}/generated && curl --retry 3 https://discovery.etcd.io/new?size=${var.etcdAd1Count + var.etcdAd2Count + var.etcdAd3Count} > ${path.root}/generated/discovery${self.id}"
}
}
9 changes: 9 additions & 0 deletions etcd-cluster/datasources.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
data "oci_identity_availability_domains" "ADs" {
compartment_id = "${var.tenancy_ocid}"
}

resource "template_file" "etcd_discovery_url" {
provisioner "local-exec" {
command = "[ -d ${path.root}/generated ] || mkdir -p ${path.root}/generated && curl --retry 3 https://discovery.etcd.io/new?size=${var.etcdAd1Count + var.etcdAd2Count + var.etcdAd3Count} > ${path.root}/generated/discovery${self.id}"
}
}
2 changes: 1 addition & 1 deletion instances/etcd/main.tf → etcd-cluster/instance/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ resource "oci_core_instance" "TFInstanceEtcd" {
display_name = "${var.label_prefix}${var.display_name_prefix}-${count.index}"
hostname_label = "${var.hostname_label_prefix}-${count.index}"
assign_public_ip = "${(var.control_plane_subnet_access == "private") ? "false" : "true"}"
private_ip = "${var.assign_private_ip == "true" ? cidrhost(lookup(var.network_cidrs,var.subnet_name), count.index+2) : ""}"
private_ip = "${var.assign_private_ip == "true" ? cidrhost(var.subnet_cidr, count.index+2) : ""}"
},

extended_metadata {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
variable "network_cidrs" {
type = "map"
}
variable "availability_domain" {}
variable "compartment_ocid" {}
variable "display_name_prefix" {}
Expand All @@ -11,7 +8,7 @@ variable "shape" {
}

variable "subnet_id" {}
variable "subnet_name" {}
variable "subnet_cidr" {}
variable "ssh_public_key_openssh" {}
variable "domain_name" {}

Expand Down
148 changes: 148 additions & 0 deletions etcd-cluster/main.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@


module "etcd-lb" {
source = "./loadbalancer"
etcd_lb_enabled = "${var.etcd_lb_enabled}"
compartment_ocid = "${var.compartment_ocid}"
is_private = "${var.etcd_lb_access == "private" ? "true": "false"}"

# Handle case where var.etcd_lb_access=public, but var.control_plane_subnet_access=private
# etcd_subnet_0_id = "${var.subnet_ad1_id}"
# etcd_subnet_1_id = "${var.subnet_ad2_id}"
# FIXME add LB subnet??
# For public access???
# Crazy talk...
etcd_subnet_0_id = "${var.subnet_ad1_id}"
etcd_subnet_1_id = "" # ${var.subnet_ad2_id}"
etcd_ad1_private_ips = "${module.instances-etcd-ad1.private_ips}"
etcd_ad2_private_ips = "${module.instances-etcd-ad2.private_ips}"
etcd_ad3_private_ips = "${module.instances-etcd-ad3.private_ips}"
etcdAd1Count = "${var.etcdAd1Count}"
etcdAd2Count = "${var.etcdAd2Count}"
etcdAd3Count = "${var.etcdAd3Count}"
label_prefix = "${var.label_prefix}"
shape = "${var.etcdLBShape}"
}


module "instances-etcd-ad1" {
source = "./instance"
count = "${var.etcdAd1Count}"

availability_domain = "${lookup(data.oci_identity_availability_domains.ADs.availability_domains[0],"name")}"
# Provider
compartment_ocid = "${var.compartment_ocid}"
tenancy_ocid = "${var.compartment_ocid}"

# Instancey??
display_name_prefix = "etcd-ad1"
hostname_label_prefix = "etcd-ad1"
label_prefix = "${var.label_prefix}"
etcd_discovery_url = "${template_file.etcd_discovery_url.id}"
oracle_linux_image_name = "${var.etcd_ol_image_name}"
shape = "${var.etcdShape}"
ssh_public_key_openssh = "${var.ssh_public_key_openssh}"

# Network
subnet_id = "${var.subnet_ad1_id}"
subnet_cidr = "10.0.20.0/24"
domain_name = "${var.domain_name}"
assign_private_ip = "${var.etcd_maintain_private_ip == "true" ? "true": "false"}"
control_plane_subnet_access = "${var.control_plane_subnet_access}"

# Network Overlay
flannel_backend = "${var.flannel_config["backend"]}"
flannel_network_cidr = "${var.flannel_config["network_cidr"]}"
flannel_network_subnetlen = "${var.flannel_config["network_subnetlen"]}"

# Docker
etcd_docker_max_log_size = "${var.docker_config["max_log_size"]}"
etcd_docker_max_log_files = "${var.docker_config["max_log_files"]}"

# volume
etcd_iscsi_volume_create = "${var.iscsi_volume_config["create"]}"
etcd_iscsi_volume_size = "${var.iscsi_volume_config["size"]}"
}


module "instances-etcd-ad2" {
source = "./instance"
count = "${var.etcdAd2Count}"

availability_domain = "${lookup(data.oci_identity_availability_domains.ADs.availability_domains[1],"name")}"
# Provider
compartment_ocid = "${var.compartment_ocid}"
tenancy_ocid = "${var.compartment_ocid}"

# Instancey??
display_name_prefix = "etcd-ad2"
hostname_label_prefix = "etcd-ad2"
label_prefix = "${var.label_prefix}"
etcd_discovery_url = "${template_file.etcd_discovery_url.id}"
oracle_linux_image_name = "${var.etcd_ol_image_name}"
shape = "${var.etcdShape}"
ssh_public_key_openssh = "${var.ssh_public_key_openssh}"

# Network
subnet_id = "${var.subnet_ad2_id}"
#FIXME
subnet_cidr = "10.0.21.0/24"
domain_name = "${var.domain_name}"
assign_private_ip = "${var.etcd_maintain_private_ip == "true" ? "true": "false"}"
control_plane_subnet_access = "${var.control_plane_subnet_access}"

# Network Overlay
flannel_backend = "${var.flannel_config["backend"]}"
flannel_network_cidr = "${var.flannel_config["network_cidr"]}"
flannel_network_subnetlen = "${var.flannel_config["network_subnetlen"]}"

# Docker
etcd_docker_max_log_size = "${var.docker_config["max_log_size"]}"
etcd_docker_max_log_files = "${var.docker_config["max_log_files"]}"

# volume
etcd_iscsi_volume_create = "${var.iscsi_volume_config["create"]}"
etcd_iscsi_volume_size = "${var.iscsi_volume_config["size"]}"
}


module "instances-etcd-ad3" {
source = "./instance"
count = "${var.etcdAd3Count}"

availability_domain = "${lookup(data.oci_identity_availability_domains.ADs.availability_domains[2],"name")}"
# Provider
compartment_ocid = "${var.compartment_ocid}"
tenancy_ocid = "${var.compartment_ocid}"

# Instancey??
display_name_prefix = "etcd-ad3"
hostname_label_prefix = "etcd-ad3"
label_prefix = "${var.label_prefix}"
etcd_discovery_url = "${template_file.etcd_discovery_url.id}"
oracle_linux_image_name = "${var.etcd_ol_image_name}"
shape = "${var.etcdShape}"
ssh_public_key_openssh = "${var.ssh_public_key_openssh}"

# Network
subnet_id = "${var.subnet_ad3_id}"
#FIXME
subnet_cidr = "10.0.22.0/24"
domain_name = "${var.domain_name}"
assign_private_ip = "${var.etcd_maintain_private_ip == "true" ? "true": "false"}"
control_plane_subnet_access = "${var.control_plane_subnet_access}"

# Network Overlay
flannel_backend = "${var.flannel_config["backend"]}"
flannel_network_cidr = "${var.flannel_config["network_cidr"]}"
flannel_network_subnetlen = "${var.flannel_config["network_subnetlen"]}"

# Docker
etcd_docker_max_log_size = "${var.docker_config["max_log_size"]}"
etcd_docker_max_log_files = "${var.docker_config["max_log_files"]}"

# volume
etcd_iscsi_volume_create = "${var.iscsi_volume_config["create"]}"
etcd_iscsi_volume_size = "${var.iscsi_volume_config["size"]}"
}

23 changes: 23 additions & 0 deletions etcd-cluster/output.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
output "etcd_lb_ip" {
value = ["${module.etcd-lb.ip_addresses}"]
}

output "etcd_public_ips" {
value = "${compact(concat(module.instances-etcd-ad1.instance_public_ips,module.instances-etcd-ad2.instance_public_ips,module.instances-etcd-ad3.instance_public_ips))}"
}

output "etcd_private_ips" {
value = "${concat(module.instances-etcd-ad1.private_ips,module.instances-etcd-ad2.private_ips,module.instances-etcd-ad3.private_ips)}"
}


output "endpoints" {
value = "${var.etcd_lb_enabled == "true" ?
join(",",formatlist("http://%s:2379", module.etcd-lb.ip_addresses)) :
join(",",formatlist("http://%s:2379", compact(concat(
module.instances-etcd-ad1.private_ips,
module.instances-etcd-ad2.private_ips,
module.instances-etcd-ad3.private_ips)))) }"
}


91 changes: 91 additions & 0 deletions etcd-cluster/variables.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
variable "compartment_ocid" {}
variable "tenancy_ocid" {}


variable "vcn" {}

variable "subnet_ad1_id" {}
variable "subnet_ad2_id" {}
variable "subnet_ad3_id" {}

variable "control_plane_subnet_access" {
description = "Whether instances in the control plane are launched in a public or private subnets"
default = "public"
}

variable "domain_name" {}

variable "etcd_ol_image_name" {
default = "Oracle-Linux-7.4-2018.01.20-0"
}

variable "label_prefix" {
description = "To create unique identifier for multiple clusters in a compartment."
type = "string"
default = ""
}

# Load Balancers
variable "etcd_lb_enabled" {
description = "enable/disable the etcd load balancer. true: use the etcd load balancer ip. false:use a list of etcd instance ips."
default = "true"
}

variable "etcd_lb_access" {
description = "Whether etcd load balancer is launched in a public or private subnet"
default = "private"
}

variable "etcdLBShape" {
default = "100Mbps"
}

variable "ssh_public_key_openssh" {

}

variable "etcdShape" {
default = "VM.Standard1.1"
}

variable "docker_config" {
type = "map"
default = {
max_log_size = "50m"
max_log_files = "5"
}
}

variable "flannel_config" {
type = "map"
default = {
backend = "VXLAN"
network_cidr = "10.99.0.0/16"
network_subnetlen = 24
}
}

variable "iscsi_volume_config" {
type = "map"
default = {
create = false
size = 50
}
}

variable "etcdAd1Count" {
default = 1
}

variable "etcdAd2Count" {
default = 0
}

variable "etcdAd3Count" {
default = 0
}

variable "etcd_maintain_private_ip" {
default = "false"
}

Loading