[Goss] 基本的な使い方

Gossは構築したサーバーの構成や設定が正しいかを、すばやく簡単に確認できるツールです。

Goss – Quick and Easy server validation

https://github.com/aelsabbahy/goss
同様のツールにServerspecがありますが、GossはYAMLでテスト項目を設定します。
今回はGossの基本的な使い方を紹介します。

目次

  1. 基本的な使い方
  2. テスト項目の作成
  3. テスト項目の修正
  4. テストの実行

1. 基本的な使い方

goss [global options] command [commnad options] [arguments]...

GLOBAL OPTIONS


-g gossfile 読込みおよび書込みを行うgossファイルのパスを指定します。デフォルトでは、./goss.yamlを参照します。
–vars value テンプレート用の値を格納したファイルを指定します。
–package value パッケージの種類を指定します。apk, deb, pacman, rpmを指定できます。
-h ヘルプメッセージを表示します。
-v バージョンを表示します。

COMMAND


add 1つのテスト項目を追加します。
autoadd 自動的に復数のテスト項目を追加します。
render 分割して記述されたgossファイルをまとめて(整形して)出力します。
serve テストのhttpエンドポイントとして動作します。
validate システムのチェックを行います。

2. テスト項目の作成

テスト項目の作成から実行までを行ってみます。今回は/tmp/gosstest.txtというファイルを用意して、このファイルの状態を確認してみます。

$ cat /tmp/gosstest.txt
gossgossgoss
gossgossgoss
gossgossgoss

はじめにaddコマンドもしくはautoaddコマンドでテスト項目の雛形を作成します。

$ goss autoadd /tmp/gosstest.txt
Adding File to './goss.yaml':

/tmp/gosstest.txt:
  exists: true
  mode: "0664"
  size: 39
  owner: XXXX
  group: XXXX
  filetype: file
  contains: []

Fileリソースのテスト項目として以下の6つが自動設定されました。

  1. exists: true (ファイルが存在すること)
  2. mode: “0664” (ファイルのパーミッションが”0664″であること)
  3. size: 39 (ファイルのサイズが39バイトであること)
  4. owner: XXXX (ファイルのオーナーがXXXXであること)
  5. group: XXXX (ファイルのグループがXXXXであること)
  6. filetype: file (ファイルタイプがファイルであること)

3. テスト項目の修正

作成されたgossファイルをテスト要件に応じて修正やテンプレート化を行います。gossファイルはYAML形式のテキストファイルとなっているので、任意のテキストエディタなどで修正、追加ができます。
今回は自動作成されたgossファイルをそのまま利用するので、gossファイルの修正は行いません。

4. テストの実行

validateコマンドでテストを実行します。

$ goss validate
......

Total Duration: 0.000s
Count: 6, Failed: 0, Skipped: 0

全てのテスト項目が成功したようです。失敗状態を確認するために、テスト対象のファイルを削除して実行してみます。

$ rm /tmp/gosstest.txt
$ goss validate
FSSSSS

Failures/Skipped:

File: /tmp/gosstest.txt: exists:
Expected
    <bool>: false
to equal
    <bool>: true
File: /tmp/gosstest.txt: mode: skipped
File: /tmp/gosstest.txt: owner: skipped
File: /tmp/gosstest.txt: group: skipped
File: /tmp/gosstest.txt: filetype: skipped
File: /tmp/gosstest.txt: size: skipped

Total Duration: 0.001s
Count: 6, Failed: 1, Skipped: 5

最初のファイル存在テスト(exists)に失敗しました。以降のテスト(mode, owner, group, filetype, size)はスキップされます。
 
以上、Gossの基本的な使い方の紹介でした。