Как Terraform может назначить хранилище данных для каждой виртуальной машины при репликации? - PullRequest
0 голосов
/ 06 августа 2020

Мой текущий код устанавливает одно хранилище данных при репликации нескольких виртуальных машин.

Я хочу назначить хранилище данных для каждой виртуальной машины.

Есть ли способ?

ex) vm - test01, хранилище данных - datastore01

vm - test02, datastore - datastore02

vm - test05, хранилище данных - datastore01

vm - test10, datastroe - datastore04

* 10 * vm - test15, datastroe - datastore02

vm.tf

    #data source
    data "vsphere_datacenter" "dc" {
      name = var.dc
    }

    data "vsphere_datastore" "datastore" {
      name = var.datastore
      datacenter_id = "${data.vsphere_datacenter.dc.id}"
    }

    data "vsphere_compute_cluster" "cluster" {
      name = var.cluster
      datacenter_id = "${data.vsphere_datacenter.dc.id}"
    }

    data "vsphere_network" "network1" {
      name = var.network1
      datacenter_id = "${data.vsphere_datacenter.dc.id}"
    }

    data "vsphere_network" "network2" {
      name = var.network2
      datacenter_id = "${data.vsphere_datacenter.dc.id}"
    }

    data "vsphere_virtual_machine" "template" {
      name = var.template
      datacenter_id = "${data.vsphere_datacenter.dc.id}"
    }

    resource vsphere_virtual_machine "allvms" {
    for_each = var.vms

    resource_pool_id = data.vsphere_compute_cluster.cluster.resource_pool_id
    datastore_id     = data.vsphere_datastore.datastore.id
    guest_id = data.vsphere_virtual_machine.template.guest_id
      
    name = each.value.vmname
    folder = each.value.vfolder
    memory = each.value.vmemory
    num_cpus = each.value.vcpu
    annotation = each.value.vannotation
    firmware = each.value.vfirmware
    scsi_type = data.vsphere_virtual_machine.template.scsi_type
      
    network_interface {
        network_id   = data.vsphere_network.network1.id
        adapter_type = "vmxnet3"
      }
      
    network_interface {
        network_id   = data.vsphere_network.network2.id
        adapter_type = "vmxnet3"
      }
      
    disk {
        label            = "disk0"
        size             = data.vsphere_virtual_machine.template.disks.0.size
        eagerly_scrub    = data.vsphere_virtual_machine.template.disks.0.eagerly_scrub
        thin_provisioned = data.vsphere_virtual_machine.template.disks.0.thin_provisioned
      }
      
    dynamic "disk" {
        for_each = flatten([ for i in each.value.vdisk : {
                       vdisklabel = i.vdisklabel
                       vdisksize  = i.vdisksize
                       vdisknumber = i.vdisknumber
           }])
    content {
           label =  disk.value.vdisklabel
           size  =  disk.value.vdisksize
           unit_number =    disk.value.vdisknumber
            }
    }

    clone {
        template_uuid = data.vsphere_virtual_machine.template.id
            customize {
                linux_options {
                    host_name = each.value.vmname
                    domain = ""
        }
            network_interface {
                ipv4_address = each.value.vip1
                ipv4_netmask = each.value.vnetmask1
        }
        network_interface {
                ipv4_address = each.value.vip2
                ipv4_netmask = each.value.vnetmask2
        }
                ipv4_gateway = each.value.vgateway
            } 
        }
    }

variable.tf

    variable "dc" {
    }

    variable "datastore" {
    }

    variable "cluster" {
    }

    variable "network1" {
    }

    variable "network2" {
    }

    variable "template" {
    }

    variable "vms" {
        type = map(object({
            vmname = string
            vfolder = string
            vcpu = number
            vmemory = number
            vfirmware = string
            vannotation = string
            vip1 = string
            vnetmask1 = number
            vip2 = string
            vnetmask2 = number
            vgateway =  string
            vdisk = list(object({
                vdisklabel = string
                vdisksize = number 
                vdisknumber =  number
            }))
        }))
    }

resource.tf

    module "resource" {
    source = "../Terraform"
    dc  =   "test-Datacenter"
    datastore   = "test-datastore"
    cluster = "test_Cluster"
    network1 = "192.168.200..xxx"
    network2 = "192.168.201..xxx"
    template = "test-tmp"

    vms = {
        test = {
            vmname = "test-00"
            vfolder = "0.test"
            vcpu = "4"
            vmemory = "4096"
            vfirmware = "bios"
            vannotation = "#testvm"
            vip1 = "192.168.200.200"
            vnetmask1 = "24"
            vip2 = "192.168.201.200"
            vnetmask2 = "24"
            vgateway = "192.168.200.1"
            vdisk = [
                    {
                    vdisklabel = "disk1" 
                    vdisksize = "30" 
                    vdisknumber = "1""
                    }
                    ]
        }
        test1 = {
            vmname = "test-01"
            vfolder = "0.test"
            vcpu = "4"
            vmemory = "4096"
            vfirmware = "bios"
            vannotation = "testvm;"
            vip1 = "192.168.200.201"
            vnetmask1 = "24"
            vip2 = "192.168.201.201"
            vnetmask2 = "24"
            vgateway = "192.168.200.1"
            vdisk = [
                    {
                    vdisklabel = "disk1" 
                    vdisksize = "40" 
                    vdisknumber = "1"
                    }
                    ]
                    
            }
        }
    }
...