diff --git a/.zuul.yaml b/.zuul.yaml index e0a2ee8..4a404eb 100644 --- a/.zuul.yaml +++ b/.zuul.yaml @@ -10,6 +10,12 @@ vars: name: testbed-default +- job: + name: terraform-base-validate-testbed-equinix-metal + parent: terraform-base-validate + vars: + name: testbed-equinix-metal + - job: name: terraform-base-validate-testbed-managerless parent: terraform-base-validate @@ -21,10 +27,12 @@ check: jobs: - terraform-base-validate-testbed-default + - terraform-base-validate-testbed-equinix-metal - terraform-base-validate-testbed-managerless - yamllint periodic-daily: jobs: - terraform-base-validate-testbed-default + - terraform-base-validate-testbed-equinix-metal - terraform-base-validate-testbed-managerless - yamllint diff --git a/testbed-equinx-metal/customisations/.gitkeep b/testbed-equinx-metal/customisations/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/testbed-equinx-metal/data.tf b/testbed-equinx-metal/data.tf new file mode 100644 index 0000000..e69de29 diff --git a/testbed-equinx-metal/environments/default.tfvars b/testbed-equinx-metal/environments/default.tfvars new file mode 100644 index 0000000..e69de29 diff --git a/testbed-equinx-metal/main.tf b/testbed-equinx-metal/main.tf new file mode 100644 index 0000000..53eaf7b --- /dev/null +++ b/testbed-equinx-metal/main.tf @@ -0,0 +1,19 @@ +terraform { + required_version = ">= 1.6.0" + + required_providers { + local = { + source = "hashicorp/local" + version = ">= 2.2" + } + + null = { + source = "hashicorp/null" + } + + equinix = { + source = "equinix/equinix" + version = ">= 2.6.0" + } + } +} diff --git a/testbed-equinx-metal/manager.tf b/testbed-equinx-metal/manager.tf new file mode 100644 index 0000000..87a6507 --- /dev/null +++ b/testbed-equinx-metal/manager.tf @@ -0,0 +1,9 @@ +resource "tls_private_key" "key" { + algorithm = "RSA" + rsa_bits = 4096 +} + +resource "equinix_metal_ssh_key" "key" { + name = "${var.prefix}-key" + public_key = tls_private_key.key.public_key_openssh +} diff --git a/testbed-equinx-metal/network.tf b/testbed-equinx-metal/network.tf new file mode 100644 index 0000000..b277b9a --- /dev/null +++ b/testbed-equinx-metal/network.tf @@ -0,0 +1,5 @@ +resource "equinix_metal_vlan" "net_management" { + metro = var.metro + project_id = var.project_id + vxlan = 42 +} diff --git a/testbed-equinx-metal/nodes.tf b/testbed-equinx-metal/nodes.tf new file mode 100644 index 0000000..e2d3f6a --- /dev/null +++ b/testbed-equinx-metal/nodes.tf @@ -0,0 +1,20 @@ +resource "equinix_metal_device" "node0" { + hostname = "testbed-node-0" + plan = var.plan + metro = var.metro + operating_system = var.operating_system + billing_cycle = "hourly" + project_id = var.project_id + depends_on = ["equinix_metal_ssh_key.key"] +} + +resource "equinix_metal_device_network_type" "node0" { + device_id = equinix_metal_device.node0.id + type = "hybrid" +} + +resource "equinix_metal_port_vlan_attachment" "node0" { + device_id = equinix_metal_device_network_type.node0.id + port_name = "eth1" + vlan_vnid = equinix_metal_vlan.net_management.vxlan +} diff --git a/testbed-equinx-metal/outputs.tf b/testbed-equinx-metal/outputs.tf new file mode 100644 index 0000000..63afb6e --- /dev/null +++ b/testbed-equinx-metal/outputs.tf @@ -0,0 +1,20 @@ +output "public_key" { + value = tls_private_key.key.public_key_openssh +} + +output "private_key" { + value = tls_private_key.key.private_key_openssh + sensitive = true +} + +resource "local_sensitive_file" "id_rsa" { + filename = ".id_rsa.equinix_metal" + file_permission = "0600" + content = tls_private_key.key.private_key_openssh +} + +resource "local_file" "id_rsa_pub" { + filename = ".id_rsa.equinix_metal.pub" + file_permission = "0644" + content = "${tls_private_key.key.public_key_openssh}\n" +} diff --git a/testbed-equinx-metal/overrides/.gitkeep b/testbed-equinx-metal/overrides/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/testbed-equinx-metal/provider.tf b/testbed-equinx-metal/provider.tf new file mode 100644 index 0000000..e24c628 --- /dev/null +++ b/testbed-equinx-metal/provider.tf @@ -0,0 +1,3 @@ +provider "equinix" { + auth_token = var.auth_token +} diff --git a/testbed-equinx-metal/terragrunt.hcl b/testbed-equinx-metal/terragrunt.hcl new file mode 100644 index 0000000..2f1d891 --- /dev/null +++ b/testbed-equinx-metal/terragrunt.hcl @@ -0,0 +1,2 @@ +retryable_errors = [ +] diff --git a/testbed-equinx-metal/variables.tf b/testbed-equinx-metal/variables.tf new file mode 100644 index 0000000..3be05e8 --- /dev/null +++ b/testbed-equinx-metal/variables.tf @@ -0,0 +1,27 @@ +variable "auth_token" { + type = string +} + +variable "project_id" { + type = string +} + +variable "prefix" { + type = string + default = "testbed" +} + +variable "operating_system" { + type = string + default = "ubuntu_24_04" +} + +variable "plan" { + type = string + default = "c3.small.x86" +} + +variable "metro" { + type = string + default = "FR" +}