本文整理汇总了Golang中github.com/vmware/govmomi.NewClient函数的典型用法代码示例。如果您正苦于以下问题:Golang NewClient函数的具体用法?Golang NewClient怎么用?Golang NewClient使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了NewClient函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: NewVMHost
// NewVMHost connects to a ESXi or vCenter instance and returns a *VMHost
func NewVMHost(insecure bool, hostURL_param, user, pass string) (*VMHost, error) {
ctx, _ := context.WithCancel(context.Background())
hostURL, err := url.Parse("https://" + hostURL_param + "/sdk")
hostURL.User = url.UserPassword(user, pass)
cli, err := govmomi.NewClient(ctx, hostURL, insecure)
if err != nil {
return nil, err
}
mac, err := getLocalMAC()
if err != nil {
return nil, err
}
vmh := &VMHost{
client: cli,
Ctx: ctx,
mac: mac,
}
vm, err := vmh.findVM(vmh.mac)
if err != nil {
return nil, err
}
vmh.Vm = vm
return vmh, nil
}
开发者ID:zhaog918,项目名称:govmax,代码行数:30,代码来源:vmomi.go
示例2: TestClusterESX
func TestClusterESX(t *testing.T) {
content := esx.ServiceContent
s := New(NewServiceInstance(content, esx.RootFolder))
ts := s.NewServer()
defer ts.Close()
ctx := context.Background()
c, err := govmomi.NewClient(ctx, ts.URL, true)
if err != nil {
t.Fatal(err)
}
dc := object.NewDatacenter(c.Client, esx.Datacenter.Reference())
folders, err := dc.Folders(ctx)
if err != nil {
t.Fatal(err)
}
_, err = folders.HostFolder.CreateCluster(ctx, "cluster1", types.ClusterConfigSpecEx{})
if err == nil {
t.Fatal("expected error")
}
}
开发者ID:jak-atx,项目名称:vic,代码行数:25,代码来源:cluster_compute_resource_test.go
示例3: TestClusterVC
func TestClusterVC(t *testing.T) {
content := vc.ServiceContent
s := New(NewServiceInstance(content, vc.RootFolder))
ts := s.NewServer()
defer ts.Close()
ctx := context.Background()
c, err := govmomi.NewClient(ctx, ts.URL, true)
if err != nil {
t.Fatal(err)
}
f := object.NewRootFolder(c.Client)
dc, err := f.CreateDatacenter(ctx, "foo")
if err != nil {
t.Error(err)
}
folders, err := dc.Folders(ctx)
if err != nil {
t.Fatal(err)
}
cluster, err := folders.HostFolder.CreateCluster(ctx, "cluster1", types.ClusterConfigSpecEx{})
if err != nil {
t.Fatal(err)
}
_, err = folders.HostFolder.CreateCluster(ctx, "cluster1", types.ClusterConfigSpecEx{})
if err == nil {
t.Error("expected DuplicateName error")
}
spec := types.HostConnectSpec{}
for _, fail := range []bool{true, false} {
task, err := cluster.AddHost(ctx, spec, true, nil, nil)
if err != nil {
t.Fatal(err)
}
_, err = task.WaitForResult(ctx, nil)
if fail {
if err == nil {
t.Error("expected error")
}
spec.HostName = "localhost"
} else {
if err != nil {
t.Error(err)
}
}
}
}
开发者ID:jak-atx,项目名称:vic,代码行数:57,代码来源:cluster_compute_resource_test.go
示例4: TestWaitForUpdates
func TestWaitForUpdates(t *testing.T) {
folder := esx.RootFolder
s := New(NewServiceInstance(esx.ServiceContent, folder))
ts := s.NewServer()
defer ts.Close()
ctx := context.Background()
c, err := govmomi.NewClient(ctx, ts.URL, true)
if err != nil {
t.Fatal(err)
}
cb := func(once bool) func([]types.PropertyChange) bool {
return func(pc []types.PropertyChange) bool {
if len(pc) != 1 {
t.Fail()
}
c := pc[0]
if c.Op != types.PropertyChangeOpAssign {
t.Fail()
}
if c.Name != "name" {
t.Fail()
}
if c.Val.(string) != folder.Name {
t.Fail()
}
return once
}
}
pc := property.DefaultCollector(c.Client)
props := []string{"name"}
err = property.Wait(ctx, pc, folder.Reference(), props, cb(true))
if err != nil {
t.Error(err)
}
// incremental updates not yet suppported
err = property.Wait(ctx, pc, folder.Reference(), props, cb(false))
if err == nil {
t.Error("expected error")
}
// test object not found
Map.Remove(folder.Reference())
err = property.Wait(ctx, pc, folder.Reference(), props, cb(true))
if err == nil {
t.Error("expected error")
}
}
开发者ID:jak-atx,项目名称:vic,代码行数:57,代码来源:property_collector_test.go
示例5: Connect
// Connect establishes the connection for the session but nothing more
func (s *Session) Connect(ctx context.Context) (*Session, error) {
soapURL, err := soap.ParseURL(s.Service)
if soapURL == nil || err != nil {
return nil, errors.Errorf("SDK URL (%s) could not be parsed: %s", s.Service, err)
}
// update the service URL with the resolved soapURL
s.Service = soapURL.String()
// we can't set a keep alive if we log in directly with client creation
user := soapURL.User
soapURL.User = nil
// 1st connect without any userinfo to get the API type
s.Client, err = govmomi.NewClient(ctx, soapURL, s.Insecure)
if err != nil {
return nil, errors.Errorf("Failed to connect to %s: %s", soapURL.String(), err)
}
if s.HasCertificate() && s.Client.IsVC() {
// load the certificates
cert, err2 := tls.X509KeyPair([]byte(s.ExtensionCert), []byte(s.ExtensionKey))
if err2 != nil {
return nil, errors.Errorf("Unable to load X509 key pair(%s,%s): %s",
s.ExtensionCert, s.ExtensionKey, err2)
}
// create the new client
s.Client, err = govmomi.NewClientWithCertificate(ctx, soapURL, s.Insecure, cert)
if err != nil {
return nil, errors.Errorf("Failed to connect to %s: %s", soapURL.String(), err)
}
}
if s.Keepalive != 0 {
// now that we've verified everything, enable keepalive
s.RoundTripper = session.KeepAlive(s.Client.RoundTripper, s.Keepalive)
}
// and now that the keepalive is registered we can log in to trigger it
if !s.IsVC() || !s.HasCertificate() {
log.Debugf("Trying to log in with username/password in lieu of cert")
err = s.Client.Login(ctx, user)
} else {
log.Debugf("Logging into extension %s", s.ExtensionName)
err = s.LoginExtensionByCertificate(ctx, s.ExtensionName, "")
}
if err != nil {
return nil, errors.Errorf("Failed to log in to %s: %s", soapURL.String(), err)
}
s.Finder = find.NewFinder(s.Vim25(), true)
// log high-level environement information
s.logEnvironmentInfo()
return s, nil
}
开发者ID:jak-atx,项目名称:vic,代码行数:57,代码来源:session.go
示例6: createClient
func (i *vSphereInstanceManager) createClient(ctx context.Context) (*govmomi.Client, error) {
client, err := govmomi.NewClient(ctx, i.vSphereURL, true)
if err != nil {
return nil, err
}
client.Client.RoundTripper = vim25.Retry(client.Client.RoundTripper, vim25.TemporaryNetworkError(3))
return client, nil
}
开发者ID:Tiger66639,项目名称:jupiter-brain,代码行数:10,代码来源:vsphere.go
示例7: TestServeHTTP
func TestServeHTTP(t *testing.T) {
configs := []struct {
content types.ServiceContent
folder mo.Folder
}{
{esx.ServiceContent, esx.RootFolder},
{vc.ServiceContent, vc.RootFolder},
}
for _, config := range configs {
s := New(NewServiceInstance(config.content, config.folder))
ts := s.NewServer()
defer ts.Close()
ctx := context.Background()
client, err := govmomi.NewClient(ctx, ts.URL, true)
if err != nil {
t.Fatal(err)
}
err = client.Login(ctx, nil)
if err == nil {
t.Fatal("expected invalid login error")
}
err = client.Login(ctx, url.UserPassword("user", "pass"))
if err != nil {
t.Fatal(err)
}
// Testing http client + reflect client
clients := []soap.RoundTripper{client, s.client}
for _, c := range clients {
now, err := methods.GetCurrentTime(ctx, c)
if err != nil {
t.Fatal(err)
}
if now.After(time.Now()) {
t.Fail()
}
// test the fail/Fault path
_, err = methods.QueryVMotionCompatibility(ctx, c, &types.QueryVMotionCompatibility{})
if err == nil {
t.Errorf("expected error")
}
}
err = client.Logout(ctx)
if err != nil {
t.Error(err)
}
}
}
开发者ID:jak-atx,项目名称:vic,代码行数:55,代码来源:simulator_test.go
示例8: Client
func (c *Config) Client() (*vim25.Client, error) {
u, err := url.Parse(fmt.Sprintf("https://%s:%[email protected]%s/sdk", c.User, c.Password, c.vCenter))
if err != nil {
return nil, fmt.Errorf("Incorrect vCenter server address: %s", err)
}
client, err := govmomi.NewClient(context.TODO(), u, c.Insecure)
if err != nil {
return nil, fmt.Errorf("Error setting up client: %s", err)
}
log.Printf("[INFO] vSphere Client configured")
return client.Client, nil
}
开发者ID:ae6rt,项目名称:terraform-vsphere,代码行数:12,代码来源:config.go
示例9: main
func main() {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
flag.Parse()
// Parse URL from string
u, err := url.Parse(*urlFlag)
if err != nil {
exit(err)
}
fmt.Println("u:", u)
// Override username and/or password as required
processOverride(u)
// Connect and log in to ESX or vCenter
client, err := govmomi.NewClient(ctx, u, *insecureFlag)
if err != nil {
exit(err)
}
if client.IsVC() {
fmt.Println("connected to vCenter")
} else {
fmt.Println("connected to ESXi host")
}
var perfManager mo.PerformanceManager
err = client.RetrieveOne(ctx, *client.ServiceContent.PerfManager, nil, &perfManager)
perfCounters := perfManager.PerfCounter
counterDetails := make([][]string, 0)
for _, perfCounter := range perfCounters {
groupInfo := perfCounter.GroupInfo.GetElementDescription()
nameInfo := perfCounter.NameInfo.GetElementDescription()
fullName := groupInfo.Key + "." + nameInfo.Key + "." + fmt.Sprint(perfCounter.RollupType)
counterDetails = append(counterDetails, []string{fullName, fmt.Sprint(perfCounter.Level), nameInfo.Summary})
}
outputFile, err := os.Create("performanceCounters.csv")
csvWriter := csv.NewWriter(outputFile)
csvWriter.WriteAll(counterDetails)
if err := csvWriter.Error(); err != nil {
log.Fatalln("error writing csv:", err)
}
}
开发者ID:chrisgreene,项目名称:govmomi-examples,代码行数:51,代码来源:performanceCounters.go
示例10: Initialize
// Initialize establishes a connection to the remote vSphere API endpoint.
func (bv *BaseVSphere) Initialize() error {
bv.ctx, bv.cancel = context.WithCancel(context.Background())
// Connect and login to the VMWare vSphere API endpoint
c, err := govmomi.NewClient(bv.ctx, bv.url, bv.Insecure)
if err != nil {
return err
}
bv.client = c
bv.finder = find.NewFinder(bv.client.Client, true)
return nil
}
开发者ID:dnaeon,项目名称:gru,代码行数:15,代码来源:vsphere.go
示例11: Client
// Client() returns a new client for accessing VMWare vSphere.
func (c *Config) Client() (*govmomi.Client, error) {
u, err := url.Parse("https://" + c.VSphereServer + "/sdk")
if err != nil {
return nil, fmt.Errorf("Error parse url: %s", err)
}
u.User = url.UserPassword(c.User, c.Password)
client, err := govmomi.NewClient(context.TODO(), u, c.InsecureFlag)
if err != nil {
return nil, fmt.Errorf("Error setting up client: %s", err)
}
log.Printf("[INFO] VMWare vSphere Client configured for URL: %s", u)
return client, nil
}
开发者ID:AssertSelenium,项目名称:terraform,代码行数:18,代码来源:config.go
示例12: vsphereLogin
// Returns a client which communicates with vCenter.
// This client can used to perform further vCenter operations.
func vsphereLogin(cfg *VSphereConfig, ctx context.Context) (*govmomi.Client, error) {
// Parse URL from string
u, err := url.Parse(fmt.Sprintf("https://%s:%s/sdk", cfg.Global.VCenterIP, cfg.Global.VCenterPort))
if err != nil {
return nil, err
}
// set username and password for the URL
u.User = url.UserPassword(cfg.Global.User, cfg.Global.Password)
// Connect and log in to ESX or vCenter
c, err := govmomi.NewClient(ctx, u, cfg.Global.InsecureFlag)
if err != nil {
return nil, err
}
return c, nil
}
开发者ID:ncdc,项目名称:kubernetes,代码行数:19,代码来源:vsphere.go
示例13: vsphereLogin
func (d *Driver) vsphereLogin(ctx context.Context) (*govmomi.Client, error) {
// Parse URL from string
u, err := url.Parse(fmt.Sprintf("https://%s:%d/sdk", d.IP, d.Port))
if err != nil {
return nil, err
}
// set username and password for the URL
u.User = url.UserPassword(d.Username, d.Password)
// Connect and log in to ESX or vCenter
c, err := govmomi.NewClient(ctx, u, true)
if err != nil {
return nil, err
}
return c, nil
}
开发者ID:HewlettPackard,项目名称:oneview-golang,代码行数:18,代码来源:vsphere.go
示例14: TestFolderESX
func TestFolderESX(t *testing.T) {
content := esx.ServiceContent
s := New(NewServiceInstance(content, esx.RootFolder))
ts := s.NewServer()
defer ts.Close()
ctx := context.Background()
c, err := govmomi.NewClient(ctx, ts.URL, true)
if err != nil {
t.Fatal(err)
}
f := object.NewRootFolder(c.Client)
_, err = f.CreateFolder(ctx, "foo")
if err == nil {
t.Error("expected error")
}
_, err = f.CreateDatacenter(ctx, "foo")
if err == nil {
t.Error("expected error")
}
finder := find.NewFinder(c.Client, false)
dc, err := finder.DatacenterOrDefault(ctx, "")
if err != nil {
t.Fatal(err)
}
folders, err := dc.Folders(ctx)
if err != nil {
t.Fatal(err)
}
spec := types.HostConnectSpec{}
_, err = addStandaloneHost(folders.HostFolder, spec)
if err == nil {
t.Fatal("expected error")
}
}
开发者ID:jak-atx,项目名称:vic,代码行数:42,代码来源:folder_test.go
示例15: newClient
func newClient(cfg *VSphereConfig, ctx context.Context) (*govmomi.Client, error) {
// Parse URL from string
u, err := url.Parse(fmt.Sprintf("https://%s:%s/sdk", cfg.Global.VCenterIP, cfg.Global.VCenterPort))
if err != nil {
return nil, err
}
// set username and password for the URL
u.User = url.UserPassword(cfg.Global.User, cfg.Global.Password)
// Connect and log in to ESX or vCenter
c, err := govmomi.NewClient(ctx, u, cfg.Global.InsecureFlag)
if err != nil {
return nil, err
}
// Add retry functionality
c.RoundTripper = vim25.Retry(c.RoundTripper, vim25.TemporaryNetworkError(int(cfg.Global.RoundTripperCount)))
return c, nil
}
开发者ID:nak3,项目名称:kubernetes,代码行数:20,代码来源:vsphere.go
示例16: TestDefaultESX
func TestDefaultESX(t *testing.T) {
s := New(NewServiceInstance(esx.ServiceContent, esx.RootFolder))
ts := s.NewServer()
defer ts.Close()
ctx := context.Background()
client, err := govmomi.NewClient(ctx, ts.URL, true)
if err != nil {
t.Fatal(err)
}
finder := find.NewFinder(client.Client, false)
dc, err := finder.DatacenterOrDefault(ctx, "")
if err != nil {
t.Fatal(err)
}
finder.SetDatacenter(dc)
host, err := finder.HostSystemOrDefault(ctx, "*")
if err != nil {
t.Fatal(err)
}
if host.Name() != esx.HostSystem.Summary.Config.Name {
t.Fail()
}
pool, err := finder.ResourcePoolOrDefault(ctx, "*")
if err != nil {
t.Fatal(err)
}
if pool.Name() != "Resources" {
t.Fail()
}
}
开发者ID:vmware,项目名称:vic,代码行数:40,代码来源:host_system_test.go
示例17: TestCreateVm
func TestCreateVm(t *testing.T) {
ctx := context.Background()
for _, model := range []*Model{ESX(), VPX()} {
defer model.Remove()
err := model.Create()
if err != nil {
t.Fatal(err)
}
s := model.Service.NewServer()
defer s.Close()
c, err := govmomi.NewClient(ctx, s.URL, true)
if err != nil {
t.Fatal(err)
}
spec := types.VirtualMachineConfigSpec{
// Note: real ESX allows the VM to be created without a GuestId,
// but will power on will fail.
GuestId: string(types.VirtualMachineGuestOsIdentifierOtherGuest),
}
steps := []func(){
func() {
spec.Name = "test"
},
func() {
spec.Files = &types.VirtualMachineFileInfo{
VmPathName: fmt.Sprintf("[LocalDS_0] %s/%s.vmx", spec.Name, spec.Name),
}
},
}
finder := find.NewFinder(c.Client, false)
dc, err := finder.DefaultDatacenter(ctx)
if err != nil {
t.Fatal(err)
}
finder.SetDatacenter(dc)
folders, err := dc.Folders(ctx)
if err != nil {
t.Fatal(err)
}
hosts, err := finder.HostSystemList(ctx, "*/*")
if err != nil {
t.Fatal(err)
}
nhosts := len(hosts)
host := hosts[rand.Intn(nhosts)]
pool, err := host.ResourcePool(ctx)
if err != nil {
t.Fatal(err)
}
if nhosts == 1 {
// test the default path against the ESX model
host = nil
}
vmFolder := folders.VmFolder
// expecting CreateVM to fail until all steps are taken
for _, step := range steps {
task, cerr := vmFolder.CreateVM(ctx, spec, pool, host)
if cerr != nil {
t.Fatal(err)
}
_, cerr = task.WaitForResult(ctx, nil)
if cerr == nil {
t.Error("expected error")
}
step()
}
task, err := vmFolder.CreateVM(ctx, spec, pool, host)
if err != nil {
t.Fatal(err)
}
info, err := task.WaitForResult(ctx, nil)
if err != nil {
t.Fatal(err)
}
vm := object.NewVirtualMachine(c.Client, info.Result.(types.ManagedObjectReference))
name, err := vm.ObjectName(ctx)
if err != nil {
t.Fatal(err)
}
if name != spec.Name {
//.........这里部分代码省略.........
开发者ID:kjplatz,项目名称:vic,代码行数:101,代码来源:virtual_machine_test.go
示例18: TestServeHTTPErrors
func TestServeHTTPErrors(t *testing.T) {
s := New(NewServiceInstance(esx.ServiceContent, esx.RootFolder))
ts := s.NewServer()
defer ts.Close()
ctx := context.Background()
client, err := govmomi.NewClient(ctx, ts.URL, true)
if err != nil {
t.Fatal(err)
}
// unregister type, covering the ServeHTTP UnmarshalBody error path
typeFunc = func(name string) (reflect.Type, bool) {
return nil, false
}
_, err = methods.GetCurrentTime(ctx, client)
if err == nil {
t.Error("expected error")
}
typeFunc = types.TypeFunc() // reset
// cover the does not implement method error path
Map.objects[serviceInstance] = &errorNoSuchMethod{}
_, err = methods.GetCurrentTime(ctx, client)
if err == nil {
t.Error("expected error")
}
// cover the xml encode error path
Map.objects[serviceInstance] = &errorMarshal{}
_, err = methods.GetCurrentTime(ctx, client)
if err == nil {
t.Error("expected error")
}
// cover the no such object path
Map.Remove(serviceInstance)
_, err = methods.GetCurrentTime(ctx, client)
if err == nil {
t.Error("expected error")
}
// verify we properly marshal the fault
fault := soap.ToSoapFault(err).VimFault()
f, ok := fault.(types.ManagedObjectNotFound)
if !ok {
t.Fatalf("fault=%#v", fault)
}
if f.Obj != serviceInstance.Reference() {
t.Errorf("obj=%#v", f.Obj)
}
// cover the method not supported path
res, err := http.Get(ts.URL.String())
if err != nil {
log.Fatal(err)
}
if res.StatusCode != http.StatusMethodNotAllowed {
t.Errorf("expected status %d, got %s", http.StatusMethodNotAllowed, res.Status)
}
// cover the ioutil.ReadAll error path
s.readAll = func(io.Reader) ([]byte, error) {
return nil, io.ErrShortBuffer
}
res, err = http.Post(ts.URL.String(), "none", nil)
if err != nil {
log.Fatal(err)
}
if res.StatusCode != http.StatusBadRequest {
t.Errorf("expected status %d, got %s", http.StatusBadRequest, res.Status)
}
}
开发者ID:jak-atx,项目名称:vic,代码行数:78,代码来源:simulator_test.go
示例19: doRegistration
func doRegistration(ui packer.Ui, config Config, vmx string, clonerequired bool) error {
sdkURL, err := url.Parse(fmt.Sprintf("https://%s:%[email protected]%s/sdk",
url.QueryEscape(config.Username),
url.QueryEscape(config.Password),
config.Host))
if err != nil {
return err
}
client, err := govmomi.NewClient(context.TODO(), sdkURL, true)
if err != nil {
return err
}
finder := find.NewFinder(client.Client, false)
datacenter, err := finder.DefaultDatacenter(context.TODO())
finder.SetDatacenter(datacenter)
if err != nil {
return err
}
folders, err := datacenter.Folders(context.TODO())
if err != nil {
return err
}
resourcePool, err := finder.DefaultResourcePool(context.TODO())
if err != nil {
return err
}
splitString := strings.Split(vmx, "/")
last := splitString[len(splitString)-1]
vmName := strings.TrimSuffix(last, ".vmx")
datastoreString := fmt.Sprintf("[%s] %s/%s.vmx", config.Datastore, config.VMFolder, vmName)
ui.Message(fmt.Sprintf("Registering %s from %s", vmName, datastoreString))
task, err := folders.VmFolder.RegisterVM(context.TODO(), datastoreString, vmName, false, resourcePool, nil)
if err != nil {
return err
}
_, err = task.WaitForResult(context.TODO(), nil)
if err != nil {
return err
}
ui.Message(fmt.Sprintf("Registererd VM %s", vmName))
vm, err := finder.VirtualMachine(context.TODO(), vmName)
rpRef := resourcePool.Reference()
if clonerequired {
cloneSpec := types.VirtualMachineCloneSpec{
Location: types.VirtualMachineRelocateSpec{
Pool: &rpRef,
},
}
cloneVmName := fmt.Sprintf("%s-vm", vmName)
ui.Message(fmt.Sprintf("Cloning VM %s", cloneVmName))
task, err = vm.Clone(context.TODO(), folders.VmFolder, cloneVmName, cloneSpec)
if err != nil {
return err
}
_, err = task.WaitForResult(context.TODO(), nil)
if err != nil {
return err
}
clonedVM, err := finder.VirtualMachine(context.TODO(), cloneVmName)
if err != nil {
return err
}
ui.Message(fmt.Sprintf("Powering on %s", cloneVmName))
task, err = clonedVM.PowerOn(context.TODO())
if err != nil {
return err
}
_, err = task.WaitForResult(context.TODO(), nil)
if err != nil {
return err
}
ui.Message(fmt.Sprintf("Powered on %s", cloneVmName))
timeout := time.After(5 * time.Minute)
tick := time.Tick(500 * time.Millisecond)
//.........这里部分代码省略.........
开发者ID:bcorner13,项目名称:packer-post-processor-vsphere-ova,代码行数:101,代码来源:post-processor.go
示例20: doRegistration
func doRegistration(ui packer.Ui, config Config, vmx string, clonerequired bool) (err error) {
sdkURL, err := url.Parse(fmt.Sprintf("https://%s:%[email protected]%s/sdk",
url.QueryEscape(config.Username),
url.QueryEscape(config.Password),
config.Host))
if err != nil {
return err
}
client, err := govmomi.NewClient(context.TODO(), sdkURL, true)
if err != nil {
return err
}
finder := find.NewFinder(client.Client, false)
datacenter, err := finder.DefaultDatacenter(context.TODO())
finder.SetDatacenter(datacenter)
if err != nil {
return err
}
folders, err := datacenter.Folders(context.TODO())
if err != nil {
return err
}
resourcePool, err := finder.DefaultResourcePool(context.TODO())
if err != nil {
return err
}
splitString := strings.Split(vmx, "/")
last := splitString[len(splitString)-1]
vmName := strings.TrimSuffix(last, ".vmx")
datastoreString := fmt.Sprintf("[%s] %s/%s.vmx", config.Datastore, config.VMFolder, vmName)
ui.Message(fmt.Sprintf("Registering %s from %s", vmName, datastoreString))
task, err := folders.VmFolder.RegisterVM(context.TODO(), datastoreString, vmName, false, resourcePool, nil)
if err != nil {
return err
}
_, err = task.WaitForResult(context.TODO(), nil)
if err != nil {
return err
}
ui.Message(fmt.Sprintf("Registererd VM %s", vmName))
vm, err := finder.VirtualMachine(context.TODO(), vmName)
rpRef := resourcePool.Reference()
if clonerequired {
cloneSpec := types.VirtualMachineCloneSpec{
Location: types.VirtualMachineRelocateSpec{
Pool: &rpRef,
},
}
cloneVmName := fmt.Sprintf("%s-vm", vmName)
ui.Message(fmt.Sprintf("Cloning VM %s", cloneVmName))
task, err = vm.Clone(context.TODO(), folders.VmFolder, cloneVmName, cloneSpec)
if err != nil {
return err
}
_, err = task.WaitForResult(context.TODO(), nil)
if err != nil {
return err
}
clonedVM, err := finder.VirtualMachine(context.TODO(), cloneVmName)
if err != nil {
return err
}
ui.Message(fmt.Sprintf("Powering on %s", cloneVmName))
task, err = clonedVM.PowerOn(context.TODO())
if err != nil {
return err
}
_, err = task.WaitForResult(context.TODO(), nil)
if err != nil {
return err
}
ui.Message(fmt.Sprintf("Powered on %s", cloneVmName))
time.Sleep(150000 * time.Millisecond) // This is really dirty, but I need to make sure the VM gets fully powered on before I turn it off, otherwise vmware tools won't register on the cloning side.
ui.Message(fmt.Sprintf("Powering off %s", cloneVmName))
//.........这里部分代码省略.........
开发者ID:daxgames,项目名称:packer-post-processor-vsphere-ova,代码行数:101,代码来源:post-processor.go
注:本文中的github.com/vmware/govmomi.NewClient函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论