インフラストラクチャテストのための鳥


Bird ブロックに新しい子供が1つのインフラストラクチャをraku dslを使用してテストすることです.
それはシンプルで、モダンで光沢のある書かれたRaku 言語と効率的-それはターゲットホストに余分な依存関係を必要としません.
始めましょう.

インストール


zef install --/test Bird
一度鳥をインストールすると、彼らは余分なステップを行う必要があります.鳥が頼りにssh-bulk-check スパロウプラグインを設定する必要があります.
export SP6_REPO=https://sparrowhub.io/repo
s6 --index-update
最後のステップでは、パブリックスパローのリポジトリが追加され、鳥がプラグインをインストールするときに初めて起動します.

インフラテスト

nano rules.pl6 :
# check if nginx service is running
service-is-running "nginx";

# check if nginx service is enabled
service-is-enabled "nginx";
テストは有効なRAKUコードですfunctions 鳥によって輸出されます.この例ではnginx サービスが起動し、autostartに追加されました.
では、テストを実行しましょう.
bird --host=sparrowhub.io
bird:: [read host from command line] [sparrowhub.io]
bird:: [cmd file] [/root/.bird/285892/cmd.sh]
bird:: [check file] [/root/.bird/285892/state.check]
bird:: [init cmd file]
[repository] :: index updated from file:///root/repo/api/v1/index
[check my hosts] :: check host [sparrowhub.io]
[check my hosts] :: ==========================================================
[email protected]'s password:
[check my hosts] :: Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 5.4.0-77-generic x86_64)
[check my hosts] :: <<< test_01: service [nginx] is running
[check my hosts] :: YES
[check my hosts] :: >>>
[check my hosts] :: <<< test_02: service [nginx] is enabled
[check my hosts] :: YES
[check my hosts] :: >>>
[check my hosts] :: end check host [sparrowhub.io]
[check my hosts] :: ==========================================================
[task check] verify host [sparrowhub.io] start
[task check] test_01: service [nginx] is running
[task check] stdout match (r) <YES> True
[task check] test_02: service [nginx] is enabled
[task check] stdout match (r) <YES> True
[task check] verify host [sparrowhub.io] end

どのように鳥はテストですか?


鳥についての面白いことは、それがテストをする方法です.2つの実行段階があります.
  • タスクを実行するcheck my host )
  • タスクの出力をチェックするtask checks )
  • これら2つのステージは1つずつ実行されますが、それぞれの別の意味があります.

    タスクチェックを実行する


    鳥は生成するBash 実行されるテストを表すコマンド.最後のbashスクリプト/root/.bird/285892/cmd.sh ) を実行し、実行した後に実行されるssh ターゲットホストで.このステージが終わったら、鳥には出力があります[check my hosts] 次の段階で解析されます.

    タスクの出力チェック


    この段階では、準備されたタスクチェック規則を使用します./root/.bird/285892/state.check ) と出力に対して実行します.鳥は使うSparrow task check DSL そうする.
    パースと検証の手順は、鳥が走るホストで実行されます.
    解析と検証が完了すると、結果は報告書として見られる[task check] を返します.
    最初のテスト実行のロジックは、他のテストツール(GOSS、TestInfraa、Chef Inspectなど)が通常持っているものとは少し異なります.
  • 基本的なテストコマンドの出力を見ることができます([check my hosts] テスト結果だけでなく、より多くのコンテキストを与える
  • 鳥は、それがテキストデータ出力とregexp規則に基づいて仮定をチェックするために堅いデータ構造と基本的な使用raku regexpsに頼らないので、より簡単に発展する方法です.
  • 新しいテストメソッドを追加するのに文字通り数分かかりますlsof コマンド出力-https://github.com/melezhik/bird/blob/master/lib/Bird/DSL/Service.pm6#L49-L68 nano rules.pl6 :
    service-listen-to "nginx", 443;
    
    そして、より多くの例lsof ベースのテストレポート
    bird --host=sparrowhub.io
    
    bird:: [read host from command line] [sparrowhub.io]
    bird:: [cmd file] [/root/.bird/286735/cmd.sh]
    bird:: [check file] [/root/.bird/286735/state.check]
    bird:: [init cmd file]
    [repository] :: index updated from file:///root/repo/api/v1/index
    [check my hosts] :: check host [sparrowhub.io]
    [check my hosts] :: ==========================================================
    [email protected]'s password:
    [check my hosts] :: <<< test_01: service [nginx] listens to port [443]
    [check my hosts] :: COMMAND PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    [check my hosts] :: nginx   709     root    8u  IPv6  21734      0t0  TCP *:443
    [check my hosts] :: nginx   709     root    9u  IPv4  21735      0t0  TCP *:443
    [check my hosts] :: nginx   710 www-data    8u  IPv6  21734      0t0  TCP *:443
    [check my hosts] :: nginx   710 www-data    9u  IPv4  21735      0t0  TCP *:443
    [check my hosts] :: >>>
    [check my hosts] :: end check host [sparrowhub.io]
    [check my hosts] :: ==========================================================
    [task check] verify host [sparrowhub.io] start
    [task check] test_01: service [nginx] listens to port [443]
    [task check] stdout match (r) <^^ nginx \s+ \S+ .* '*' ':' 443 $$> True
    [task check] verify host [sparrowhub.io] end
    
    テスト出力は、カラー出力でバードを実行する場合はさらに明確になります.nano rules.pl6 :
    service-is-running "nginx";
    service-is-enabled "nginx";
    service-listen-to "nginx", 443;
    service-listen-to "rakudo", 5000, True;
    
    bird --host=sparrowhub.io
    

    結論


    あなたが鳥が好きで、インフラストラクチャテストでそれを使うかもしれないことを願っています.私は常に新しいメソッドを追加されている、あなたもチェックすることができますてk8s を使用して展開documentation !
    お読みありがとうございます.
    アレクセイ