2017年4月27日木曜日

vic-machine inspect で取得できる vch のエンドポイントの情報をコードから取得してみた

概要

前回 ls コマンドをコードから実行しました
今回は ls の追加として inspect を実装します
inspect は docker のエンドポイントを取得するためのコマンドです
ls で取得した vch を for ループで回して各 vch のエンドポイントを取得してみます

環境

  • Ubuntu 16.04
  • golang 1.8.1
  • vic 0.9.0

inspect のように vch からエンドポイントを取得するコード

  • vim my_vic_ls.go
github.com/docker/docker/opts

上記を import に追加します

for _, vch := range vchs {
        c, err := executor.GetVCHConfig(vch)
        if err != nil {
                return err
        }
        cip := c.ExecutorConfig.Networks["client"].Assigned.IP
        fmt.Println(cip)
        pip := c.ExecutorConfig.Networks["public"].Assigned.IP
        fmt.Println(pip)
        if !c.HostCertificate.IsNil() {
                fmt.Println(opts.DefaultTLSHTTPPort)
        } else {
                fmt.Println(opts.DefaultHTTPPort)
        }
        if c.IsCreating() {
                fmt.Println("ng")
        } else {
                fmt.Println("ok")
        }
}

これを Run メソッドの executor.SearchVCHs の後に追加すれば OK です
vch の config 情報を executor.GetVCHConfig で取得できるのでその config に対して c.ExecutorConfig.Networks["client"].Assigned.IP でエンドポイントを取得します
Networks はスライスになっているのでネットワーク名を指定することで必要な IP アドレスを取得できます
普通は client or public が docker のエンドポイント用の IP アドレスになっているのでどちらかを取得すれば OK かなと思います

また、c.HostCertificate を判定することで vch のエンドポイントが ssl 用のポートかそうでないかを表示してあげます

vch が作成できたかどうかは IsCreating というメソッドがあるのでこれで判定します

最後に

inspect で取得できるエンドポイントの情報をコードから取得してみました
ls のコードに追加するだけで inspect の情報も取得できるようにしました

参考サイト

0 件のコメント:

コメントを投稿