Mackerel で mkr を使用した CLI 操作の続きです。 ホスト一覧取得と退役操作を行います。
hosts
ホスト一覧を取得します。ホストを対象とする操作を行う際のidを抽出する為に使用します。
オプション
オプション | ロングオプション | 説明 |
---|---|---|
-n | --name | ホスト名で検索。 完全一致。 |
-s | --service | サービス名で検索 |
-r | --role | ロール名で検索。複数指定可。 サービス未指定だと無視。 |
-st | --status | ステータスで検索。複数指定可。デフォルト working もしくは standby。 |
-f | --format | 出力フォーマット指定 |
-v | --verbose | 詳細表示 |
-f | --format
READMEを参照すると以下の様な指定方法のようです。mkrはjqと組み合わせて使う事が多いので、固有の指定方法ではなく、jq側でフォーマット調整をすることになりそうです。
mkr hosts -f '{{range .}}{{if (len .Interfaces)}}{{(index .Interfaces 0).IPAddress}}{{end}}{{"\t"}}{{.Name}}{{"\n"}}{{end}}'
id 抽出
READMEを真似て id を抜き出してみると以下のようになります。
$ mkr hosts -f '{{range .}}{{.ID}}{{"\n"}}{{end}}' XXXXXXXXes1 XXXXXXXXWNU XXXXXXXXAJd ・・・略・・・
素直に jq 使用
私はjqの方が慣れているのでこちらを使用すると思います。
mkr hosts | jq -r '.[].id'
-v | --verbose
オプション無し
$ mkr hosts -n ip-172-31-3-172 [ { "id": "XXXXXXXX37m", "name": "ip-172-31-3-172", "status": "working", "roleFullnames": [ "test:testrole" ], "isRetired": false, "createdAt": "Mar 23, 2016 at 4:39pm (JST)", "ipAddresses": { "eth0": "172.31.3.172" } } ]
オプション有り
オプション無しの出力と出力形式が変わり、CPUやメモリ情報が追加されます。
createAt はUNIXTIMEになるのでスクリプト等で使用する場合はこちらの方が扱い易いと思います。
- 長いので所々省略
$ mkr hosts -n ip-172-31-3-172 -v [ { "id": "XXXXXXXX37m", "name": "ip-172-31-3-172", "type": "unknown", "status": "working", "roles": { "test": [ "testrole" ] }, "createdAt": 1458718748, "meta": { "agent-revision": "7d278aa", "agent-version": "0.30.0", "block_device": { "loop0": { "removable": "0", "size": "0" }, ・・・略・・・ "ram0": { "removable": "0", "size": "131072" }, ・・・略・・・ "xvda": { "removable": "0", "size": "16777216" } }, "cpu": [ { "cache_size": "25600 KB", "core_id": "0", "cores": "1", "family": "6", "mhz": "2500.066", "model": "62", "model_name": "Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz", "physical_id": "0", "stepping": "4", "vendor_id": "GenuineIntel" } ], "filesystem": { "/dev/xvda1": { "kb_available": 5.8507e+06, "kb_size": 8.115168e+06, "kb_used": 1.829192e+06, "mount": "/", "percent_used": "24%" }, ・・・略・・・ }, "kernel": { "machine": "x86_64", "name": "Linux", "os": "GNU/Linux", "release": "3.13.0-48-generic", "version": "#80-Ubuntu SMP Thu Mar 12 11:16:15 UTC 2015" }, "memory": { "active": "474800kB", "anon_pages": "55116kB", "bounce": "0kB", "buffers": "136852kB", "cached": "482840kB", ・・・略・・・ "writeback": "0kB" } }, "interfaces": [ { "name": "eth0", "ipAddress": "172.31.3.172", "macAddress": "00:00:00:00:00:7d" } ] } ]
retire
ホストの退役を行います。 オプションは --force のみで、違いは y/n プロンプトの有無です。
USAGE: mkr retire hostIds...
オプション有無
オプション未指定では y/n を聞いてきます。
# forceオプション無 $ mkr retire XXXXXXXXCVE Retire following hosts. XXXXXXXXCVE Are you sure? (y/n) [y]: y retired XXXXXXXXCVE # forceオプション有 $ mkr retire --force XXXXXXXXHwG retired XXXXXXXXHwG
キャンセル (n押下)
明示的に "n" を指定しないと、 "y" を指定した際と同じ動作です。
# n 押下でキャンセル $ mkr retire XXXXXXXX1N5 Retire following hosts. XXXXXXXX1N5 Are you sure? (y/n) [y]: n retirement is canceled. # n 以外押下だと y 押下と同様に削除 $ mkr retire XXXXXXXX1N5 Retire following hosts. XXXXXXXX1N5 Are you sure? (y/n) [y]: retired XXXXXXXX1N5
複数指定
スペース区切りで複数指定が可能です。
% mkr retire XXXXXXXXUmG XXXXXXXXrdm Retire following hosts. XXXXXXXXUmG XXXXXXXXrdm Are you sure? (y/n) [y]: retired XXXXXXXXUmG retired XXXXXXXXrdm
PowerOffを全てretire
hosts コマンドから id を抽出して削除する例です。
mkr retire --force $(mkr hosts --status poweroff | jq -r '.[].id' | tr '\n' ' ')
ホストの退役はWeb画面上からだと1ホストずつしか行えないため、一括退役をさせる場合に非常に便利です。
おそらく次回に続きます