Hateburo: kazeburo hatenablog

Operations Engineer / 運用系小姑 / Perl Monger

mkr hosts にコントリビュートした話

mackerel.io

こちらでリリースの紹介があったmkrコマンドに一つコントリビュートしておりました。 リリースされたのは、mkr v0.41.0 です。

一つ前のバージョンまで mkr hosts は検索結果が一台もないと、null が返っていました。

$ mkr hosts --service all-working-service --status poweroff
null

これだと、jq コマンドで何かしら処理するのが面倒。とあるスクリプトでは以下のようにしていました。

HOSTS=$(mkr hosts --service all-working-service --status poweroff)
if [ "${HOSTS}" == "null" ]; then
  HOSTS="[]"
fi
for _ID in $(echo "$HOSTS"| jq -c -r '.[].id')
do
    ...
done

これだとやっぱり面倒ということで、Pullrequestを作って、マージしていただきました。

github.com

実質的なdiffはこれだけ

diff --git a/hosts/app.go b/hosts/app.go
index 4778db1..3c41be7 100644
--- a/hosts/app.go
+++ b/hosts/app.go
@@ -54,7 +54,7 @@ func (ha *hostApp) findHosts(param findHostsParam) error {
    case param.verbose:
        return format.PrettyPrintJSON(ha.outStream, hosts)
    default:
-       var hostsFormat []*format.Host
+       hostsFormat := make([]*format.Host, 0)
        for _, host := range hosts {
            hostsFormat = append(hostsFormat, &format.Host{
                ID:            host.ID,

sliceをvarではなくmakeで作成することで、nil sliceにならず、Marshal時に null ではなく意図通り [] として出力されました。

これで楽ができます。