LoginSignup
0
0

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-11-01

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を是非どうぞ!!

以上です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0