概要
govmomi を使って VM の情報を取得します
その際に ManagedObjectReference の moid を取得してみます
環境
- Ubuntu 16.04
- golang 1.8
- govmomi 0.14.0
事前準備
ライブラリのインストールなどは過去の記事を参考にしてください
https://hawksnowlog.blogspot.jp/2017/04/try-vmware-govmomi.html
ソースコード
- vim get_vm_moid.go
package main
import (
"context"
"flag"
"fmt"
"net/url"
"os"
"github.com/vmware/govmomi"
"github.com/vmware/govmomi/find"
"github.com/vmware/govmomi/vim25/types"
"github.com/vmware/govmomi/property"
"github.com/vmware/govmomi/vim25/mo"
)
var envURL = "https://192.168.100.101/sdk"
var urlDescription = fmt.Sprintf("ESX or vCenter URL [%s]", envURL)
var urlFlag = flag.String("url", envURL, urlDescription)
var envInsecure = true
var insecureDescription = fmt.Sprintf("Don't verify the server's certificate chain [%s]", envInsecure)
var insecureFlag = flag.Bool("insecure", envInsecure, insecureDescription)
func main() {
// vCenter への接続
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
flag.Parse()
u, err := url.Parse(*urlFlag)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
u.User = url.UserPassword("vcenter-user", "vcenter-password")
c, err := govmomi.NewClient(ctx, u, *insecureFlag)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
fmt.Println(c.Client.Client.Version)
// データセンターの取得
f := find.NewFinder(c.Client, true)
dc, err := f.DefaultDatacenter(ctx)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
f.SetDatacenter(dc)
fmt.Println(dc)
// VM の検索
pc := property.DefaultCollector(c.Client)
refs := []types.ManagedObjectReference{}
vss, err := f.VirtualMachineList(ctx, "/dc/vm/folder/folder2/target_vm")
if err != nil {
fmt.Println(err)
os.Exit(1)
}
for _, vs := range vss {
fmt.Println(vs.Common.InventoryPath)
refs = append(refs, vs.Reference())
}
var vdst []mo.VirtualMachine
err = pc.Retrieve(ctx, refs, nil, &vdst)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
for _, vs := range vdst {
fmt.Println(vs.Self.Value) // <- これで moid を取得できる
fmt.Println(vs.Summary.Guest.GuestId)
fmt.Println(vs.Summary.Guest.GuestFullName)
fmt.Println(vs.Summary.Guest.HostName)
fmt.Println(vs.Summary.Guest.IpAddress)
fmt.Println(vs.Summary.Config.Name)
fmt.Println(vs.Summary.Config.VmPathName)
fmt.Println(vs.Summary.Config.MemorySizeMB)
fmt.Println(vs.Summary.Config.NumCpu)
}
}
ポイントは最後の vs.Self.Value
です
これで moid が取得できます
フィールド名が Value なので moid だと名前から推測できないのでわかりづらいです
0 件のコメント:
コメントを投稿