func (vm *VirtualMachine) registerVM(ctx context.Context, path, name string, vapp, pool, host *types.ManagedObjectReference, vmfolder *object.Folder) (*object.Task, error) { log.Debugf("Register VM %s", name) if vapp == nil { var hostObject *object.HostSystem if host != nil { hostObject = object.NewHostSystem(vm.Vim25(), *host) } poolObject := object.NewResourcePool(vm.Vim25(), *pool) return vmfolder.RegisterVM(ctx, path, name, false, poolObject, hostObject) } req := types.RegisterChildVM_Task{ This: vapp.Reference(), Path: path, Host: host, } if name != "" { req.Name = name } res, err := methods.RegisterChildVM_Task(ctx, vm.Vim25(), &req) if err != nil { return nil, err } return object.NewTask(vm.Vim25(), res.Returnval), nil }
// RemoveSnapshot delete one snapshot func (vm *VirtualMachine) RemoveSnapshot(ctx context.Context, id types.ManagedObjectReference, removeChildren bool, consolidate bool) (*object.Task, error) { req := types.RemoveSnapshot_Task{ This: id, RemoveChildren: removeChildren, Consolidate: &consolidate, } res, err := methods.RemoveSnapshot_Task(ctx, vm.Client.RoundTripper, &req) if err != nil { return nil, err } return object.NewTask(vm.Vim25(), res.Returnval), nil }
func addStandaloneHost(folder *object.Folder, spec types.HostConnectSpec) (*object.Task, error) { // TODO: add govmomi wrapper req := types.AddStandaloneHost_Task{ This: folder.Reference(), Spec: spec, AddConnected: true, } res, err := methods.AddStandaloneHost_Task(context.TODO(), folder.Client(), &req) if err != nil { return nil, err } task := object.NewTask(folder.Client(), res.Returnval) return task, nil }
func (cmd *add) Add(ctx context.Context, parent *object.Folder) error { spec := cmd.HostConnectSpec req := types.AddStandaloneHost_Task{ This: parent.Reference(), Spec: spec, AddConnected: cmd.connect, } res, err := methods.AddStandaloneHost_Task(ctx, parent.Client(), &req) if err != nil { return err } logger := cmd.ProgressLogger(fmt.Sprintf("adding %s to folder %s... ", spec.HostName, parent.InventoryPath)) defer logger.Wait() task := object.NewTask(parent.Client(), res.Returnval) _, err = task.WaitForResult(ctx, logger) return err }
func (cmd *add) Run(f *flag.FlagSet) error { var ctx = context.Background() var parent *object.Folder client, err := cmd.Client() if err != nil { return err } if cmd.parent == "" { dc, err := cmd.Datacenter() if err != nil { return err } folders, err := dc.Folders(ctx) if err != nil { return err } parent = folders.HostFolder } else { finder, err := cmd.Finder() if err != nil { return err } mo, err := finder.ManagedObjectList(ctx, cmd.parent) if err != nil { return err } if len(mo) == 0 { return errors.New("parent does not resolve to object") } if len(mo) > 1 { return errors.New("parent resolves to more than one object") } ref := mo[0].Object.Reference() if ref.Type != "Folder" { return errors.New("parent does not resolve to folder") } parent = object.NewFolder(client, ref) } req := types.AddStandaloneHost_Task{ This: parent.Reference(), Spec: types.HostConnectSpec{ HostName: cmd.host, UserName: cmd.username, Password: cmd.password, SslThumbprint: cmd.fingerprint, }, AddConnected: cmd.connect, } res, err := methods.AddStandaloneHost_Task(ctx, client, &req) if err != nil { return err } task := object.NewTask(client, res.Returnval) _, err = task.WaitForResult(ctx, nil) if err != nil { f, ok := err.(types.HasFault) if !ok { return err } switch fault := f.Fault().(type) { case *types.SSLVerifyFault: // Add fingerprint to error message return fmt.Errorf("%s Fingerprint is %s.", err.Error(), fault.Thumbprint) default: return err } } return nil }