【サーバの作り替え時の悩み解決!?】Gossでサーバーの状態をテスト

サーバーを持っていると、サーバーリプレイスのために「同じパッケージ」「同じ設定」の別サーバを構築したいという時があると思います。

AnsibleやChefといったサーバ構成ツールを使ってすべてのパッケージインストールや設定を行っている場合には、
あまり困らないかもしれません。

一方、そういった構成ツールを使わず、手でコマンドを実行したりファイルを配布をしたりして構築したサーバについては、
同じようにコマンドを実行したりファイルを配布したりしないといけないです。

今回は、そんな構成ツールを使っておらず、頑張ってサーバを再構築しなければならない場合に、
「既存のサーバと同じ状態を担保する」手段の1つとしてGossについてご紹介します。

ひらべー
ひらべー

この記事はこんな方にオススメ!

・サーバを作り替えなければならない

・サーバーの状態をテストできるようにしたい

Gossとは?

Gossは、インフラストラクチャのテストを簡単かつ迅速に行うための軽量なツールです。

GossではYAML形式の設定ファイルを使用してテストケースを定義し、サーバーの状態が定義と合致するかテストできます。

before afterはこんな感じです!(例: systemdのサービスの状態のテスト)

$ sudo systemctl status xxxxx
● xxxxx.service - testid management system.
   Loaded: loaded (/etc/systemd/system/xxxxx.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2024-06-21 19:33:38 JST; 16h ago

# Activateや、enabledあたりを目で確認
$ cat goss.yaml

service:
    xxxxx:
        enabled: true
        running: true

$ ./goss validate goss.yaml
.......................

Total Duration: 0.xxxs
Count: 10, Failed: 0, Skipped: 0

# テストが通ったらOK(終了コードが0だったらOK)

インストール方法

以下のようなコマンドで、バイナリファイルをダウンロードします。

※ リリースノートからダウンロードできるリストを確認できます
https://github.com/goss-org/goss/releases

$ curl -L https://github.com/goss-org/goss/releases/latest/download/goss-linux-amd64 -o /usr/local/bin/goss
$ chmod +rx /usr/local/bin/goss

テスト定義

gossではyamlファイルでテストを定義すると言いましたが、
実は定義ファイルの書き方を知っている必要がありません!(えっ!?)

正しい状態のサーバでコマンドを実行するだけです!
例えば、nginxがsystemdで起動していることをテストしたいとすると以下のようなコマンドになります。

$ ./goss add service nginx
Adding Service to './goss.yaml':

nginx:
    enabled: false
    running: true

$ cat ./goss.yaml
service:
    nginx:
        enabled: false
        running: true

他にもいろいろなテスト定義を自動で生成することができます!

種類コマンド
サービスgoss add service <サービス名>
例)nginxが起動していることを担保
goss add service nginx
コマンドの実行結果goss add command “<実行コマンド>”
例)crontabで設定されたスケジュールを担保
goss add command “crontab -l”
パッケージgoss add package <パッケージ>
例)opensshのバージョンを担保
goss add package openssh
ファイル・ディレクトリgoss add file <ファイルやディレクトリ>
例)ログファイルの格納ディレクトリが存在することを担保
goss add file /var/log/<app name>

テスト実行

生成されたgoss.yamlをテスト対象の(再構築後の)サーバに配布して以下のように実行するだけです!

$ ./goss validate goss.yaml
..

Total Duration: 0.021s
Count: 2, Failed: 0, Skipped: 0

Tips

以下のコマンドで一括でsystemdで起動しているサービスのテスト定義を生成できます!

※ autoaddは、addよりも広い範囲でいろいろ自動検出してくれるサブコマンドです

$ systemctl list-units --type=service --state=running --no-legend \
  | awk -F'.' '{print $1}' \
  | xargs -I{} ./goss autoadd {}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です