diff --git a/proxmox/terraform/modules/node/versions.tf b/proxmox/terraform/modules/node/versions.tf deleted file mode 100644 index 2e5aed9..0000000 --- a/proxmox/terraform/modules/node/versions.tf +++ /dev/null @@ -1,12 +0,0 @@ - -terraform { - required_version = ">= 0.13" - - required_providers { - proxmox = { - source = "local/telmate/proxmox" - version = "0.0.1" - } - } - -} diff --git a/proxmox/terraform/modules/node/versions.tf b/proxmox/terraform/modules/node/versions.tf new file mode 120000 index 0000000..b7707ec --- /dev/null +++ b/proxmox/terraform/modules/node/versions.tf @@ -0,0 +1 @@ +../../versions.tf \ No newline at end of file diff --git a/proxmox/terraform/staging/staging.tf b/proxmox/terraform/staging/staging.tf index 88ebbb9..ccc1816 100644 --- a/proxmox/terraform/staging/staging.tf +++ b/proxmox/terraform/staging/staging.tf @@ -1,362 +1,354 @@ # Keyword use: # - provider: Define the provider(s) # - data: Retrieve data information to be used within the file # - resource: Define resource and create/update -terraform { - required_providers { - proxmox = { - source = "local/telmate/proxmox" - version = "0.0.1" - } - } -} provider "proxmox" { pm_tls_insecure = true pm_api_url = "https://beaubourg.internal.softwareheritage.org:8006/api2/json" # in a shell (see README): source ../setup.sh } # Default configuration passed along module calls # (There is no other way to avoid duplication) locals { config = { dns = var.dns domain = var.domain puppet_environment = var.puppet_environment puppet_master = var.puppet_master gateway_ip = var.gateway_ip user_admin = var.user_admin user_admin_ssh_public_key = var.user_admin_ssh_public_key } } # Define the staging network gateway # FIXME: Find a way to reuse the module "node" # Main difference between node in module and this: # - gateway define 2 network interfaces # - provisioning step is more complex resource "proxmox_vm_qemu" "gateway" { name = "gateway" desc = "staging gateway node" # hypervisor onto which make the vm target_node = "beaubourg" vmid = 109 balloon = 0 full_clone = false # See init-template.md to see the template vm bootstrap clone = "template-debian-10" # linux kernel 2.6 qemu_os = "l26" # generic setup sockets = 1 cores = 1 memory = 1024 boot = "c" # boot machine when hypervirsor starts onboot = true #### cloud-init setup # to actually set some information per os_type (values: ubuntu, centos, # cloud-init). Keep this as cloud-init os_type = "cloud-init" # ciuser - User name to change ssh keys and password for instead of the # image’s configured default user. ciuser = var.user_admin ssh_user = var.user_admin # searchdomain - Sets DNS search domains for a container. searchdomain = var.domain # nameserver - Sets DNS server IP address for a container. nameserver = var.dns # sshkeys - public ssh keys, one per line sshkeys = var.user_admin_ssh_public_key # FIXME: When T1872 lands, this will need to be updated # ipconfig0 - [gw =] [,ip=] # ip to communicate for now with the prod network through louvre ipconfig0 = "ip=192.168.100.125/24,gw=192.168.100.1" # vms from the staging network will use this vm as gateway ipconfig1 = "ip=${var.gateway_ip}/24" disk { id = 0 type = "virtio" storage = "proxmox" storage_type = "ssd" size = "20G" } network { id = 0 model = "virtio" bridge = "vmbr0" macaddr = "6E:ED:EF:EB:3C:AA" } network { id = 1 model = "virtio" bridge = "vmbr443" macaddr = "FE:95:CC:A5:EB:43" } # Delegate to puppet at the end of the provisioning the software setup # Delegate to puppet at the end of the provisioning the software setup provisioner "remote-exec" { inline = [ "sysctl -w net.ipv4.ip_forward=1", "sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g' /etc/sysctl.conf", "iptables -t nat -A POSTROUTING -s 192.168.128.0/24 -o eth0 -j MASQUERADE", "sed -i 's/127.0.1.1/${var.gateway_ip}/g' /etc/hosts", "puppet agent --server ${var.puppet_master} --environment=${var.puppet_environment} --waitforcert 60 --test || echo 'Node provisionned!'", ] } lifecycle { ignore_changes = [ bootdisk, scsihw, target_node ] } } module "storage0" { source = "../modules/node" config = local.config hypervisor = "orsay" vmid = 114 hostname = "storage0" description = "swh storage services" cores = "4" memory = "8192" balloon = 1024 network = { ip = "192.168.128.2" macaddr = "CA:73:7F:ED:F9:01" bridge = "vmbr443" } storages = [{ id = 0 storage = "orsay-ssd-2018" size = "32G" }, { id = 1 storage = "orsay-ssd-2018" size = "512G" }] } module "db0" { source = "../modules/node" config = local.config hypervisor = "orsay" vmid = 115 hostname = "db0" description = "Node to host storage/indexer/scheduler dbs" cores = "4" memory = "16384" balloon = 1024 network = { ip = "192.168.128.3" macaddr = "3A:65:31:7C:24:17" bridge = "vmbr443" } storages = [{ id = 0 storage = "orsay-ssd-2018" size = "400G" }] } output "db0_summary" { value = module.db0.summary } module "scheduler0" { source = "../modules/node" config = local.config vmid = 116 hostname = "scheduler0" description = "Scheduler api services" hypervisor = "beaubourg" cores = "4" memory = "8192" balloon = 1024 network = { ip = "192.168.128.4" macaddr = "92:02:7E:D0:B9:36" bridge = "vmbr443" } } output "scheduler0_summary" { value = module.scheduler0.summary } module "worker0" { source = "../modules/node" config = local.config vmid = 117 hostname = "worker0" description = "Loader/lister service node" hypervisor = "beaubourg" cores = "4" memory = "12288" balloon = 1024 network = { ip = "192.168.128.5" macaddr = "72:D9:03:46:B1:47" bridge = "vmbr443" } } output "worker0_summary" { value = module.worker0.summary } module "worker1" { source = "../modules/node" config = local.config vmid = 118 hostname = "worker1" description = "Loader/lister service node" hypervisor = "beaubourg" cores = "4" memory = "12288" balloon = 1024 network = { ip = "192.168.128.6" macaddr = "D6:A9:6F:02:E3:66" bridge = "vmbr443" } } output "worker1_summary" { value = module.worker1.summary } module "webapp" { source = "../modules/node" config = local.config vmid = 119 hostname = "webapp" description = "Archive/Webapp service node" hypervisor = "branly" cores = "4" memory = "16384" balloon = 1024 network = { ip = "192.168.128.8" macaddr = "1A:00:39:95:D4:5F" bridge = "vmbr443" } } output "webapp_summary" { value = module.webapp.summary } module "deposit" { source = "../modules/node" config = local.config vmid = 120 hostname = "deposit" description = "Deposit service node" hypervisor = "beaubourg" cores = "4" memory = "8192" balloon = 1024 network = { ip = "192.168.128.7" macaddr = "9E:81:DD:58:15:3B" bridge = "vmbr443" } } output "deposit_summary" { value = module.deposit.summary } module "vault" { source = "../modules/node" config = local.config vmid = 121 hostname = "vault" description = "Vault services node" hypervisor = "beaubourg" cores = "4" memory = "8192" balloon = 1024 network = { ip = "192.168.128.9" macaddr = "16:15:1C:79:CB:DB" bridge = "vmbr443" } } output "vault_summary" { value = module.vault.summary } module "journal0" { source = "../modules/node" config = local.config vmid = 122 hostname = "journal0" description = "Journal services node" hypervisor = "beaubourg" cores = "4" memory = "12288" balloon = 1024 network = { ip = "192.168.128.10" macaddr = "1E:98:C2:66:BF:33" bridge = "vmbr443" } } output "journal0_summary" { value = module.journal0.summary } module "worker2" { source = "../modules/node" config = local.config vmid = 112 hostname = "worker2" description = "Loader/lister service node" hypervisor = "branly" cores = "4" memory = "12288" balloon = 1024 network = { ip = "192.168.128.11" macaddr = "AA:57:27:51:75:18" bridge = "vmbr443" } } output "worker2_summary" { value = module.worker2.summary } diff --git a/proxmox/terraform/staging/versions.tf b/proxmox/terraform/staging/versions.tf new file mode 120000 index 0000000..8bd0ff1 --- /dev/null +++ b/proxmox/terraform/staging/versions.tf @@ -0,0 +1 @@ +../versions.tf \ No newline at end of file diff --git a/proxmox/terraform/versions.tf b/proxmox/terraform/versions.tf index ac97c6a..39d1c60 100644 --- a/proxmox/terraform/versions.tf +++ b/proxmox/terraform/versions.tf @@ -1,4 +1,9 @@ - terraform { - required_version = ">= 0.12" + required_version = ">= 0.13" + required_providers { + proxmox = { + source = "local/telmate/proxmox" + version = "0.0.1" + } + } }