github.com/SUSE/skuba@v1.4.17/ci/infra/openstack/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  }
    19  
    20  data "template_file" "worker_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" "worker_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" "worker-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.worker_repositories.*.rendered)
    44      register_scc    = join("\n", data.template_file.worker_register_scc.*.rendered)
    45      register_rmt    = join("\n", data.template_file.worker_register_rmt.*.rendered)
    46      commands        = join("\n", data.template_file.worker_commands.*.rendered)
    47      username        = var.username
    48      ntp_servers     = join("\n", formatlist("    - %s", var.ntp_servers))
    49    }
    50  }
    51  
    52  resource "openstack_blockstorage_volume_v2" "worker_vol" {
    53    count = var.workers_vol_enabled ? var.workers : 0
    54    size  = var.workers_vol_size
    55    name  = "vol_${element(openstack_compute_instance_v2.worker.*.name, count.index)}"
    56  }
    57  
    58  resource "openstack_compute_volume_attach_v2" "worker_vol_attach" {
    59    count       = var.workers_vol_enabled ? var.workers : 0
    60    instance_id = element(openstack_compute_instance_v2.worker.*.id, count.index)
    61    volume_id = element(
    62      openstack_blockstorage_volume_v2.worker_vol.*.id,
    63      count.index,
    64    )
    65  }
    66  
    67  resource "openstack_compute_instance_v2" "worker" {
    68    count      = var.workers
    69    name       = "caasp-worker-${var.stack_name}-${count.index}"
    70    image_name = var.image_name
    71    key_pair   = var.key_pair
    72  
    73    depends_on = [
    74      openstack_networking_network_v2.network,
    75      openstack_networking_subnet_v2.subnet,
    76    ]
    77  
    78    flavor_name = var.worker_size
    79  
    80    network {
    81      name = var.internal_net
    82    }
    83  
    84    security_groups = [
    85      openstack_networking_secgroup_v2.common.id,
    86    ]
    87  
    88    user_data = data.template_file.worker-cloud-init.rendered
    89  }
    90  
    91  resource "openstack_networking_floatingip_v2" "worker_ext" {
    92    count = var.workers
    93    pool  = var.external_net
    94  }
    95  
    96  resource "openstack_compute_floatingip_associate_v2" "worker_ext_ip" {
    97    depends_on = [openstack_compute_instance_v2.worker]
    98    count = var.workers
    99    floating_ip = element(
   100      openstack_networking_floatingip_v2.worker_ext.*.address,
   101      count.index,
   102    )
   103    instance_id = element(openstack_compute_instance_v2.worker.*.id, count.index)
   104  }
   105  
   106  resource "null_resource" "worker_wait_cloudinit" {
   107    depends_on = [
   108      openstack_compute_instance_v2.worker,
   109      openstack_compute_floatingip_associate_v2.worker_ext_ip,
   110    ]
   111    count      = var.workers
   112  
   113    connection {
   114      host = element(
   115        openstack_compute_floatingip_associate_v2.worker_ext_ip.*.floating_ip,
   116        count.index,
   117      )
   118      user = var.username
   119      type = "ssh"
   120    }
   121  
   122    provisioner "remote-exec" {
   123      inline = [
   124        "cloud-init status --wait > /dev/null",
   125      ]
   126    }
   127  }
   128  
   129  resource "null_resource" "worker_reboot" {
   130    depends_on = [null_resource.worker_wait_cloudinit]
   131    count      = var.workers
   132  
   133    provisioner "local-exec" {
   134      environment = {
   135        user = var.username
   136        host = element(
   137          openstack_compute_floatingip_associate_v2.worker_ext_ip.*.floating_ip,
   138          count.index,
   139        )
   140      }
   141  
   142      command = <<EOT
   143  ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null $user@$host sudo reboot || :
   144  # wait for ssh ready after reboot
   145  ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -oConnectionAttempts=60 $user@$host /usr/bin/true
   146  EOT
   147  
   148    }
   149  }
   150