概要
前回 vic-machine ls コマンドをコードから実行してみました
今回は vic-machine delete コマンドをコードから実行してみました
環境
- Ubuntu 16.04
- golang 1.8.1
- vic 0.9.0
delete を実行するコードの作成
- mkdir /path/to/work
- cd /path/to/work
- vim my_vic_delete.go
package main
import (
"context"
"fmt"
"github.com/vmware/vic/lib/install/data"
"github.com/vmware/vic/lib/install/management"
"github.com/vmware/vic/lib/install/validate"
"github.com/vmware/vic/pkg/vsphere/vm"
"net/url"
)
type Delete struct {
Data *data.Data
executor *management.Dispatcher
}
func NewDelete() (d *Delete, err error) {
d = new(Delete)
d.Data = data.NewData()
u, err := url.Parse("https://192.168.100.101/dc")
if err != nil {
return d, err
}
d.Data.Target.URL = u
l.Data.Target.User = "vcenter_username"
p := "vcenter_password"
d.Data.Target.Password = &p
l.Data.Target.Thumbprint = "F9:xx:xx:..."
d.Data.Force = true
err = d.Data.Target.HasCredentials()
if err != nil {
return d, err
}
//d.Data.ID = "vm-100"
d.Data.DisplayName = "vch001"
d.Data.ComputeResourcePath = "rp-1"
//d.Data.Force = true
return d, nil
}
func (d *Delete) Run() (err error) {
ctx, cancel := context.WithTimeout(context.Background(), d.Data.Timeout)
defer cancel()
validator, err := validate.NewValidator(ctx, d.Data)
if err != nil {
return err
}
validator.AllowEmptyDC()
executor := management.NewDispatcher(validator.Context, validator.Session, nil, false)
var vch *vm.VirtualMachine
if d.Data.ID != "" {
vch, err = executor.NewVCHFromID(d.Data.ID)
} else {
vch, err = executor.NewVCHFromComputePath(d.Data.ComputeResourcePath, d.Data.DisplayName, validator)
}
fmt.Println(vch)
vchConfig, err := executor.GetVCHConfig(vch)
if err != nil {
return err
}
err = executor.DeleteVCH(vchConfig)
if err != nil {
executor.CollectDiagnosticLogs()
return err
}
return nil
}
func main() {
d, err := NewDelete()
if err != nil {
fmt.Println(err)
}
err = d.Run()
if err != nil {
fmt.Println(err)
}
}
- go fmt my_vic_delete.go
- go run my_vic_delete.go
d.Data.ID
で ID を指定するか d.Data.DisplayName
と d.Data.ComputeResourcePath
を vch までの名前とパスを使って指定します
どちらでも OK ですが個人的にはパスで指定する方法をオススメします
パスがわかっていれば govmomi を使って直接 VM に対しても操作できるからです
Force が true になっている場合は vch 上のコンテナが起動中でも強制的に削除してくれます
解説
config して実行の流れは前回と同じです
delete のときのほうが指定するパラメータが増えているので注意してください
ID や DisplayName は ls を実行したときに取得できます
まず executor.NewVCHFromID
で vch の情報を取得します
そして、それを元に executor.DeleteVCH
をコールすることで vch を削除してくれる他、付属のネットワークとストレージも削除してくれます
executor.CollectDiagnosticLogs
で CLI 用のデバッグログを出力してくれます
最後に
vic-machine delete コマンドをコードから実行してみました
delete も結構簡単にできました
あとは inspect あたりができるなるといいかなという感じです
0 件のコメント:
コメントを投稿