gossを使ってFreeBSDサーバの設定をテストする
2021年10月16日 初稿
gossの概要
gossはサーバの設定をテストするツールです。YAML形式でテストコードを書き、goss
を実行したホストがそのテスト通りに設定されているかを確認できます。
実装言語はGo言語でライセンスはApache-2.0です。2015年10月3日にv0.0.1がリリースされ、2020年12月19日にリリースされたv0.3.16が初稿時点での最新バージョンです。
同じくサーバの設定をテストするツールにServerspecがあります。gossと比べてサポートされているプラットフォームはServerspecのほうが多様かつリリース頻度も高めです。初稿時点では、Serverspecの最新バージョンは2021年6月24日のv2.41.8です。
よりメンテナンスされているほうを選ぶならServerspecですが、テストコードをYAMLで書いて手早くテストしたいときやgossの機能だけで要求を満たせられるならgossも有力な選択肢となるでしょう。
gossをFreeBSDにインストールする
gossのビルドにはGNU makeとGoが必要です。
pkg install gmake go
初稿時点ではgossはFreeBSDをサポートしていません。FreeBSDである程度使えるように直したブランチがあるので、それをgit clone
してビルドします。
git clone -b develop/support-freebsd-build https://github.com/user340/goss.git
cd goss
gmake build ./release-build.sh alpha-darwin-amd64 ./release-build.sh linux-386 ./release-build.sh linux-amd64 ./release-build.sh linux-arm ./release-build.sh alpha-windows-amd64 ./release-build.sh freebsd-amd64
release
ディレクトリにgoss-freebsd-amd64
が生成されています。これがgossの実行バイナリです。実際にサーバの設定をテストするときは、テスト対象のホストにこのバイナリとYAMLのテストコードを転送しテスト対象側で実行します。
gossによるテスト例
ApacheがインストールされWebサーバとして運用されているFreeBSDサーバがあるとします。gossの実行バイナリはroot
ユーザのホームディレクトリに配置されています。ここで、Apacheのパッケージがインストールされており、サービスが意図どおりに動いているかをテストします。YAMLのテストコードは次のようになります。
package:
apache24:
installed: true
versions:
- 2.4.51
skip: false
service:
apache24:
enabled: true
running: true
このコードをテスト対象のホストに転送するか、あるいはテスト対象のホストで直接書くなどして用意します。名前はgoss.yaml
にしてください。
簡単な例
上で用意したgoss.yaml
が存在するディレクトリでgoss-freebsd-amd64 validate
を実行します。もっとも簡単かつ一般的な使い方です。
./goss-freebsd-amd64 validate
....
Total Duration: 0.006s
Count: 4, Failed: 0, Skipped: 0
テストはすべて通りました。
ヘルスチェックエンドポイントとして待ち受ける
gossテストの実行をサーバとして待ち受けることも可能です。gossサーバがヘルスチェックエンドポイントとしてのHTTPサーバを建て、クライアントがアクセスするとgossによるテスト結果が返ってくるようにできます。
goss.yaml
が存在するディレクトリでgoss-freebsd-amd64 serve
を実行します。
./goss-freebsd-amd64 serve
2021/10/16 10:22:43 Starting to listen on: :8080
別ターミナル等からホストへのIPかドメイン:8080/healthz
にアクセスします。
curl 192.0.2.1:8080/healthz
....
Total Duration: 0.005s
Count: 4, Failed: 0, Skipped: 0
さきほど手動実行したときと同じ出力がHTTPクライアントから返ってきました。
このように、gossサーバを常時稼働させておき、パッケージアップデートやデプロイ後にヘルスチェックエンドポイントを叩いてテストする……といった運用も可能です。
より詳細な情報のために
gossの完全なドキュメントはmanual.mdを、プラットフォームごとの機能の制限などについてはplatform-feature-parity.md参照してください。これらのドキュメントはアップストリームのものではなくFreeBSD対応版のものです。