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