概要
vCenter 配下で管理されている VApp の情報を govmomi を使って取得してみます
環境
- Ubuntu 16.04
- golang 1.8
- govmomi 0.14.0
ソースコード
- vim main.go
package main
import (
"context"
"flag"
"fmt"
"net/url"
"os"
"github.com/vmware/govmomi"
"github.com/vmware/govmomi/find"
"github.com/vmware/govmomi/property"
"github.com/vmware/govmomi/vim25/mo"
"github.com/vmware/govmomi/vim25/types"
)
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_pass")
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)
// 全 VirtualApp の取得
pc := property.DefaultCollector(c.Client)
varefs := []types.ManagedObjectReference{}
vas, err := f.VirtualAppList(ctx, "*")
if err != nil {
fmt.Println(err)
os.Exit(1)
}
for _, va := range vas {
fmt.Println(va.Common.InventoryPath)
varefs = append(varefs, va.Reference())
}
var vadst []mo.VirtualApp
err = pc.Retrieve(ctx, varefs, nil, &vadst)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
for _, va := range vadst {
fmt.Println(va.VAppConfig.Annotation)
fmt.Println(va.VAppConfig.EntityConfig) // VApp 内の VM の情報
fmt.Println(va.Name)
}
}
まず vCenter に接続しデータセンターの情報を取得します
その後 f.VirtualAppList を使ってすべての VApp の情報を取得します
取得後は types.ManagedObjectReference に突っ込んで pc.Retrieve することで VApp の情報を取得しています
あとは types.ManagedObjectReference に設定された値をループで回して参照しているだけです
VApp の場合 VApp 内に VM が存在することがあると思います
VApp 内の子の要素を参照するには EntityConfig を使えば参照できそうだったので、そこから VM の情報を取得できると思います
VApp の別の情報を参照したい場合は以下を参照してください
https://godoc.org/github.com/vmware/govmomi/vim25/mo#VirtualApp
最後に
govmomi を使って VApp の情報を参照していました
これまで紹介したフォルダや VM を取得する方法とほぼ同じなので特に躓くところはありませんでした
0 件のコメント:
コメントを投稿