github.com/SUSE/skuba@v1.4.17/ci/infra/libvirt/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 # no need to enable the SLE HA product on this kind of nodes 19 ha_registry_code = "" 20 } 21 } 22 23 data "template_file" "master_register_rmt" { 24 template = file("cloud-init/register-rmt.tpl") 25 count = var.rmt_server_name == "" ? 0 : 1 26 27 vars = { 28 rmt_server_name = var.rmt_server_name 29 } 30 } 31 32 data "template_file" "master_commands" { 33 template = file("cloud-init/commands.tpl") 34 count = join("", var.packages) == "" ? 0 : 1 35 36 vars = { 37 packages = join(", ", var.packages) 38 } 39 } 40 41 data "template_file" "master-cloud-init" { 42 template = file("cloud-init/common.tpl") 43 44 vars = { 45 authorized_keys = join("\n", formatlist(" - %s", var.authorized_keys)) 46 repositories = join("\n", data.template_file.master_repositories.*.rendered) 47 register_scc = join("\n", data.template_file.master_register_scc.*.rendered) 48 register_rmt = join("\n", data.template_file.master_register_rmt.*.rendered) 49 commands = join("\n", data.template_file.master_commands.*.rendered) 50 username = var.username 51 ntp_servers = join("\n", formatlist(" - %s", var.ntp_servers)) 52 } 53 } 54 55 resource "libvirt_volume" "master" { 56 name = "${var.stack_name}-master-volume-${count.index}" 57 pool = var.pool 58 size = var.master_disk_size 59 base_volume_id = libvirt_volume.img.id 60 count = var.masters 61 } 62 63 resource "libvirt_cloudinit_disk" "master" { 64 # needed when 0 master nodes are defined 65 count = var.masters 66 name = "${var.stack_name}-master-cloudinit-disk-${count.index}" 67 pool = var.pool 68 user_data = data.template_file.master-cloud-init.rendered 69 } 70 71 resource "libvirt_domain" "master" { 72 count = var.masters 73 name = "${var.stack_name}-master-domain-${count.index}" 74 memory = var.master_memory 75 vcpu = var.master_vcpu 76 cloudinit = element(libvirt_cloudinit_disk.master.*.id, count.index) 77 depends_on = [libvirt_domain.lb] 78 79 cpu = { 80 mode = "host-passthrough" 81 } 82 83 disk { 84 volume_id = element(libvirt_volume.master.*.id, count.index) 85 } 86 87 network_interface { 88 network_name = var.network_name 89 network_id = var.network_name == "" ? libvirt_network.network.0.id : null 90 hostname = "${var.stack_name}-master-${count.index}" 91 wait_for_lease = true 92 } 93 94 graphics { 95 type = "vnc" 96 listen_type = "address" 97 } 98 } 99 100 resource "null_resource" "master_wait_cloudinit" { 101 depends_on = [libvirt_domain.master] 102 count = var.masters 103 104 connection { 105 host = element( 106 libvirt_domain.master.*.network_interface.0.addresses.0, 107 count.index 108 ) 109 user = var.username 110 type = "ssh" 111 } 112 113 provisioner "remote-exec" { 114 inline = [ 115 "cloud-init status --wait > /dev/null", 116 ] 117 } 118 } 119 120 resource "null_resource" "master_reboot" { 121 depends_on = [null_resource.master_wait_cloudinit] 122 count = var.masters 123 124 provisioner "local-exec" { 125 environment = { 126 user = var.username 127 host = element( 128 libvirt_domain.master.*.network_interface.0.addresses.0, 129 count.index 130 ) 131 } 132 133 command = <<EOT 134 ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null $user@$host sudo reboot || : 135 # wait for ssh ready after reboot 136 until nc -zv $host 22; do sleep 5; done 137 ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -oConnectionAttempts=60 $user@$host /usr/bin/true 138 EOT 139 140 } 141 } 142