Edited at

usacloudで様々な出力形式を使ってみる(Go言語のtext/templateなど)

More than 1 year has passed since last update.

usacloud_logo_h.png

さくらのクラウド CLI 「usacloud」では以下のような様々な出力形式に対応しています。


  • table形式(デフォルト)

  • CSV

  • TSV

  • JSON

  • ID(など)のみ

  • カスタム(Go言語のtext/templateで指定)

このうちカスタム形式では、dockerコマンドなどと同じくGo言語のtext/templateを利用して出力フォーマットを定義することが可能です。

今回は出力形式の切り替え方やtext/templateでのカスタム出力形式の使い方を紹介します。


出力形式の切り替え

コマンドのオプションを指定することで出力形式を切り替えます。


table形式

デフォルトはtable形式です。


table形式の例

#デフォルト(table形式)

$ usacloud server ls

+--------------+-------------+-----+--------+------------------+--------+
| ID | Name | CPU | Memory | IPAddress | Status |
+--------------+-------------+-----+--------+------------------+--------+
| 123456789001 | GoDev01 | 2 | 4096MB | 192.2.100.101/24 | up |
| 123456789002 | GoDev02 | 2 | 4096MB | 192.2.100.102/24 | down |
| 123456789003 | GoDev03 | 2 | 4096MB | 192.2.100.103/24 | down |
+--------------+-------------+-----+--------+------------------+--------+



CSV/TSV形式

--output-typeオプション(エイリアス:--out)を指定することでCSV/TSV/JSONへ切り替え可能です。


CSV_or_TSV形式の例

# CSV

$ usacloud server ls --out csv

RowNumber,ID,Availability,CreatedAt,Description,[...省略...]
1,123456789001,available,2017-01-23T01:23:45+09:00,desc1,[...省略...]
2,123456789002,available,2017-01-23T01:23:45+09:00,desc2,[...省略...]
3,123456789003,available,2017-01-23T01:23:45+09:00,desc3,[...省略...]

# TSV
$ usacloud server ls --out csv

RowNumber ID Availability CreatedAt Description [...省略...]
1 123456789001 available 2017-01-23T01:23:45+09:00 desc1 [...省略...]
2 123456789002 available 2017-01-23T01:23:45+09:00 desc2 [...省略...]
3 123456789003 available 2017-01-23T01:23:45+09:00 desc3 [...省略...]


--columnオプション(エイリアス:--col)を指定することで出力する列を限定できます。


CSV_or_TSV形式_列を限定する例

# CSV

$ usacloud server ls --out csv --col ID --col Name

ID,Name
123456789001,GoDev01
123456789002,GoDev02
123456789003,GoDev03

# TSV
$ usacloud server ls --out csv

ID Name
123456789001 GoDev01
123456789002 GoDev02
123456789003 GoDev03



JSON形式

--output-typeオプション(エイリアス:--out)を指定することでCSV/TSV/JSONへ切り替え可能です。


JSON形式の例

# JSON

$ usacloud server ls --out json

[
{
"ID": "123456789001",
"Name": "GoDev01",
"Description": "desc1",
(省略)
},
{
"ID": "123456789002",
"Name": "GoDev02",
"Description": "desc2",
(省略)
},
{
"ID": "123456789003",
"Name": "GoDev03",
"Description": "desc3",
(省略)
}
]


JSONなのでjqなどと組み合わせることも可能です。


JSON_jqと組み合わせ

# CSV

$ usacloud server ls --out json | jq '.[] | {"id":.ID, "name":.Name, "ipaddress":.Interfaces[0].IPAddress}'
{
"id": 123456789001,
"name": "GoDev01",
"ipaddress": "192.2.100.101"
}
{
"id": 123456789002,
"name": "GoDev02",
"ipaddress": "192.2.100.102"
}
{
"id": 123456789003,
"name": "GoDev03",
"ipaddress": "192.2.100.103"
}


IDのみ出力

--quietオプション(エイリアス:-q)を指定すると、対象のIDのみ出力できます。

主に他のコマンドとの連携などで利用します。


IDのみ出力する例

# IDのみ出力

$ usacloud server ls -q

123456789001
123456789002
123456789003



カスタム形式

--formatオプション、または--format-fileオプションで任意のカスタム形式を指定可能です。

形式はGo言語のtext/template構文で記述します。


カスタム形式の例

# --formatオプションでコマンドラインからテンプレートを指定

$ usacloud server ls --format "ID is {{.ID}}, Name is {{.Name}}"

ID is 123456789001, Name is GoDev01
ID is 123456789002, Name is GoDev02
ID is 123456789003, Name is GoDev03

# --format-fileオプションでファイルからテンプレートを指定
$ echo -n "ID is {{.ID}}, Name is {{.Name}}" > custom.tpl
$ usacloud server ls --format-file custom.tpl

ID is 123456789001, Name is GoDev01
ID is 123456789002, Name is GoDev02
ID is 123456789003, Name is GoDev03


これを応用することで、例えばサーバ作成時に割り当てられたグローバルIPやDNSサーバなどを設定するためのスクリプトなども出力可能です。


カスタム形式の応用例_グローバルIPの設定コマンドを出力

# テンプレートの定義

$ cat > custom.tpl << EOL
#!/bin/sh

{{ with index .Interfaces 0 -}}
ip addr add {{.IPAddress}}/{{.Switch.UserSubnet.NetworkMaskLen}} dev eth0
ip route add default via {{.Switch.UserSubnet.DefaultRoute}} dev eth0
{{ end }}
{{ range .Zone.Region.NameServers -}}
echo "nameserver {{.}}" >> /etc/resolv.conf
{{ end -}}
echo "search localdomain" >> /etc/resolv.conf
EOL

# テンプレート指定でコマンド実行
$ usacloud server read --format-file custom.tpl GoDev01

#!/bin/sh

ip addr add 192.2.100.101/24 dev eth0
ip route add default via 192.2.100.1 dev eth0

echo "nameserver 133.242.0.3" >> /etc/resolv.conf
echo "nameserver 133.242.0.4" >> /etc/resolv.conf
echo "search localdomain" >> /etc/resolv.conf



まとめ



  • --output-type指定でCSV/TSV/JSON出力できるよ


  • --quietオプションでIDだけの出力ができるよ


  • --format/--format-fileオプションでGo言語のtext/template形式で出力形式の定義ができるよ

さくらのクラウドのお供にusacloudを是非どうぞ!!

以上です。