Merge pull request #14 from tinkerbell/fix/terraform-version

this is the right version of the terraform code
This commit is contained in:
Gianluca Arbezzano 2020-09-10 16:53:03 +02:00 committed by GitHub
commit 4ba30f0ff7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 99 additions and 248 deletions

View File

@ -1 +0,0 @@
https://tinkerbell.org/docs/setup/packet-with-terraform/

View File

@ -1,17 +0,0 @@
variable "packet_api_token" {
description = "Packet user api token"
}
variable "project_id" {
description = "Project ID"
}
variable "facility" {
description = "Packet facility to provision in"
default = "sjc1"
}
variable "device_type" {
description = "Type of device to provision"
default = "c3.small.x86"
}

View File

@ -13,9 +13,10 @@ declare -a YUM_LIST=("https://download.docker.com/linux/centos/7/x86_64/stable/P
"docker-ce" "docker-ce"
"docker-ce-cli" "docker-ce-cli"
"epel-release" "epel-release"
"pass"
"python3") "python3")
declare -a APT_LIST=("docker" declare -a APT_LIST=("docker"
"docker-compose") "docker-compose" "pass")
add_yum_repo() ( add_yum_repo() (
$YUM_CONFIG_MGR --add-repo https://download.docker.com/linux/centos/docker-ce.repo $YUM_CONFIG_MGR --add-repo https://download.docker.com/linux/centos/docker-ce.repo
@ -34,7 +35,6 @@ update_apt() (
restart_docker_service() ( restart_docker_service() (
service docker restart service docker restart
) )
install_yum_packages() ( install_yum_packages() (
$YUM_INSTALL "${YUM_LIST[@]}" -y $YUM_INSTALL "${YUM_LIST[@]}" -y
) )

View File

@ -1,33 +1,83 @@
# Configure the Packet Provider. # Configure the Packet Provider.
terraform {
required_providers {
packet = {
source = "packethost/packet"
version = "~> 3.0.1"
}
null = {
source = "hashicorp/null"
}
}
}
provider "packet" { provider "packet" {
auth_token = var.packet_api_token auth_token = var.packet_api_token
version = "~> 2.9"
} }
# Create a new VLAN in datacenter "ewr1" # Create a new VLAN in datacenter "ewr1"
resource "packet_vlan" "provisioning-vlan" { resource "packet_vlan" "provisioning_vlan" {
description = "provisioning-vlan" description = "provisioning_vlan"
facility = var.facility facility = var.facility
project_id = var.project_id project_id = var.project_id
} }
# Create a device and add it to tf_project_1 # Create a device and add it to tf_project_1
resource "packet_device" "tink-provisioner" { resource "packet_device" "tink_provisioner" {
hostname = "tink-provisioner" hostname = "tink-provisioner"
plan = var.device_type plan = var.device_type
facilities = [var.facility] facilities = [var.facility]
operating_system = "ubuntu_18_04" operating_system = "ubuntu_18_04"
billing_cycle = "hourly" billing_cycle = "hourly"
project_id = var.project_id project_id = var.project_id
network_type = "hybrid" user_data = file("install_package.sh")
user_data = "${file("install_package.sh")}"
} }
resource "null_resource" "tink_directory" {
connection {
type = "ssh"
user = var.ssh_user
host = packet_device.tink_provisioner.network[0].address
}
provisioner "remote-exec" {
inline = [
"mkdir -p /root/tink/deploy"
]
}
provisioner "file" {
source = "../../setup.sh"
destination = "/root/tink/setup.sh"
}
provisioner "file" {
source = "../../generate-envrc.sh"
destination = "/root/tink/generate-envrc.sh"
}
provisioner "file" {
source = "../../deploy"
destination = "/root/tink"
}
provisioner "remote-exec" {
inline = [
"chmod +x /root/tink/*.sh /root/tink/deploy/tls/*.sh"
]
}
}
resource "packet_device_network_type" "tink_provisioner_network_type" {
device_id = packet_device.tink_provisioner.id
type = "hybrid"
} }
# Create a device and add it to tf_project_1 # Create a device and add it to tf_project_1
resource "packet_device" "tink-worker" { resource "packet_device" "tink_worker" {
hostname = "tink-worker" count = var.worker_count
hostname = "tink-worker-${count.index}"
plan = var.device_type plan = var.device_type
facilities = [var.facility] facilities = [var.facility]
operating_system = "custom_ipxe" operating_system = "custom_ipxe"
@ -35,31 +85,57 @@ resource "packet_device" "tink-worker" {
always_pxe = "true" always_pxe = "true"
billing_cycle = "hourly" billing_cycle = "hourly"
project_id = var.project_id project_id = var.project_id
network_type = "layer2-individual" }
resource "packet_device_network_type" "tink_worker_network_type" {
count = var.worker_count
device_id = packet_device.tink_worker[count.index].id
type = "layer2-individual"
} }
# Attach VLAN to provisioner # Attach VLAN to provisioner
resource "packet_port_vlan_attachment" "provisioner" { resource "packet_port_vlan_attachment" "provisioner" {
device_id = packet_device.tink-provisioner.id depends_on = [packet_device_network_type.tink_provisioner_network_type]
device_id = packet_device.tink_provisioner.id
port_name = "eth1" port_name = "eth1"
vlan_vnid = packet_vlan.provisioning-vlan.vxlan vlan_vnid = packet_vlan.provisioning_vlan.vxlan
} }
# Attach VLAN to worker # Attach VLAN to worker
resource "packet_port_vlan_attachment" "worker" { resource "packet_port_vlan_attachment" "worker" {
device_id = packet_device.tink-worker.id count = var.worker_count
depends_on = [packet_device_network_type.tink_worker_network_type]
device_id = packet_device.tink_worker[count.index].id
port_name = "eth0" port_name = "eth0"
vlan_vnid = packet_vlan.provisioning-vlan.vxlan vlan_vnid = packet_vlan.provisioning_vlan.vxlan
} }
output "provisioner_dns_name" { data "template_file" "worker_hardware_data" {
value = "${split("-", packet_device.tink-provisioner.id)[0]}.packethost.net" count = var.worker_count
template = file("${path.module}/hardware_data.tpl")
vars = {
id = packet_device.tink_worker[count.index].id
facility_code = packet_device.tink_worker[count.index].deployed_facility
plan_slug = packet_device.tink_worker[count.index].plan
address = "192.168.1.${count.index + 5}"
mac = packet_device.tink_worker[count.index].ports[1].mac
}
} }
output "provisioner_ip" { resource "null_resource" "hardware_data" {
value = "${packet_device.tink-provisioner.network[0].address}" count = var.worker_count
depends_on = [null_resource.tink_directory]
connection {
type = "ssh"
user = var.ssh_user
host = packet_device.tink_provisioner.network[0].address
} }
output "worker_mac_addr" { provisioner "file" {
value = "${packet_device.tink-worker.ports[1].mac}" content = data.template_file.worker_hardware_data[count.index].rendered
destination = "/root/tink/deploy/hardware-data-${count.index}.json"
}
} }

View File

@ -1,66 +0,0 @@
#!/usr/bin/env bash
YUM="yum"
APT="apt"
PIP3="pip3"
YUM_CONFIG_MGR="yum-config-manager"
WHICH_YUM=$(command -v $YUM)
WHICH_APT=$(command -v $APT)
YUM_INSTALL="$YUM install"
APT_INSTALL="$APT install"
PIP3_INSTALL="$PIP3 install"
declare -a YUM_LIST=("https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm"
"docker-ce"
"docker-ce-cli"
"epel-release"
"pass"
"python3")
declare -a APT_LIST=("docker"
"docker-compose" "pass")
add_yum_repo() (
$YUM_CONFIG_MGR --add-repo https://download.docker.com/linux/centos/docker-ce.repo
)
update_yum() (
$YUM_INSTALL -y yum-utils
add_yum_repo
)
update_apt() (
$APT update
DEBIAN_FRONTEND=noninteractive $APT --yes --force-yes -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade
)
restart_docker_service() (
service docker restart
)
install_yum_packages() (
$YUM_INSTALL "${YUM_LIST[@]}" -y
)
install_pip3_packages() (
$PIP3_INSTALL docker-compose
)
install_apt_packages() (
$APT_INSTALL "${APT_LIST[@]}" -y
)
main() (
if [[ -n $WHICH_YUM ]]; then
update_yum
install_yum_packages
install_pip3_packages
restart_docker_service
elif [[ -n $WHICH_APT ]]; then
update_apt
install_apt_packages
restart_docker_service
else
echo "Unknown platform. Error while installing the required packages"
exit 1
fi
)
main

View File

@ -1,141 +0,0 @@
# Configure the Packet Provider.
terraform {
required_providers {
packet = {
source = "packethost/packet"
version = "~> 3.0.1"
}
null = {
source = "hashicorp/null"
}
}
}
provider "packet" {
auth_token = var.packet_api_token
}
# Create a new VLAN in datacenter "ewr1"
resource "packet_vlan" "provisioning_vlan" {
description = "provisioning_vlan"
facility = var.facility
project_id = var.project_id
}
# Create a device and add it to tf_project_1
resource "packet_device" "tink_provisioner" {
hostname = "tink-provisioner"
plan = var.device_type
facilities = [var.facility]
operating_system = "ubuntu_18_04"
billing_cycle = "hourly"
project_id = var.project_id
user_data = file("install_package.sh")
}
resource "null_resource" "tink_directory" {
connection {
type = "ssh"
user = var.ssh_user
host = packet_device.tink_provisioner.network[0].address
}
provisioner "remote-exec" {
inline = [
"mkdir -p /root/tink/deploy"
]
}
provisioner "file" {
source = "../../setup.sh"
destination = "/root/tink/setup.sh"
}
provisioner "file" {
source = "../../generate-envrc.sh"
destination = "/root/tink/generate-envrc.sh"
}
provisioner "file" {
source = "../../deploy"
destination = "/root/tink"
}
provisioner "remote-exec" {
inline = [
"chmod +x /root/tink/*.sh /root/tink/deploy/tls/*.sh"
]
}
}
resource "packet_device_network_type" "tink_provisioner_network_type" {
device_id = packet_device.tink_provisioner.id
type = "hybrid"
}
# Create a device and add it to tf_project_1
resource "packet_device" "tink_worker" {
count = var.worker_count
hostname = "tink-worker-${count.index}"
plan = var.device_type
facilities = [var.facility]
operating_system = "custom_ipxe"
ipxe_script_url = "https://boot.netboot.xyz"
always_pxe = "true"
billing_cycle = "hourly"
project_id = var.project_id
}
resource "packet_device_network_type" "tink_worker_network_type" {
count = var.worker_count
device_id = packet_device.tink_worker[count.index].id
type = "layer2-individual"
}
# Attach VLAN to provisioner
resource "packet_port_vlan_attachment" "provisioner" {
depends_on = [packet_device_network_type.tink_provisioner_network_type]
device_id = packet_device.tink_provisioner.id
port_name = "eth1"
vlan_vnid = packet_vlan.provisioning_vlan.vxlan
}
# Attach VLAN to worker
resource "packet_port_vlan_attachment" "worker" {
count = var.worker_count
depends_on = [packet_device_network_type.tink_worker_network_type]
device_id = packet_device.tink_worker[count.index].id
port_name = "eth0"
vlan_vnid = packet_vlan.provisioning_vlan.vxlan
}
data "template_file" "worker_hardware_data" {
count = var.worker_count
template = file("${path.module}/hardware_data.tpl")
vars = {
id = packet_device.tink_worker[count.index].id
facility_code = packet_device.tink_worker[count.index].deployed_facility
plan_slug = packet_device.tink_worker[count.index].plan
address = "192.168.1.${count.index + 5}"
mac = packet_device.tink_worker[count.index].ports[1].mac
}
}
resource "null_resource" "hardware_data" {
count = var.worker_count
depends_on = [null_resource.tink_directory]
connection {
type = "ssh"
user = var.ssh_user
host = packet_device.tink_provisioner.network[0].address
}
provisioner "file" {
content = data.template_file.worker_hardware_data[count.index].rendered
destination = "/root/tink/deploy/hardware-data-${count.index}.json"
}
}