Standardizing datastore references to use builting Path func (#8075)
This is a fix to allow use of datastores that are part of a datastore cluster using the syntax <datastore cluster name>/<datastore name>
This commit is contained in:
parent
fbd0105868
commit
70589fff4d
|
@ -115,15 +115,26 @@ func resourceVSphereVirtualDiskCreate(d *schema.ResourceData, meta interface{})
|
||||||
vDisk.datastore = v.(string)
|
vDisk.datastore = v.(string)
|
||||||
}
|
}
|
||||||
|
|
||||||
diskPath := fmt.Sprintf("[%v] %v", vDisk.datastore, vDisk.vmdkPath)
|
finder := find.NewFinder(client.Client, true)
|
||||||
|
|
||||||
err := createHardDisk(client, vDisk.size, diskPath, vDisk.initType, vDisk.adapterType, vDisk.datacenter)
|
dc, err := getDatacenter(client, d.Get("datacenter").(string))
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Error finding Datacenter: %s: %s", vDisk.datacenter, err)
|
||||||
|
}
|
||||||
|
finder = finder.SetDatacenter(dc)
|
||||||
|
|
||||||
|
ds, err := getDatastore(finder, vDisk.datastore)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Error finding Datastore: %s: %s", vDisk.datastore, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = createHardDisk(client, vDisk.size, ds.Path(vDisk.vmdkPath), vDisk.initType, vDisk.adapterType, vDisk.datacenter)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
d.SetId(diskPath)
|
d.SetId(ds.Path(vDisk.vmdkPath))
|
||||||
log.Printf("[DEBUG] Virtual Disk id: %v", diskPath)
|
log.Printf("[DEBUG] Virtual Disk id: %v", ds.Path(vDisk.vmdkPath))
|
||||||
|
|
||||||
return resourceVSphereVirtualDiskRead(d, meta)
|
return resourceVSphereVirtualDiskRead(d, meta)
|
||||||
}
|
}
|
||||||
|
@ -212,7 +223,16 @@ func resourceVSphereVirtualDiskDelete(d *schema.ResourceData, meta interface{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
diskPath := fmt.Sprintf("[%v] %v", vDisk.datastore, vDisk.vmdkPath)
|
|
||||||
|
finder := find.NewFinder(client.Client, true)
|
||||||
|
finder = finder.SetDatacenter(dc)
|
||||||
|
|
||||||
|
ds, err := getDatastore(finder, vDisk.datastore)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
diskPath := ds.Path(vDisk.vmdkPath)
|
||||||
|
|
||||||
virtualDiskManager := object.NewVirtualDiskManager(client.Client)
|
virtualDiskManager := object.NewVirtualDiskManager(client.Client)
|
||||||
|
|
||||||
|
|
|
@ -1279,8 +1279,7 @@ func addHardDisk(vm *object.VirtualMachine, size, iops int64, diskType string, d
|
||||||
if diskPath == "" {
|
if diskPath == "" {
|
||||||
return fmt.Errorf("[ERROR] addHardDisk - No path proided")
|
return fmt.Errorf("[ERROR] addHardDisk - No path proided")
|
||||||
} else {
|
} else {
|
||||||
// TODO Check if diskPath & datastore exist
|
diskPath = datastore.Path(diskPath)
|
||||||
diskPath = fmt.Sprintf("[%v] %v", datastore.Name(), diskPath)
|
|
||||||
}
|
}
|
||||||
log.Printf("[DEBUG] addHardDisk - diskPath: %v", diskPath)
|
log.Printf("[DEBUG] addHardDisk - diskPath: %v", diskPath)
|
||||||
disk := devices.CreateDisk(controller, datastore.Reference(), diskPath)
|
disk := devices.CreateDisk(controller, datastore.Reference(), diskPath)
|
||||||
|
@ -1368,7 +1367,7 @@ func getNextUnitNumber(devices object.VirtualDeviceList, c types.BaseVirtualCont
|
||||||
}
|
}
|
||||||
|
|
||||||
// addCdrom adds a new virtual cdrom drive to the VirtualMachine and attaches an image (ISO) to it from a datastore path.
|
// addCdrom adds a new virtual cdrom drive to the VirtualMachine and attaches an image (ISO) to it from a datastore path.
|
||||||
func addCdrom(vm *object.VirtualMachine, datastore, path string) error {
|
func addCdrom(client *govmomi.Client, vm *object.VirtualMachine, datacenter *object.Datacenter, datastore, path string) error {
|
||||||
devices, err := vm.Device(context.TODO())
|
devices, err := vm.Device(context.TODO())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -1410,7 +1409,14 @@ func addCdrom(vm *object.VirtualMachine, datastore, path string) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
c = devices.InsertIso(c, fmt.Sprintf("[%s] %s", datastore, path))
|
finder := find.NewFinder(client.Client, true)
|
||||||
|
finder = finder.SetDatacenter(datacenter)
|
||||||
|
ds, err := getDatastore(finder, datastore)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
c = devices.InsertIso(c, ds.Path(path))
|
||||||
log.Printf("[DEBUG] addCdrom: %#v", c)
|
log.Printf("[DEBUG] addCdrom: %#v", c)
|
||||||
|
|
||||||
return vm.AddDevice(context.TODO(), c)
|
return vm.AddDevice(context.TODO(), c)
|
||||||
|
@ -1618,12 +1624,12 @@ func findDatastore(c *govmomi.Client, sps types.StoragePlacementSpec) (*object.D
|
||||||
}
|
}
|
||||||
|
|
||||||
// createCdroms is a helper function to attach virtual cdrom devices (and their attached disk images) to a virtual IDE controller.
|
// createCdroms is a helper function to attach virtual cdrom devices (and their attached disk images) to a virtual IDE controller.
|
||||||
func createCdroms(vm *object.VirtualMachine, cdroms []cdrom) error {
|
func createCdroms(client *govmomi.Client, vm *object.VirtualMachine, datacenter *object.Datacenter, cdroms []cdrom) error {
|
||||||
log.Printf("[DEBUG] add cdroms: %v", cdroms)
|
log.Printf("[DEBUG] add cdroms: %v", cdroms)
|
||||||
for _, cd := range cdroms {
|
for _, cd := range cdroms {
|
||||||
log.Printf("[DEBUG] add cdrom (datastore): %v", cd.datastore)
|
log.Printf("[DEBUG] add cdrom (datastore): %v", cd.datastore)
|
||||||
log.Printf("[DEBUG] add cdrom (cd path): %v", cd.path)
|
log.Printf("[DEBUG] add cdrom (cd path): %v", cd.path)
|
||||||
err := addCdrom(vm, cd.datastore, cd.path)
|
err := addCdrom(client, vm, datacenter, cd.datastore, cd.path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -1940,7 +1946,7 @@ func (vm *virtualMachine) setupVirtualMachine(c *govmomi.Client) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create the cdroms if needed.
|
// Create the cdroms if needed.
|
||||||
if err := createCdroms(newVM, vm.cdroms); err != nil {
|
if err := createCdroms(c, newVM, dc, vm.cdroms); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1967,7 +1973,6 @@ func (vm *virtualMachine) setupVirtualMachine(c *govmomi.Client) error {
|
||||||
default:
|
default:
|
||||||
return fmt.Errorf("[ERROR] setupVirtualMachine - Neither vmdk path nor vmdk name was given: %#v", vm.hardDisks[i])
|
return fmt.Errorf("[ERROR] setupVirtualMachine - Neither vmdk path nor vmdk name was given: %#v", vm.hardDisks[i])
|
||||||
}
|
}
|
||||||
|
|
||||||
err = addHardDisk(newVM, vm.hardDisks[i].size, vm.hardDisks[i].iops, vm.hardDisks[i].initType, datastore, diskPath, vm.hardDisks[i].controller)
|
err = addHardDisk(newVM, vm.hardDisks[i].size, vm.hardDisks[i].iops, vm.hardDisks[i].initType, datastore, diskPath, vm.hardDisks[i].controller)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err2 := addHardDisk(newVM, vm.hardDisks[i].size, vm.hardDisks[i].iops, vm.hardDisks[i].initType, datastore, diskPath, vm.hardDisks[i].controller)
|
err2 := addHardDisk(newVM, vm.hardDisks[i].size, vm.hardDisks[i].iops, vm.hardDisks[i].initType, datastore, diskPath, vm.hardDisks[i].controller)
|
||||||
|
|
|
@ -998,17 +998,20 @@ resource "vsphere_virtual_machine" "foo" {
|
||||||
disk {
|
disk {
|
||||||
size = 1
|
size = 1
|
||||||
iops = 500
|
iops = 500
|
||||||
name = "one"
|
name = "one"
|
||||||
|
%s
|
||||||
}
|
}
|
||||||
disk {
|
disk {
|
||||||
size = 1
|
size = 1
|
||||||
iops = 500
|
iops = 500
|
||||||
name = "two"
|
name = "two"
|
||||||
|
%s
|
||||||
}
|
}
|
||||||
disk {
|
disk {
|
||||||
size = 1
|
size = 1
|
||||||
iops = 500
|
iops = 500
|
||||||
name = "three"
|
name = "three"
|
||||||
|
%s
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
`
|
`
|
||||||
|
@ -1032,7 +1035,19 @@ func TestAccVSphereVirtualMachine_updateDisks(t *testing.T) {
|
||||||
log.Printf("[DEBUG] template= %s", testAccCheckVSphereVirtualMachineConfig_basic)
|
log.Printf("[DEBUG] template= %s", testAccCheckVSphereVirtualMachineConfig_basic)
|
||||||
log.Printf("[DEBUG] template config= %s", config_basic)
|
log.Printf("[DEBUG] template config= %s", config_basic)
|
||||||
|
|
||||||
config_add := basic_vars.testSprintfTemplateBody(testAccCheckVSphereVirtualMachineConfig_updateAddDisks)
|
config_add := fmt.Sprintf(
|
||||||
|
testAccCheckVSphereVirtualMachineConfig_updateAddDisks,
|
||||||
|
basic_vars.locationOpt,
|
||||||
|
basic_vars.label,
|
||||||
|
basic_vars.ipv4IpAddress,
|
||||||
|
basic_vars.ipv4Prefix,
|
||||||
|
basic_vars.ipv4Gateway,
|
||||||
|
basic_vars.datastoreOpt,
|
||||||
|
basic_vars.template,
|
||||||
|
basic_vars.datastoreOpt,
|
||||||
|
basic_vars.datastoreOpt,
|
||||||
|
basic_vars.datastoreOpt,
|
||||||
|
)
|
||||||
|
|
||||||
log.Printf("[DEBUG] template= %s", testAccCheckVSphereVirtualMachineConfig_basic)
|
log.Printf("[DEBUG] template= %s", testAccCheckVSphereVirtualMachineConfig_basic)
|
||||||
log.Printf("[DEBUG] template config= %s", config_add)
|
log.Printf("[DEBUG] template config= %s", config_add)
|
||||||
|
|
Loading…
Reference in New Issue