/var/log/study

つまり雑記

GUIを触らずにvSphereを操作するためのgovcレシピ

この記事はFJCT アドベントカレンダー 2019の初日の記事です。

明日は @zombeanさんの FJCTで知ったもの、身についたものいろいろ書こうと思います となります。

さて。本日はニフクラの運用メンバーらしくvSphere周りとして、GUIを触らずにvSphereを操作するためのgovcレシピをいくつか書き残します。 本記事のターゲットはgovcを触ったことがある程度の人です。触れない人はこの記事の前半として、GUIを触らずにvSphereを操作するためのgovc入門とtips を書いたので読んでほしいです。

2019年に利用したgovcコマンドの備忘録的な側面が強いので、網羅性はありませんし、普段govcを使っている人にとって目新しいことは無いですが書いていきます。

以下は別解答が多数あると思われます。 (もとイケてる方法があるじゃん!と思った場合 一緒にIaaSを作りましょう!!!)

複数の操作対象があるパターン

ケースにもよると思いますが以下のようなことをすることが多いです。

govc find ${cond} | xargs govc ${operation}

VMの電源on, off

VMの電源on, off自体は govc vm.power でできるのだけど。 使いそうなオプションとしていくつかあり、 -offでパワーオフ, -onでパワーオン、-s でシャットダウン、-wait で電源の上げ下げのタスク完了を待つなどのオプションがついている。 -M オプションは複数のVMを一度に電源on できるオプション

以下は電源を上げるケース

govc find . -type m -name "${VM-NAME}" | xargs govc vm.power -on -M=true

以下はシャットダウンのケース

govc find . -type m -name "${VM-NAME}" | xargs govc vm.power -s -wait=false

VMのデバイス情報を引く

VMのデバイスの情報はgovc vm.info でも引けるが、 device.info を利用するほうが良い。

govc device.info -json -vm `govc find -type m  -name="${VM-NAME}"` | jq .

以下は vm.info のときのjson。DeviceのTypeがなくてどれがどのデバイスか?を機械的に判別するのが難しい。

        "Hardware": {
          "NumCPU": 1,
          "NumCoresPerSocket": 1,
          "MemoryMB": 32,
          "VirtualICH7MPresent": null,
          "VirtualSMCPresent": null,
          "Device": [
            {
              "Key": 200,
              "DeviceInfo": {
                "Label": "IDE 0",
                "Summary": "IDE 0"
              },
              "Backing": null,
              "Connectable": null,
              "SlotInfo": null,
              "ControllerKey": 0,
              "UnitNumber": null,
              "BusNumber": 0,
              "Device": null
            },

以下は device.info を引いたときのjson。DeviceのTypeがあるので機械的判別がしやすい。

{
  "Devices": [
    {
      "Name": "ide-200",
      "Type": "VirtualIDEController",
      "Key": 200,
      "DeviceInfo": {
        "Label": "IDE 0",
        "Summary": "IDE 0"
      },
      "Backing": null,
      "Connectable": null,
      "SlotInfo": null,
      "ControllerKey": 0,
      "UnitNumber": null,
      "BusNumber": 0,
      "Device": null
    },

あるホスト上の電源オン状態のVMのインベントリパス

ホスト名を調べておいた上で以下のコマンドを叩くと、あるホストの上にいるpowerdOnVMのインベントリパスがとれます。

govc find -i . -type h -name ${HOST-NAME} | xargs -Ih govc find . -type m -runtime.powerState poweredOn -runtime.host h

あるホスト上の電源オン状態のVMの情報収集

上のヤツに更にvm.infoをつなげるパターンです。更に vm.info -json を使ってjqで絞り込むパターンがあると思います。

govc find -i . -type h -name ${HOST-NAME} | xargs -Ih govc find . -type m -runtime.powerState poweredOn -runtime.host h | xargs govc vm.info

クラスタにあるESXiのリストを取得する

あるクラスタに所属するESXiを調べる方法はいくつかあるのですが、これが一番簡単な気がします。 これも host.info につなげる方法があるかな?と思います。

govc find . -type c -name ${ClusterName} | xargs govc ls -t HostSystem

データストアの残容量順に並べる

どのデータストアが一番残っているか?はたまに気にしたい事項だと思っていて、以下のような方法で引けます。

govc datastore.info -json | jq '.Datastores[].Info| [(.FreeSpace|tostring),.Name]  | join(" ")' -r | sort -n

あるデータストアを消費している順にVMを調べる

これの方法が見つけられていないのが残念

あるvCenter配下のデータストアのタイプ一覧

あまり無いと思うが、datastore.infoつながりで、こんな感じでvC配下のデータストアのタイプが調べられます。

govc datastore.info -json | jq '.Datastores[] | [.Info.Name, .Summary.Type] | @csv' -r

あるESXiのオプションを調べる方法

たまにESXi側の設定を一括で調べたいことがあり、以下のコマンドを gocv find . -i -type h と組み合わせて使うことがある。

govc host.option.ls --host=${InventoryPath} ${OptionName}

あるESXiのサービスを調べる方法

オプションと同じ要領で、サービスも調べられそう.

govc host.service.ls --host=${InventoryPath} ${OptionName}

あるESXiのvibのリストを調べる

govc host.info では見れなさそうなのでesxcliで直接叩きに行く

govc host.esxcli softoware vib list

アドベントカレンダーに向けて書けたのはここまでなのでまたgovcをパチパチと叩いたら追記します。