github.com/SUSE/skuba@v1.4.17/ci/infra/libvirt/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      # no need to enable the SLE HA product on this kind of nodes
    19      ha_registry_code = ""
    20    }
    21  }
    22  
    23  data "template_file" "worker_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" "worker_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" "worker-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.worker_repositories.*.rendered)
    47      register_scc    = join("\n", data.template_file.worker_register_scc.*.rendered)
    48      register_rmt    = join("\n", data.template_file.worker_register_rmt.*.rendered)
    49      commands        = join("\n", data.template_file.worker_commands.*.rendered)
    50      username        = var.username
    51      ntp_servers     = join("\n", formatlist("    - %s", var.ntp_servers))
    52    }
    53  }
    54  
    55  resource "libvirt_volume" "worker" {
    56    name           = "${var.stack_name}-worker-volume-${count.index}"
    57    pool           = var.pool
    58    size           = var.worker_disk_size
    59    base_volume_id = libvirt_volume.img.id
    60    count          = var.workers
    61  }
    62  
    63  resource "libvirt_cloudinit_disk" "worker" {
    64    # needed when 0 worker nodes are defined
    65    count     = var.workers
    66    name      = "${var.stack_name}-worker-cloudinit-disk-${count.index}"
    67    pool      = var.pool
    68    user_data = data.template_file.worker-cloud-init.rendered
    69  }
    70  
    71  resource "libvirt_domain" "worker" {
    72    count      = var.workers
    73    name       = "${var.stack_name}-worker-domain-${count.index}"
    74    memory     = var.worker_memory
    75    vcpu       = var.worker_vcpu
    76    cloudinit  = element(libvirt_cloudinit_disk.worker.*.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.worker.*.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}-worker-${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" "worker_wait_cloudinit" {
   101    depends_on = [libvirt_domain.worker]
   102    count      = var.workers
   103  
   104    connection {
   105      host = element(
   106        libvirt_domain.worker.*.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" "worker_reboot" {
   121    depends_on = [null_resource.worker_wait_cloudinit]
   122    count      = var.workers
   123  
   124    provisioner "local-exec" {
   125      environment = {
   126        user = var.username
   127        host = element(
   128          libvirt_domain.worker.*.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