func getVirtualDiskID(volPath string, vmDevices object.VirtualDeviceList) (string, error) { // filter vm devices to retrieve disk ID for the given vmdk file for _, device := range vmDevices { if vmDevices.TypeName(device) == "VirtualDisk" { d := device.GetVirtualDevice() if b, ok := d.Backing.(types.BaseVirtualDeviceFileBackingInfo); ok { fileName := b.GetVirtualDeviceFileBackingInfo().FileName if fileName == volPath { return vmDevices.Name(device), nil } } } } return "", ErrNoDiskIDFound }
// Returns a device id which is internal vSphere API identifier for the attached virtual disk. func getVirtualDiskID(volPath string, vmDevices object.VirtualDeviceList, dc *object.Datacenter, client *govmomi.Client) (string, error) { volumeUUID, err := getVirtualDiskUUIDByPath(volPath, dc, client) if err != nil { glog.Warningf("disk uuid not found for %v ", volPath) return "", err } // filter vm devices to retrieve disk ID for the given vmdk file for _, device := range vmDevices { if vmDevices.TypeName(device) == "VirtualDisk" { diskUUID, _ := getVirtualDiskUUID(device) if diskUUID == volumeUUID { return vmDevices.Name(device), nil } } } return "", ErrNoDiskIDFound }
func (cmd *info) match(p string, devices object.VirtualDeviceList) object.VirtualDeviceList { var matches object.VirtualDeviceList match := func(name string) bool { matched, _ := filepath.Match(p, name) return matched } for _, device := range devices { name := devices.Name(device) eq := name == p if eq || match(name) { matches = append(matches, device) } if eq { break } } return matches }
func (cmd *create) addStorage(devices object.VirtualDeviceList) (object.VirtualDeviceList, error) { if cmd.controller != "ide" { scsi, err := devices.CreateSCSIController(cmd.controller) if err != nil { return nil, err } devices = append(devices, scsi) cmd.controller = devices.Name(scsi) } // If controller is specified to be IDE or if an ISO is specified, add IDE controller. if cmd.controller == "ide" || cmd.iso != "" { ide, err := devices.CreateIDEController() if err != nil { return nil, err } devices = append(devices, ide) } if cmd.diskByteSize != 0 { controller, err := devices.FindDiskController(cmd.controller) if err != nil { return nil, err } disk := &types.VirtualDisk{ VirtualDevice: types.VirtualDevice{ Key: devices.NewKey(), Backing: &types.VirtualDiskFlatVer2BackingInfo{ DiskMode: string(types.VirtualDiskModePersistent), ThinProvisioned: types.NewBool(true), }, }, CapacityInKB: cmd.diskByteSize / 1024, } devices.AssignController(disk, controller) devices = append(devices, disk) } else if cmd.disk != "" { controller, err := devices.FindDiskController(cmd.controller) if err != nil { return nil, err } ds := cmd.diskDatastore.Reference() path := cmd.diskDatastore.Path(cmd.disk) disk := devices.CreateDisk(controller, ds, path) if cmd.link { disk = devices.ChildDisk(disk) } devices = append(devices, disk) } if cmd.iso != "" { ide, err := devices.FindIDEController("") if err != nil { return nil, err } cdrom, err := devices.CreateCdrom(ide) if err != nil { return nil, err } cdrom = devices.InsertIso(cdrom, cmd.isoDatastore.Path(cmd.iso)) devices = append(devices, cdrom) } return devices, nil }