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 (f Folder) AddStandaloneHost(ctx context.Context, spec types.HostConnectSpec, addConnected bool, license *string, compResSpec *types.BaseComputeResourceConfigSpec) (*Task, error) { req := types.AddStandaloneHost_Task{ This: f.Reference(), Spec: spec, AddConnected: addConnected, } if license != nil { req.License = *license } if compResSpec != nil { req.CompResSpec = *compResSpec } res, err := methods.AddStandaloneHost_Task(ctx, f.c, &req) if err != nil { return nil, err } return NewTask(f.c, res.Returnval), nil }
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 }