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:
36
terraform-code/digitalocean.tf
Normal file
36
terraform-code/digitalocean.tf
Normal 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
83
terraform-code/home.tf
Normal 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
9
terraform-code/hosts.cfg
Normal file
@@ -0,0 +1,9 @@
|
||||
[workers]
|
||||
${ramnode_workers}
|
||||
${home_workers}
|
||||
${do_workers}
|
||||
|
||||
[masters]
|
||||
${ramnode_masters}
|
||||
${home_masters}
|
||||
${do_masters}
|
||||
28
terraform-code/provider.tf
Normal file
28
terraform-code/provider.tf
Normal 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
62
terraform-code/ramnode.tf
Normal 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
|
||||
}
|
||||
13
terraform-code/terraform-inventory.tf
Normal file
13
terraform-code/terraform-inventory.tf
Normal 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"
|
||||
}
|
||||
6
terraform-code/user-data.sh
Normal file
6
terraform-code/user-data.sh
Normal 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}
|
||||
8
terraform-code/userdata.tf
Normal file
8
terraform-code/userdata.tf
Normal file
@@ -0,0 +1,8 @@
|
||||
variable "zerotier_network" {}
|
||||
|
||||
data "template_file" "user-data" {
|
||||
template = file("./user-data.sh")
|
||||
vars = {
|
||||
zerotier_network = var.zerotier_network
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user