github.com/SUSE/skuba@v1.4.17/ci/infra/openstack/master-instance.tf (about) 1 data "template_file" "master_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" "master_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" "master_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" "master_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" "master-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.master_repositories.*.rendered) 44 register_scc = join("\n", data.template_file.master_register_scc.*.rendered) 45 register_rmt = join("\n", data.template_file.master_register_rmt.*.rendered) 46 commands = join("\n", data.template_file.master_commands.*.rendered) 47 username = var.username 48 ntp_servers = join("\n", formatlist(" - %s", var.ntp_servers)) 49 } 50 } 51 52 resource "openstack_compute_instance_v2" "master" { 53 count = var.masters 54 name = "caasp-master-${var.stack_name}-${count.index}" 55 image_name = var.image_name 56 key_pair = var.key_pair 57 58 depends_on = [ 59 openstack_networking_network_v2.network, 60 openstack_networking_subnet_v2.subnet, 61 ] 62 63 flavor_name = var.master_size 64 65 network { 66 name = var.internal_net 67 } 68 69 security_groups = [ 70 openstack_networking_secgroup_v2.common.id, 71 openstack_networking_secgroup_v2.master_nodes.id, 72 ] 73 74 user_data = data.template_file.master-cloud-init.rendered 75 } 76 77 resource "openstack_networking_floatingip_v2" "master_ext" { 78 count = var.masters 79 pool = var.external_net 80 } 81 82 resource "openstack_compute_floatingip_associate_v2" "master_ext_ip" { 83 depends_on = [openstack_compute_instance_v2.master] 84 count = var.masters 85 floating_ip = element( 86 openstack_networking_floatingip_v2.master_ext.*.address, 87 count.index, 88 ) 89 instance_id = element(openstack_compute_instance_v2.master.*.id, count.index) 90 } 91 92 resource "null_resource" "master_wait_cloudinit" { 93 depends_on = [ 94 openstack_compute_instance_v2.master, 95 openstack_compute_floatingip_associate_v2.master_ext_ip 96 ] 97 count = var.masters 98 99 connection { 100 host = element( 101 openstack_compute_floatingip_associate_v2.master_ext_ip.*.floating_ip, 102 count.index, 103 ) 104 user = var.username 105 type = "ssh" 106 } 107 108 provisioner "remote-exec" { 109 inline = [ 110 "cloud-init status --wait > /dev/null", 111 ] 112 } 113 } 114 115 resource "null_resource" "master_reboot" { 116 depends_on = [null_resource.master_wait_cloudinit] 117 count = var.masters 118 119 provisioner "local-exec" { 120 environment = { 121 user = var.username 122 host = element( 123 openstack_compute_floatingip_associate_v2.master_ext_ip.*.floating_ip, 124 count.index, 125 ) 126 } 127 128 command = <<EOT 129 ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null $user@$host sudo reboot || : 130 # wait for ssh ready after reboot 131 ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -oConnectionAttempts=60 $user@$host /usr/bin/true 132 EOT 133 134 } 135 } 136