Sparrowdo v2ツールを使用したシェフクックブックの開発とテスト

こんにちは シェフ設定スクリプトの開発におけるsparrowdoツールとそのア​​プリケーションについては以前書きました。







さて、この間、たくさんの水が流れていたので、このトピックをもう一度開きたいと思ったので、記事のタイトルにはバージョン2が含まれています。







そう-sparrowdo-素晴らしい言語Perl6で書かれた構成管理システム、最近活発に開発中。 私の個人的な仕事では、sparrowdoが非常に便利であり、より強力な構成管理プラットフォームであるopscode chefと有機的に共存していることがわかりました 。 いくつかの具体的な例で、sparrowdoでシェフを使用する方法を示します。 この記事はそれほど長くはありませんが、何が危機にunderstandingしているのか理解できるようになることを願っています。







何がありますか? 私の主な職業上の活動のために、私はあらゆる種類のシェフ料理本をたくさん書かなければなりません。 私たちのプロジェクトではAWSサービスが積極的に使用されているため、サーバーを作成してchefクライアントをインストールするのはかなり安価でリソース集約型の操作です。したがって、より伝統的なものを使用する代わりにssh経由でリモートクライアントでchefクライアントを実行することでchefレシピを簡単にデバッグできます浮浪者の場合







このように、クックブックの開発とデバッグのプロセスは、次のバージョンのレシピを開発するときに、 knife uploadコマンドを使用してchefサーバーでクックブックを更新し、 chef-client



コマンド(指定された傷のリスト)を使用してリモートサーバーでテストされたCookieを起動するという事実に要約されます。 実際、デプロイ中に発生するさまざまなエラーやクラッシュをキャッチしながら(chefドキュメンテーションの言語で表されているように-ノードの収束)







この状況では、sparrowdoは私にとって非常に便利です。シェフとは異なり、プッシュベースの構成管理ツールであるか、簡単に言えば、sshを介してリモートホストでスクリプトを実行できます。







すでに推測できるように、この場合のシナリオは次のようになります-リモートマシンでクライアントシェフを実行します。







Sparrowdoはモジュール性をサポートしています-Perl6で記述されたモジュールを使用して基本機能を拡張できるため、 Sparrowdo :: Chef :: Clientというこのタスク用のモジュールを具体的に記述しました







モジュールのインターフェースは非常にシンプルです-chefクライアントを起動するために必要な最小限を提供します-つまり、 シートの傷を指定し、オプションで属性を設定します







以下に、インストールするjdkのバージョンを設定する属性を設定してjava cookieを起動するスクリプトを示します。







 $ cat sparrowfile module_run 'Chef::Client', %( run-list => [ "recipe[java]" ], attributes => %( java => %( jdk_version => 7 ), ), log-level => 'info', force-formatter => True );
      
      





私たちのプロジェクトでは、主にjdkバージョン7を使用しているため、対応するchef属性を介して公開し、デフォルト値をオーバーライドします。







リモートサーバーで実行すると、sparrowdoレポートは次のようになります。







 $ sparrowdo --host=remote.server --ssh_user=centos --ssh_private_key=/home/melezhik/.ssh/foo.pem running sparrow tasks on remote.server ... target OS is - centos7 enter module <Chef::Client> ... push task <set up chef run list and attributes> plg <file> OK push task <run chef-client> plg <bash> OK set up task box file - /tmp/sparrowdo/task-box8938.json - OK get index updates from SparrowHub ... OK public@file is uptodate (0.0.5) public@bash is uptodate (0.1.4) running task box from /tmp/sparrow-cache/task-box8938.json ... [t] set up chef run list and attributes at 2017-04-06 13:35:14 set target content touch target target created set target mode to 644 ok scenario succeeded ok text match /target (created|deleted)/ ok text has 'set target content' STATUS SUCCEED [t] run chef-client @ runs bash command [t] run chef-client modules/bash-command/ params: envvars: at 2017-04-06 13:35:14 [2017-04-06T13:35:15+00:00] INFO: Forking chef instance to converge... Starting Chef Client, version 12.19.36 # #   # Chef Client finished, 7/9 resources updated in 38 seconds ok scenario succeeded STATUS SUCCEED
      
      





さて、この簡単な例は、傷のシートとさまざまな属性を公開することにより、開始されたシェフの料理の設定を管理する方法を示しています。 以下に、いくつかの興味深いケースを示します。







境界条件テスト



多数の構成管理および自動化タスクがネットワークサービスの起動に関連付けられていることは周知の事実です。 たとえば、いくつかの重要なルールに従ってnginxサーバーを構成および再起動するCookieがあります。 この種のレシピを書いた人は、最初はサービスのさまざまな状態に関してスクリプトの動作が異なるという事実にしばしば遭遇したと思います。 ここでは、たとえば、何が起こるのか、それ自体が構成管理ツールでもあるsparrowdoを使用してchefレシピを実行する前にnginxが開始されない場合、展開が失敗するかどうかを確認したいので、これは簡単です:







 $ cat sparrowfile service-stop 'nginx' module_run 'Chef::Client', %( run-list => [ "recipe[nginx-app::configure]" ] );
      
      





同意する-メインのクックブックの動作をテストするためだけに、nginxをシェフのレシピ内に埋め込むのは良くありません。 そしてここでは、sparrowdoの助けを借りて、シェフの料理本のコード自体を変更せずに、簡単かつ自然にそれを行います







組み込みの展開後/監査テスト



クライアントのシェフが仕事をした後、その仕事をチェックすることがしばしば必要です。 この問題を解決するためのさまざまなオプションがあります-test -kitchen / serverspecgosschef minitest-handlerinspec 、すべてに長所と短所があります。 しかし、ここであなたのための別の選択肢があります-sparrowdo-主な意味は同じです-私たちは並行して、またはむしろ、sparrowdoスクリプト内で、Tomcatサーバーが実行され、プロセスのリストに「表示」される私のお気に入りのチェックの1つです-実践は時々、シェフは再起動可能なサービスのクラッシュという状況をキャッチしないため、自分でそれを行う必要があります。







 $ cat sparrowfile service-stop 'nginx' module_run 'Chef::Client', %( run-list => [ "recipe[tomcat-app::configure]" ] ); task-run 'check tomcat', 'proc-validate', %( pid_file => '/var/run/tomcat7.pid', footprint => 'java' );
      
      





オプションの依存関係



最後に、最後の最も単純で最も明白なケース(ただし、これはその関連性を失わない)-テスト中のサーバーに追加のパッケージとユーティリティを一時的に配置する必要があります。 これらの依存関係はアプリケーションのインストールと直接関係がないため、これをシェフレシピに含めたくありませんが、インストールされたアプリケーションをデバッグするために必要です。また、作成したシェフレシピのコードを変更せずに、sparrowdoを介して追加するだけです。







ここでは、たとえば、本番環境で必要になる可能性が低い特殊なパッケージですが、

Javaコードのデバッグを行う場合に必要になります。







 package-install 'java-1.7.0-openjdk-debuginfo' module_run 'Chef::Client', %( run-list => [ "recipe[java]" ] );
      
      





これで終わりです。 結論として、数百の異なるプロジェクトのための数十の料理本の毎日の開発に関連する私の個人的な仕事で、sparrowdoはシェフスクリプトの開発とテストを大幅に加速および簡素化する優れたコンパニオンツールとしての地位を確立しました。







いつものように、私は質問と建設的な批判に喜んでいるでしょう。








All Articles