github.com/SUSE/skuba@v1.4.17/ci/infra/openstack/worker-instance.tf (about) 1 data "template_file" "worker_repositories" { 2 template = file("cloud-init/repository.tpl") 3 count = length(var.repositories) 4 5 vars = { 6 repository_url = element(values(var.repositories), count.index) 7 repository_name = element(keys(var.repositories), count.index) 8 } 9 } 10 11 data "template_file" "worker_register_scc" { 12 template = file("cloud-init/register-scc.tpl") 13 count = var.caasp_registry_code == "" ? 0 : 1 14 15 vars = { 16 caasp_registry_code = var.caasp_registry_code 17 } 18 } 19 20 data "template_file" "worker_register_rmt" { 21 template = file("cloud-init/register-rmt.tpl") 22 count = var.rmt_server_name == "" ? 0 : 1 23 24 vars = { 25 rmt_server_name = var.rmt_server_name 26 } 27 } 28 29 data "template_file" "worker_commands" { 30 template = file("cloud-init/commands.tpl") 31 count = join("", var.packages) == "" ? 0 : 1 32 33 vars = { 34 packages = join(", ", var.packages) 35 } 36 } 37 38 data "template_file" "worker-cloud-init" { 39 template = file("cloud-init/common.tpl") 40 41 vars = { 42 authorized_keys = join("\n", formatlist(" - %s", var.authorized_keys)) 43 repositories = join("\n", data.template_file.worker_repositories.*.rendered) 44 register_scc = join("\n", data.template_file.worker_register_scc.*.rendered) 45 register_rmt = join("\n", data.template_file.worker_register_rmt.*.rendered) 46 commands = join("\n", data.template_file.worker_commands.*.rendered) 47 username = var.username 48 ntp_servers = join("\n", formatlist(" - %s", var.ntp_servers)) 49 } 50 } 51 52 resource "openstack_blockstorage_volume_v2" "worker_vol" { 53 count = var.workers_vol_enabled ? var.workers : 0 54 size = var.workers_vol_size 55 name = "vol_${element(openstack_compute_instance_v2.worker.*.name, count.index)}" 56 } 57 58 resource "openstack_compute_volume_attach_v2" "worker_vol_attach" { 59 count = var.workers_vol_enabled ? var.workers : 0 60 instance_id = element(openstack_compute_instance_v2.worker.*.id, count.index) 61 volume_id = element( 62 openstack_blockstorage_volume_v2.worker_vol.*.id, 63 count.index, 64 ) 65 } 66 67 resource "openstack_compute_instance_v2" "worker" { 68 count = var.workers 69 name = "caasp-worker-${var.stack_name}-${count.index}" 70 image_name = var.image_name 71 key_pair = var.key_pair 72 73 depends_on = [ 74 openstack_networking_network_v2.network, 75 openstack_networking_subnet_v2.subnet, 76 ] 77 78 flavor_name = var.worker_size 79 80 network { 81 name = var.internal_net 82 } 83 84 security_groups = [ 85 openstack_networking_secgroup_v2.common.id, 86 ] 87 88 user_data = data.template_file.worker-cloud-init.rendered 89 } 90 91 resource "openstack_networking_floatingip_v2" "worker_ext" { 92 count = var.workers 93 pool = var.external_net 94 } 95 96 resource "openstack_compute_floatingip_associate_v2" "worker_ext_ip" { 97 depends_on = [openstack_compute_instance_v2.worker] 98 count = var.workers 99 floating_ip = element( 100 openstack_networking_floatingip_v2.worker_ext.*.address, 101 count.index, 102 ) 103 instance_id = element(openstack_compute_instance_v2.worker.*.id, count.index) 104 } 105 106 resource "null_resource" "worker_wait_cloudinit" { 107 depends_on = [ 108 openstack_compute_instance_v2.worker, 109 openstack_compute_floatingip_associate_v2.worker_ext_ip, 110 ] 111 count = var.workers 112 113 connection { 114 host = element( 115 openstack_compute_floatingip_associate_v2.worker_ext_ip.*.floating_ip, 116 count.index, 117 ) 118 user = var.username 119 type = "ssh" 120 } 121 122 provisioner "remote-exec" { 123 inline = [ 124 "cloud-init status --wait > /dev/null", 125 ] 126 } 127 } 128 129 resource "null_resource" "worker_reboot" { 130 depends_on = [null_resource.worker_wait_cloudinit] 131 count = var.workers 132 133 provisioner "local-exec" { 134 environment = { 135 user = var.username 136 host = element( 137 openstack_compute_floatingip_associate_v2.worker_ext_ip.*.floating_ip, 138 count.index, 139 ) 140 } 141 142 command = <<EOT 143 ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null $user@$host sudo reboot || : 144 # wait for ssh ready after reboot 145 ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -oConnectionAttempts=60 $user@$host /usr/bin/true 146 EOT 147 148 } 149 } 150