func (d *Dispatcher) switchISO(filePath string) ([]types.BaseVirtualDeviceConfigSpec, error) { defer trace.End(trace.Begin(filePath)) var devices object.VirtualDeviceList var err error log.Infof("Switching appliance iso to %s", filePath) devices, err = d.appliance.Device(d.ctx) if err != nil { log.Errorf("Failed to get vm devices for appliance: %s", err) return nil, err } // find the single cdrom cd, err := devices.FindCdrom("") if err != nil { log.Errorf("Failed to get CD rom device from appliance: %s", err) return nil, err } oldApplianceISO := cd.Backing.(*types.VirtualCdromIsoBackingInfo).FileName if oldApplianceISO == filePath { log.Debugf("Target file name %q is same to old one, no need to change.") return nil, nil } cd = devices.InsertIso(cd, filePath) changedDevices := object.VirtualDeviceList([]types.BaseVirtualDevice{cd}) deviceChange, err := changedDevices.ConfigSpec(types.VirtualDeviceConfigSpecOperationEdit) if err != nil { log.Errorf("Failed to create config spec for appliance: %s", err) return nil, err } d.oldApplianceISO = oldApplianceISO return deviceChange, nil }