Compare commits
	
		
			2 Commits
		
	
	
		
			chore/terr
			...
			fix/terraf
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | bd63279e59 | ||
|   | 5f05561f3d | 
| @@ -1 +0,0 @@ | ||||
| https://tinkerbell.org/docs/setup/packet-with-terraform/ | ||||
| @@ -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" | ||||
| } | ||||
| @@ -13,9 +13,10 @@ declare -a YUM_LIST=("https://download.docker.com/linux/centos/7/x86_64/stable/P | ||||
| 	"docker-ce" | ||||
| 	"docker-ce-cli" | ||||
| 	"epel-release" | ||||
| 	"pass" | ||||
| 	"python3") | ||||
| declare -a APT_LIST=("docker" | ||||
| 	"docker-compose") | ||||
| 	"docker-compose" "pass") | ||||
|  | ||||
| add_yum_repo() ( | ||||
| 	$YUM_CONFIG_MGR --add-repo https://download.docker.com/linux/centos/docker-ce.repo | ||||
| @@ -34,7 +35,6 @@ update_apt() ( | ||||
| restart_docker_service() ( | ||||
| 	service docker restart | ||||
| ) | ||||
|  | ||||
| install_yum_packages() ( | ||||
| 	$YUM_INSTALL "${YUM_LIST[@]}" -y | ||||
| ) | ||||
|   | ||||
| @@ -1,33 +1,83 @@ | ||||
| # 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 | ||||
|   version    = "~> 2.9" | ||||
| } | ||||
|  | ||||
| # Create a new VLAN in datacenter "ewr1" | ||||
| resource "packet_vlan" "provisioning-vlan" { | ||||
|   description = "provisioning-vlan" | ||||
| 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" { | ||||
| 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 | ||||
|   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 | ||||
| resource "packet_device" "tink-worker" { | ||||
|   hostname         = "tink-worker" | ||||
| 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" | ||||
| @@ -35,31 +85,57 @@ resource "packet_device" "tink-worker" { | ||||
|   always_pxe       = "true" | ||||
|   billing_cycle    = "hourly" | ||||
|   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 | ||||
| resource "packet_port_vlan_attachment" "provisioner" { | ||||
|   device_id = packet_device.tink-provisioner.id | ||||
|   port_name = "eth1" | ||||
|   vlan_vnid = packet_vlan.provisioning-vlan.vxlan | ||||
|   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" { | ||||
|   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" | ||||
|   vlan_vnid = packet_vlan.provisioning-vlan.vxlan | ||||
|   vlan_vnid = packet_vlan.provisioning_vlan.vxlan | ||||
| } | ||||
|  | ||||
| output "provisioner_dns_name" { | ||||
|   value = "${split("-", packet_device.tink-provisioner.id)[0]}.packethost.net" | ||||
| 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 | ||||
|   } | ||||
| } | ||||
|  | ||||
| output "provisioner_ip" { | ||||
|   value = "${packet_device.tink-provisioner.network[0].address}" | ||||
| } | ||||
| resource "null_resource" "hardware_data" { | ||||
|   count      = var.worker_count | ||||
|   depends_on = [null_resource.tink_directory] | ||||
|  | ||||
| output "worker_mac_addr" { | ||||
|   value = "${packet_device.tink-worker.ports[1].mac}" | ||||
|   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" | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -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 | ||||
| @@ -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" | ||||
|   } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user