1、vmware虚拟机操作
package vmware
import (
"context"
"errors"
"fmt"
"github.com/vmware/govmomi"
"github.com/vmware/govmomi/object"
"github.com/vmware/govmomi/view"
"github.com/vmware/govmomi/vim25"
"github.com/vmware/govmomi/vim25/mo"
"net/url"
)
var ctx = context.Background()
// 链接vmware
func NewClient(ip,user,pwd string) *vim25.Client{
u := &url.URL{
Scheme: "https",
Host: ip,
Path: "/sdk",
}
//ctx := context.Background()
u.User = url.UserPassword(user, pwd)
client, err := govmomi.NewClient(ctx, u, true)
if err != nil {
panic(err)
}
return client.Client
}
//查找虚拟机by name
func FindVMByName(c *vim25.Client, vmName string) (*object.VirtualMachine,error){
m := view.NewManager(c)
v, err := m.CreateContainerView(ctx, c.ServiceContent.RootFolder, []string{"VirtualMachine"}, true)
if err != nil {
panic(err)
}
defer v.Destroy(ctx)
var vms []mo.VirtualMachine
err = v.Retrieve(ctx, []string{"VirtualMachine"}, []string{"summary"}, &vms)
if err != nil {
panic(err)
}
var vmware *object.VirtualMachine
for _, vm := range vms {
// 虚拟机名称是否相同,相同的话,vm 就是查找到主机
if vm.Summary.Config.Name == vmName {
fmt.Printf("%s: %s\n", vm.Summary.Config.Name, vm.Summary.Config.GuestFullName)
vmw := object.NewVirtualMachine(c, vm.Reference())
return vmw,nil
}
}
return vmware,errors.New("虚拟机不存在!")
}
//关机
func PowerOff(vm *object.VirtualMachine){
task,err:=vm.PowerOff(ctx)
if err!=nil{
panic("关机失败:err="+err.Error())
}
if e := task.Wait(ctx);e!=nil{
panic(e)
}
}
// 开机
func PowerOn(vm *object.VirtualMachine){
task,err:=vm.PowerOn(ctx)
if err!=nil{
panic("开机失败:err="+err.Error())
}
if e := task.Wait(ctx);e!=nil{
panic(e)
}
}
//创建快照
func CreateSnapShot(vm *object.VirtualMachine,name,desc string) error{
task, err := vm.CreateSnapshot(ctx, name, desc, false, false)
if err != nil {
return err
}
if err = task.Wait(ctx); err != nil {
return err
}
return nil
}
//恢复快照
func RecoverToSnapshot(vm *object.VirtualMachine,name string, suppressPowerOn bool) error{
task,err:=vm.RevertToSnapshot(ctx,name,suppressPowerOn)
if err != nil {
return err
}
if err = task.Wait(ctx); err != nil {
return err
}
return nil
}
\