github.com/SUSE/skuba@v1.4.17/ci/infra/libvirt/lb-instances.tf (about) 1 data "template_file" "lb_repositories" { 2 count = length(var.lb_repositories) 3 template = file("cloud-init/repository.tpl") 4 5 vars = { 6 repository_url = element(values(var.lb_repositories), count.index) 7 repository_name = element(keys(var.lb_repositories), count.index) 8 } 9 } 10 11 data "template_file" "lb_register_scc" { 12 template = file("cloud-init/register-scc.tpl") 13 count = var.caasp_registry_code == "" ? 0 : 1 14 15 vars = { 16 ha_registry_code = var.ha_registry_code 17 caasp_registry_code = var.caasp_registry_code 18 } 19 } 20 21 data "template_file" "lb_register_rmt" { 22 template = file("cloud-init/register-rmt.tpl") 23 count = var.rmt_server_name == "" ? 0 : 1 24 25 vars = { 26 rmt_server_name = var.rmt_server_name 27 } 28 } 29 30 data "template_file" "lb_commands" { 31 template = file("cloud-init/commands.tpl") 32 count = join("", var.packages) == "" ? 0 : 1 33 34 vars = { 35 packages = join(", ", concat(["haproxy"], var.packages)) 36 } 37 } 38 39 data "template_file" "haproxy_apiserver_backends_master" { 40 count = var.masters 41 template = "server $${fqdn} $${ip}:6443\n" 42 43 vars = { 44 fqdn = "${var.stack_name}-master-${count.index}.${var.dns_domain}" 45 ip = libvirt_domain.master[count.index].network_interface.0.addresses.0, 46 } 47 } 48 49 data "template_file" "haproxy_gangway_backends_master" { 50 count = var.masters 51 template = "server $${fqdn} $${ip}:32001\n" 52 53 vars = { 54 fqdn = "${var.stack_name}-master-${count.index}.${var.dns_domain}" 55 ip = libvirt_domain.master[count.index].network_interface.0.addresses.0, 56 } 57 } 58 59 data "template_file" "haproxy_dex_backends_master" { 60 count = var.masters 61 template = "server $${fqdn} $${ip}:32000\n" 62 63 vars = { 64 fqdn = "${var.stack_name}-master-${count.index}.${var.dns_domain}" 65 ip = libvirt_domain.master[count.index].network_interface.0.addresses.0, 66 } 67 } 68 69 data "template_file" "lb_haproxy_cfg" { 70 template = file("cloud-init/haproxy.cfg.tpl") 71 72 vars = { 73 apiserver_backends = join( 74 " ", 75 data.template_file.haproxy_apiserver_backends_master.*.rendered, 76 ) 77 gangway_backends = join( 78 " ", 79 data.template_file.haproxy_gangway_backends_master.*.rendered, 80 ) 81 dex_backends = join( 82 " ", 83 data.template_file.haproxy_dex_backends_master.*.rendered, 84 ) 85 } 86 } 87 88 data "template_file" "lb_cloud_init_userdata" { 89 template = file("cloud-init/common.tpl") 90 91 vars = { 92 authorized_keys = join("\n", formatlist(" - %s", var.authorized_keys)) 93 repositories = join("\n", data.template_file.lb_repositories.*.rendered) 94 register_scc = join("\n", data.template_file.lb_register_scc.*.rendered) 95 register_rmt = join("\n", data.template_file.lb_register_rmt.*.rendered) 96 commands = join("\n", data.template_file.lb_commands.*.rendered) 97 username = var.username 98 ntp_servers = join("\n", formatlist(" - %s", var.ntp_servers)) 99 } 100 } 101 102 resource "libvirt_volume" "lb" { 103 count = var.create_lb ? 1 : 0 104 name = "${var.stack_name}-lb-volume" 105 pool = var.pool 106 size = var.lb_disk_size 107 base_volume_id = libvirt_volume.img.id 108 } 109 110 resource "libvirt_cloudinit_disk" "lb" { 111 name = "${var.stack_name}-lb-cloudinit-disk" 112 pool = var.pool 113 114 user_data = data.template_file.lb_cloud_init_userdata.rendered 115 } 116 117 resource "libvirt_domain" "lb" { 118 count = var.create_lb ? 1 : 0 119 name = "${var.stack_name}-lb-domain" 120 memory = var.lb_memory 121 vcpu = var.lb_vcpu 122 cloudinit = libvirt_cloudinit_disk.lb.id 123 124 cpu = { 125 mode = "host-passthrough" 126 } 127 128 disk { 129 volume_id = element( 130 libvirt_volume.lb.*.id, 131 count.index, 132 ) 133 } 134 135 network_interface { 136 network_name = var.network_name 137 network_id = var.network_name == "" ? libvirt_network.network.0.id : null 138 hostname = "${var.stack_name}-lb" 139 wait_for_lease = true 140 } 141 142 graphics { 143 type = "vnc" 144 listen_type = "address" 145 } 146 } 147 148 resource "null_resource" "lb_wait_cloudinit" { 149 depends_on = [libvirt_domain.lb] 150 count = var.create_lb ? 1 : 0 151 152 connection { 153 host = element( 154 libvirt_domain.lb.*.network_interface.0.addresses.0, 155 count.index 156 ) 157 user = var.username 158 type = "ssh" 159 } 160 161 provisioner "remote-exec" { 162 inline = [ 163 "cloud-init status --wait > /dev/null", 164 ] 165 } 166 } 167 168 resource "null_resource" "lb_push_haproxy_cfg" { 169 depends_on = [null_resource.lb_wait_cloudinit] 170 count = var.create_lb ? 1 : 0 171 172 triggers = { 173 master_count = var.masters 174 } 175 176 connection { 177 host = element( 178 libvirt_domain.lb.*.network_interface.0.addresses.0, 179 count.index 180 ) 181 user = var.username 182 type = "ssh" 183 agent = true 184 } 185 186 provisioner "file" { 187 content = data.template_file.lb_haproxy_cfg.rendered 188 destination = "/tmp/haproxy.cfg" 189 } 190 191 provisioner "remote-exec" { 192 inline = [ 193 "sudo mv /tmp/haproxy.cfg /etc/haproxy/haproxy.cfg", 194 "sudo systemctl enable haproxy && sudo systemctl restart haproxy", 195 ] 196 } 197 } 198