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