github.com/SUSE/skuba@v1.4.17/ci/infra/vmware/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_metadata" {
    39    template = file("cloud-init/metadata.tpl")
    40  
    41    vars = {
    42      network_config = base64gzip(data.local_file.network_cloud_init.content)
    43      instance_id    = "${var.stack_name}-master"
    44    }
    45  }
    46  
    47  data "template_file" "master_cloud_init_userdata" {
    48    template = file("cloud-init/common.tpl")
    49    count    = var.masters
    50  
    51    vars = {
    52      authorized_keys    = join("\n", formatlist("  - %s", var.authorized_keys))
    53      repositories       = join("\n", data.template_file.master_repositories.*.rendered)
    54      register_scc       = join("\n", data.template_file.master_register_scc.*.rendered)
    55      register_rmt       = join("\n", data.template_file.master_register_rmt.*.rendered)
    56      commands           = join("\n", data.template_file.master_commands.*.rendered)
    57      ntp_servers        = join("\n", formatlist("    - %s", var.ntp_servers))
    58      hostname           = "${var.stack_name}-master-${count.index}"
    59      hostname_from_dhcp = var.hostname_from_dhcp == true ? "yes" : "no"
    60    }
    61  }
    62  
    63  resource "vsphere_virtual_machine" "master" {
    64    depends_on = [vsphere_folder.folder]
    65  
    66    count                = var.masters
    67    name                 = "${var.stack_name}-master-${count.index}"
    68    num_cpus             = var.master_cpus
    69    memory               = var.master_memory
    70    guest_id             = var.guest_id
    71    firmware             = var.firmware
    72    scsi_type            = data.vsphere_virtual_machine.template.scsi_type
    73    resource_pool_id     = data.vsphere_resource_pool.pool.id
    74    datastore_id         = (var.vsphere_datastore == null ? null : data.vsphere_datastore.datastore[0].id)
    75    datastore_cluster_id = (var.vsphere_datastore_cluster == null ? null : data.vsphere_datastore_cluster.datastore[0].id)
    76    folder               = var.cpi_enable == true ? vsphere_folder.folder[0].path : null
    77  
    78    clone {
    79      template_uuid = data.vsphere_virtual_machine.template.id
    80    }
    81  
    82    hardware_version = var.vsphere_hardware_version
    83  
    84    disk {
    85      label = "disk0"
    86      size  = var.master_disk_size
    87    }
    88  
    89    extra_config = {
    90      "guestinfo.metadata"          = base64gzip(data.template_file.master_cloud_init_metadata.rendered)
    91      "guestinfo.metadata.encoding" = "gzip+base64"
    92      "guestinfo.userdata"          = base64gzip(data.template_file.master_cloud_init_userdata[count.index].rendered)
    93      "guestinfo.userdata.encoding" = "gzip+base64"
    94    }
    95    enable_disk_uuid = var.cpi_enable == true ? true : false
    96  
    97    network_interface {
    98      network_id = data.vsphere_network.network.id
    99    }
   100  }
   101  
   102  resource "null_resource" "master_wait_cloudinit" {
   103    depends_on = [vsphere_virtual_machine.master]
   104    count      = var.masters
   105  
   106    connection {
   107      host = element(
   108        vsphere_virtual_machine.master.*.guest_ip_addresses.0,
   109        count.index,
   110      )
   111      user  = var.username
   112      type  = "ssh"
   113      agent = true
   114    }
   115  
   116    provisioner "remote-exec" {
   117      inline = [
   118        "cloud-init status --wait > /dev/null",
   119      ]
   120    }
   121  }