こんにちは。 今年中に、ユーザースクリプト管理システムであるSparrowに関する一連の記事を執筆しました。 今年の終わりに、私は一種の結果としての投稿をしたいと思います。もう一度このツールの主な本質を説明しようとします。
それでは、Sparrowとは正確には何ですか? このシステムを使用するためのさまざまなオプションを使用しない場合、Sparrowを使用すると、カスタムスクリプトをすばやく開発、構成、および実行できます。
具体例を挙げましょう。 私の仕事では、多くの場合、多くのサーバーにアクセスし、そこでハンドと呼ばれる何かをしなければなりません。 同時に、自分のアカウントの環境を、同じではないにしても、自分のマシンで処理する環境と非常によく似たものにしたいと考えています。 ここに私が意味するものがあります:
- 頻繁に使用する必要があるインストール済みパッケージのリスト-たとえば、tree、curl、nano、git、mc
- nanoエディターの特定の設定
- gitクライアントの特定のセットアップ
などなど。 そのような些細なことの各リストは、独自のものを持つことができます。 もちろん、これらすべては、「ロケット科学」ではなく、手動で設定およびインストールできますが、最初に、ソフトウェアを正しく設定するために、毎回多くのコマンドを入力し、ドキュメントを調べる必要があります。 第二に、すべてを念頭に置くのは難しいため、何かを単に忘れたり見逃したりすることがあります。 これにはすべて時間と労力がかかります。 ですから、私はここで誰にもアメリカを開かないでしょう、私たちは通常の自動化を必要とします。
わかった ここですぐにフォームのコメントを予測し、そのようなタスクに何らかのシェフやansibleを使用しないようにしましょう。 これに対して、私は多くの考えを持っています、ここに彼らはあります:
- ChefまたはAnsibleは、多数のサーバーと、料理や遊びの本で表現しやすい典型的な組織化されたインフラストラクチャがある場合に、産業上の問題を解決するのに適しています。
- 本質的に自分に合ったカスタムの個人用スクリプトがあり、それらを普遍的なソリューションにしたくない場合、chefやansibleのような決定は、すでに一種の失敗になります。
- また、標準ワークフローの同じシェフがサーバーパーツと適切に構成されたクライアントシェフ(ノードの登録)を必要とすることを忘れてはなりません-nanoエディターのインストールやgitクライアント構成のセットアップなどの問題を解決するには、あまりにも同意する必要があります。
- 最後に、ターゲットサーバーで実行したいだけのbashスクリプトが既に用意されていて快適な場合もありますが、シェフクックブックやansibleプレイブックに変えてコードの移植に関連する追加の「体の動き」をしたくはありません(ちなみに、これは通常のbash / shellスクリプトでは必ずしもスムーズではありません-しかし、これはこれらのツールのエコシステムにおける別の投稿のトピックです。
- これらはすべて、ユーザースクリプトをさまざまなマシンに(開発および) 配布できるシンプルであると同時に十分で柔軟なソリューションが必要であることを示唆しています。 これが、SparrowとSparrowHubカスタムスクリプトリポジトリのアイデアが生まれた方法です。 これについては、Habréを含めて詳細に* 書きました。
(*)この投稿は、現在のSparrowの実装に比べて少し時代遅れですが、重要な点はそこに反映されています。
したがって、Sparrowの主な機能を要約すると、次のように言えます。
Sparrowは、統一された方法でパッケージ化およびカスタマイズ可能なさまざまなスクリプトを開発、配布、管理できるカスタムスクリプトオーケストレーターです。
したがって、スクリプトは単一のリポジトリにロードされ、作成者、バージョン、およびドキュメントがあります。これらはすべて、apt / debianやCPAN / Perlなどのパッケージ配布システムに似ています。
Sparrowは、検索(リポジトリインデックス)およびスクリプトのインストールと実行を可能にするコンソールクライアントを提供します。
スクリプトは、最新バージョンまたは指定されたバージョンを使用してインストールできます。 一般に、スクリプトのバージョニングは、開発者が新しいバージョンでスクリプトをリポジトリにアップロードすることでスクリプトに後続の変更を加えることができる場合、チームでの使用を奨励します。後方互換性違反の場合、ユーザーは常にスクリプトの以前のバージョンにロールバックできます。 スクリプトの変更を追跡するプロセスも簡素化されます。バージョンを知っていれば、最近更新された内容を変更ログファイルで常に確認できます。
プライベートスクリプトの場合、パブリックアクセス(中央リポジトリモードの操作)にしたくない場合、Sparrowを使用すると、リモートgitリポジトリ(いわゆるプライベートスズメプラグイン )でホストされているスクリプトをインストールできます。
スズメはある程度言語に依存しないシステムです。 SparrowHubリポジトリにアップロードされたスクリプトは、次の3つの言語のいずれかで作成できます。
- Perl
- ルビー
- バッシュ
これらの言語のいずれについても、 Sparrow APIが実装されており、スクリプトを構成し、マルチシナリオプログラム(Sparrowでモジュールと呼ばれる)を整理する便利な方法を可能にします。また、スクリプト言語に関係なく、実行中のスクリプトの出力ストリーム(stdout) Sparrowは、テストスクリプトの作成、監視、監査に非常に魅力的です。 (例として、プロジェクト-minoca-pkg-test - Minoca OSオペレーティングシステムでアセンブルされたパッケージのテストを参照してください)。 このすべての詳細については、Sparrowスクリプト開発環境を実装するOutthenticモジュールのドキュメントをご覧ください 。
- Sparrow自体はPerlで記述され、CPANモジュールとしてインストールされます。 依存関係のオーバーヘッドはほとんどないため、インストールは非常に簡単です。
これらは、Sparrowエコシステムのすべての特性ではありませんが、主要な特性であるため、投稿があまりにも理論的であることが判明しないように、このツールを使用するための典型的なオプションを紹介します。
スズメのインストール
通常のCPANモジュールとして配置します。 カールも必要です。 そしてそれだけです。
$ cpanm --notest -q Sparrow $ yum install curl
SparrowHubリポジトリインデックスの更新を取得します。
Sparrowでapt-get update
コマンドを実行して通常行うことは次のようになります。
$ sparrow index update
スクリプト検索
インデックスを更新すると、Sparrowでプラグインと呼ばれるスクリプトを検索できます。 たとえば、nanoエディターに関連するすべてのものが必要です。
$ sparrow plg search nano
正規表現検索を使用できます:
$ sparrow plg search ssh.*
プラグインのインストール
プラグインは次のように配置します。
$ sparrow plg install nano-setup
ところで、スクリプトに依存関係がある場合は、それらもインストールされます。 Sparrowは、PerlのcpanfileおよびRubyのGemfileを介した依存関係の宣言とインストールをサポートしています。
すでに述べたように、必要なバージョンにプラグインを配置できます。
$ sparrow plg install nano-setup --version 0.1.2
プラグインの起動
プラグインをインストールしたら、実行できます。 ここで、たとえば、nano-rcファイルの設定方法:
$ sparrow plg run nano-setup
プラグインに応じて、さまざまなパラメーターを入力に渡すことができます。
$ sparrow plg run nano-setup --param tabsize=2 --param speller='hunspell -x -c'
または、プラグインを複数回実行する予定がある場合、および/または多くのパラメーターがある場合は、起動するプラグインのパラメーターを決定するタスクを作成できます。たとえば、これはlogdogプラグインを使用してnginxログでフォーム500のエラーを見つけるためのタスクを作成する方法です:
$ sparrow plg install logdog # - $ sparrow project create nginx # $ sparrow task add nginx 500-errors logdog # : $ sparrow task ini nginx/500-errors <logdog> file /var/log/nginx/access.log time_pattern \[(\d+\/\S+\/\d+):(\S+) time_format %d/%b/%Y %T history 5 minutes timezone Europe/Moscow filter HTTP\/\S+?"\s+500\s key_field (\S+) density 3 check_mode report </logdog>
これで、指定されたパラメーターでタスクを開始できます。
$ sparrow task run nginx/500-errors
または、起動時にいくつかのパラメーターをオーバーライドします。
$ sparrow task run nginx/500-errors --param logdog.density=10 --param logdog.history="'1 weeks'"
プラグインの使用方法を忘れた場合は、いつでもドキュメントを入手できます。
$ sparrow plg man nano-setup
または、SparrowHub Webインターフェースを使用して、必要なプラグインを見つけます。
https://sparrowhub.org/info/nano-setup
タスクの公開
後で別のサーバーで使用できるように、独自のタスクを保存すると便利な場合があります。 簡単な例を挙げます。 私は仕事の過程でよく使うパッケージのリストを持っています。 新しいサーバーを使用する場合に必要になる可能性が最も高いと言えます。 OK、 package-genericプラグインを使用して、さまざまなディストリビューションのパッケージをインストールします。
まず、プラグインをインストールしてタスクを作成します。
$ sparrow plg install package-generic $ sparrow project create utils $ sparrow task add utils my-packages package-generic $ sparrow task ini utils/my-packages list tree mc nano hunspell git
次に、アカウントのSparrowHubサーバーにタスクを保存します。
$ sparrow remote task upload utils/my-packages 'my useful packages'
さて、苦労せずに、必要なパッケージのリストを思い出さずに、別のサーバーに移動して、タスクからインストールするだけです:
$ ssh new-server $ sparrow remote task run utils/my-packages
次のようなリモートタスクのリストを取得できます。
$ sparrow remote task list
また、リモートタスクを公開して、他の人が使用できるようにすることもできます。
$ sparrow remote task share utils/my-packages
ユーザーが私のタスクを実行できるようになりました:
$ sparrow remote task run melezhik@utils/my-packages
次のように、SparrowHubで利用可能なすべてのリモートタスクのリストを取得できます。
$ sparrow remote task public list
独自のプラグインの開発と公開は別のトピックのトピックであり、興味のある人はHabréに関する私の投稿 *を参照できます。
(*)この出版物は、Sparrowの現在のバージョンに関しては少し古くなっていますが、出発点として役立つ場合があります。その後、Sparrowプラグイン開発環境のドキュメントを参照できます-Outthentic、またはWebアプリケーションのテストスクリプトを作成する場合はswatシステム。
これはおそらくすべてですが、もちろんそれはシステムへの大雑把なエクスカーションでしたが、すべての種類のSparrow機能に関する詳細はドキュメントページで見つけることができます。
まとめ
では、Sparrowはどのように役立つのでしょうか? 私は要約しようとします:
- さまざまなサーバー上でのユーザーまたは他のユーザーによるスクリプトの再利用を目的とした、独自のスクリプトの迅速な保存。
- 「すぐに使える」サポートされている多数の構成フォーマット(INIスタイル、Config :: General、YAML、JSON、コマンドライン)でスクリプトをカスタマイズできる便利なAPI。 個々の構成パラメーターのオーバーライドのサポート(デフォルト値を保持)。
- スクリプト出力を検証するための組み込みDSLを使用すると、BlackBoxテストモデルを使用して、監視、テスト、および監査用のさまざまなスクリプトを簡単かつ迅速に作成できます。
PS:おめでとうございます! 頑張って!
そして最後に、伝統的に同様のテーマを持つ小さなアンケート。