1
0
mirror of https://github.com/jcwimer/multi-cloud-kubernetes synced 2026-03-24 17:34:43 +00:00

Terraform working with ansible

This commit is contained in:
2020-07-01 22:02:54 -04:00
commit 4defd3a0b9
16 changed files with 560 additions and 0 deletions

View File

@@ -0,0 +1,36 @@
data "digitalocean_ssh_key" "multicloud" {
provider = digitalocean.digitalocean
name = "multicloud"
}
resource "digitalocean_tag" "master" {
name = "multicloud-k8s-master"
}
resource "digitalocean_tag" "worker" {
name = "multicloud-k8s-worker"
}
resource "digitalocean_droplet" "master" {
provider = digitalocean.digitalocean
image = "ubuntu-20-04-x64"
name = "multicloud-digitalocean-master"
region = "nyc1"
size = "s-1vcpu-2gb"
count = 1
user_data = data.template_file.user-data.rendered
tags = [digitalocean_tag.master.id]
ssh_keys = [data.digitalocean_ssh_key.multicloud.id]
}
resource "digitalocean_droplet" "worker" {
provider = digitalocean.digitalocean
image = "ubuntu-20-04-x64"
name = "multicloud-digitalocean-worker"
region = "nyc1"
size = "s-1vcpu-2gb"
count = 1
user_data = data.template_file.user-data.rendered
tags = [digitalocean_tag.worker.id]
ssh_keys = [data.digitalocean_ssh_key.multicloud.id]
}

83
terraform-code/home.tf Normal file
View File

@@ -0,0 +1,83 @@
resource "openstack_compute_secgroup_v2" "multicloud_home" {
provider = openstack.home
name = "multicloud"
description = "multicloud security group"
rule {
from_port = 22
to_port = 22
ip_protocol = "tcp"
cidr = "0.0.0.0/0"
}
rule {
from_port = 80
to_port = 80
ip_protocol = "tcp"
cidr = "0.0.0.0/0"
}
rule {
from_port = 443
to_port = 443
ip_protocol = "tcp"
cidr = "0.0.0.0/0"
}
}
data "openstack_images_image_v2" "ubuntu" {
provider = openstack.home
name = "xenial-image"
most_recent = true
}
resource "openstack_compute_instance_v2" "home-master" {
provider = openstack.home
name = "multicloud-home-master"
flavor_name = "g1.medium"
key_pair = "multicloud"
security_groups = [openstack_compute_secgroup_v2.multicloud_home.name]
image_name = "xenial-image"
user_data = data.template_file.user-data.rendered
network {
name = "GATEWAY_NET"
}
metadata = {
cloud = "home"
role = "multicloud-k8s-master"
}
block_device {
uuid = data.openstack_images_image_v2.ubuntu.id
source_type = "image"
volume_size = 20
boot_index = 0
destination_type = "volume"
delete_on_termination = false
}
count = 1
}
resource "openstack_compute_instance_v2" "home-worker" {
provider = openstack.home
name = "multicloud-home-worker"
flavor_name = "g1.medium"
key_pair = "multicloud"
security_groups = [openstack_compute_secgroup_v2.multicloud_home.name]
user_data = data.template_file.user-data.rendered
network {
name = "GATEWAY_NET"
}
metadata = {
cloud = "home"
role = "multicloud-k8s-worker"
}
block_device {
uuid = data.openstack_images_image_v2.ubuntu.id
source_type = "image"
volume_size = 20
boot_index = 0
destination_type = "volume"
delete_on_termination = false
}
count = 1
}

9
terraform-code/hosts.cfg Normal file
View File

@@ -0,0 +1,9 @@
[workers]
${ramnode_workers}
${home_workers}
${do_workers}
[masters]
${ramnode_masters}
${home_masters}
${do_masters}

View File

@@ -0,0 +1,28 @@
variable "do_token" {}
variable "ramnode_password" {}
variable "ramnode_username" {}
variable "home_password" {}
variable "home_username" {}
provider "digitalocean" {
token = var.do_token
alias = "digitalocean"
}
provider "openstack" {
alias = "ramnode"
user_name = var.ramnode_username
tenant_id = "e55c0b4382f14a4fb0cd10d76f58881f"
password = var.ramnode_password
auth_url = "https://nyc-controller.ramnode.com:5000/v3"
region = "NYC"
}
provider "openstack" {
alias = "home"
user_name = var.home_username
tenant_id = "a5c2f0b1bb954c96ad054ae2c586d9c1"
password = var.home_password
auth_url = "http://10.0.0.108:35357/v3"
region = "RegionOne"
}

62
terraform-code/ramnode.tf Normal file
View File

@@ -0,0 +1,62 @@
resource "openstack_compute_secgroup_v2" "multicloud_ramnode" {
provider = openstack.ramnode
name = "multicloud"
description = "multicloud security group"
rule {
from_port = 22
to_port = 22
ip_protocol = "tcp"
cidr = "0.0.0.0/0"
}
rule {
from_port = 80
to_port = 80
ip_protocol = "tcp"
cidr = "0.0.0.0/0"
}
rule {
from_port = 443
to_port = 443
ip_protocol = "tcp"
cidr = "0.0.0.0/0"
}
}
resource "openstack_compute_instance_v2" "ramnode-master" {
provider = openstack.ramnode
name = "multicloud-ramnode-master"
flavor_name = "2GB SKVM"
key_pair = "multicloud"
security_groups = [openstack_compute_secgroup_v2.multicloud_ramnode.name]
image_name = "Ubuntu 20.04 Server Cloud"
user_data = data.template_file.user-data.rendered
network {
name = "Public"
}
metadata = {
cloud = "ramnode"
role = "multicloud-k8s-master"
}
count = 1
}
resource "openstack_compute_instance_v2" "ramnode-worker" {
provider = openstack.ramnode
name = "multicloud-ramnode-worker"
flavor_name = "2GB SKVM"
key_pair = "multicloud"
security_groups = [openstack_compute_secgroup_v2.multicloud_ramnode.name]
image_name = "Ubuntu 20.04 Server Cloud"
user_data = data.template_file.user-data.rendered
network {
name = "Public"
}
metadata = {
cloud = "ramnode"
role = "multicloud-k8s-worker"
}
count = 1
}

View File

@@ -0,0 +1,13 @@
resource "local_file" "hosts_cfg" {
content = templatefile("./hosts.cfg",
{
ramnode_workers = "${join("\n", openstack_compute_instance_v2.ramnode-worker.*.network.0.fixed_ip_v4)}"
ramnode_masters = "${join("\n", openstack_compute_instance_v2.ramnode-master.*.network.0.fixed_ip_v4)}"
home_workers = "${join("\n", openstack_compute_instance_v2.home-worker.*.network.0.fixed_ip_v4)}"
home_masters = "${join("\n", openstack_compute_instance_v2.home-master.*.network.0.fixed_ip_v4)}"
do_workers = "${join("\n", digitalocean_droplet.worker.*.ipv4_address)}"
do_masters = "${join("\n", digitalocean_droplet.master.*.ipv4_address)}"
}
)
filename = "inventory"
}

View File

@@ -0,0 +1,6 @@
#!/bin/bash
if ! which docker > /dev/null; then
curl -s -L https://raw.githubusercontent.com/rancher/install-docker/master/19.03.9.sh | bash
fi
curl -s https://install.zerotier.com | sudo bash
zerotier-cli join ${zerotier_network}

View File

@@ -0,0 +1,8 @@
variable "zerotier_network" {}
data "template_file" "user-data" {
template = file("./user-data.sh")
vars = {
zerotier_network = var.zerotier_network
}
}