こんにちは この記事では、単純な構成管理ツールであるSparrowdoについてお話します。 Sparrowdoシステムは、いわゆるSparrowプラグインの使用に基づいていることをすぐに言います。これについては、すでにhabrahabr.ruにいくつかの記事を書いています。
したがって、このツールの特徴的な機能:
構成スクリプトはPerl6で記述されています (これにより、記事の上部にある蝶のロゴの外観が説明されます:)
構成管理タスクのソリューションは、適切なプラグインを選択し、カスタムサーバーで起動することです。 各プラグインは、特定のタスクのブラックボックスです。 多数のプラグインを収集し、それらを必要なパラメーターを使用してサーバー上で実行すると、必要なシステム構成を取得できます。 プラグインは、 ユーザー 、 グループの作成、システムパッケージのインストールなどの基本的なタスクと、より複雑で複雑なものの両方を解決できます 。ソースからアプリケーションをgitリポジトリにインストールし、サービスとして起動します。 あなたに合ったプラグインを選択します。
よく知られている既存の構成管理システムのプラグインに似ているのは、 chefの リソースまたはcookie 、またはansibleの モジュール です 。
したがって、Sparrowdoは、chefまたはansibleが提案する基本的な機能セットをすぐに使用できるわけではありませんが、通常のタスクを解決する既製のプラグインセットを常に使用できます。 しかし、適切なプラグインを見つけたとしても、プラグインを簡単に作成してすぐに使用できます。 したがって、Sparrowdo / Sparrowでは、ツールで最初に提供されるターンキーソリューションではなく、必要な機能を迅速かつ簡単に追加する機能に重点が置かれています。
Sparrowdoスクリプトは、入力パラメーターを使用してSparrowプラグインのリストを定義します。実際、必要なサーバー構成を記述するために必要なものはすべて揃っています。 Sparrowdoクライアントはプラグインのリストを調べて、ターゲットサーバーで順次起動し、結果がTAPレポートとしてコンソールに表示され、各プラグインの起動により独自のレポートが生成されます。
スクリプトはPerl6で記述されており、リモートマシンでプラグインを実行するために単純なAPIが使用されています。具体的な例を少し後で説明します。
- 仕事には、Sparrowdoプッシュイデオロギーが選択されています。 Sparrowdoクライアントがインストールされているマスターホストがあり、そこからターゲットサーバー上のsshを介してプラグインが起動されます。 ターゲットサーバーでプラグインを実行するには、Sparrowクライアントをインストールする必要があります。 以下は、このシステムをインストールするための特定のコマンドに関してどのように見えるかです。
マスターホストへのSparrowdoクライアントのインストール:
$ ssh master.host $ panda install Sparrowdo
ターゲットホストへのSparrowクライアントのインストール:
$ ssh target.host $ cpanm Sparrow $ yum install curl
Sparrowdoシステムの運用スキーム:
+-----------------+ | | ssh | |------------> < host-1 > 192.168.0.1 | <master host> | ssh | {sparrowdo} |------------------> < host-2 > 192.168.0.2 | | ssh | |-----------------------> < host-N > 192.168.0.3 | | +-----------------+ +-------------+ | | | <host> | | | | {sparrow} | | {curl} | | | +-------------+
これらすべてが機能するためには、2つの条件を提供する必要があります。
- ホストホストからターゲットマシンへのパスワードなしのsshアクセスを提供する必要があります
- sshセッションの作成元のユーザーは、ターゲットマシンでパスワードなしのsudoを持っている必要があります
両方の基準が満たされている場合、Sparrowdoスクリプトを作成し、ターゲットマシンのマスターホストから実行できます。
$ ssh master.host $ nano sparrowfile # $ sparrowdo --host=192.168.0.1
クライアントには、たとえばsshセッションを実行するユーザー名を指定したり、 --verbose
パラメーターを使用してレポートの詳細を増やしたりするなど、使用できる多くの追加パラメーターがあります。
$ sparrowdo --host=192.168.0.1 --ssh_user=admin --verbose
例
さて、Sparrowdoを使用して一般的なサーバー構成タスクを自動化する方法を確認できるように、いくつかの例を紹介します。
CPANモジュールのインストール
Sparrowdo / SparrowシステムはPerl6 / Perl5で書かれており、主にPerl開発者に焦点を合わせているため、Perlエコシステムのこの古典的なケーススタディから始めざるを得ません。
$ ssh master.host $ cat sparrowfile task_run %( task => 'install some cpan packages', plugin => 'cpan-package', parameters => %( list => 'CGI DBI', install-base => '/opt/perl' ) );
このシナリオでは、 CGIとDBIの 2つのCPANモジュールをインストールし、インストールディレクトリとしてパス/ opt / perlを使用します。
テストマシンでの表示は次のとおりです。
$ sparrowdo --host=192.168.0.1 running sparrow tasks on 192.168.0.1 ... running task <install some cpan packages> plg <cpan-package> parameters: {install-base => /opt/perl, list => CGI DBI} /tmp/.outthentic/5385/opt/sparrow/plugins/public/cpan-package/story.t .. # [/opt/sparrow/plugins/public/cpan-package/modules/cpanm] # install CGI into /opt/perl ... # Successfully installed HTML-Parser-3.72 (upgraded from 3.64) # Successfully installed Test-Deep-1.120 # Successfully installed Sub-Uplevel-0.25 # Successfully installed Carp-1.38 (upgraded from 1.11) # Successfully installed Test-Warn-0.30 # Successfully installed CGI-4.31 (upgraded from 3.51) # 6 distributions installed # install ok ok 1 - output match 'install ok' # [/opt/sparrow/plugins/public/cpan-package/modules/cpanm] # install DBI into /opt/perl ... # Successfully installed DBI-1.636 # 1 distribution installed # install ok ok 2 - output match 'install ok' # [/opt/sparrow/plugins/public/cpan-package] # cpan-package-done ok 3 - output match 'cpan-package-done' 1..3 ok All tests successful. Files=1, Tests=3, 91 wallclock secs ( 0.02 usr 0.01 sys + 72.58 cusr 8.26 csys = 80.87 CPU) Result: PASS
システムパッケージをインストールする
この目的のために、 package-genericプラグインを使用します。少数のプラットフォーム(Ubuntu / Debian / CentOS)をサポートしますが、必要に応じて簡単に「仕上げる」ことができます。 nginx、nano、telnetをインストールするためのスクリプトは次のようになります。
$ ssh master.host $ cat sparrowfile use v6; use Sparrowdo; task_run %( task => 'install my packages', plugin => 'package-generic', parameters => %( list => 'nginx nano telnet' ) );
ユーザーとグループの作成、削除
この典型的なタスクは、明らかな名前がuserおよびgroupのプラグインによって解決されます。 Sparrowdoスクリプトは次のようになります。
$ ssh master.host $ cat sparrowfile use v6; use Sparrowdo; task_run %( task => 'this is me', plugin => 'user', parameters => %( name => 'melezhik' ) ); task_run %( task => 'admins group', plugin => 'group', parameters => %( name => 'admins' ) ); task_run %( task => 'remove unknown users', plugin => 'user', parameters => %( name => 'Unknown' , action => 'delete' ) );
サービス管理
この古典的なケースを見逃すことはできませんでした。 Sparrowdoスクリプトでは次のようになります。
$ ssh master.host $ cat sparrowfile use v6; use Sparrowdo; task_run %( task => 'start nginx ', plugin => 'service', parameters => %( name => 'nginx' ) ); task_run %( task => 'stop nginx ', plugin => 'service', parameters => %( name => 'nginx' , action => 'stop' ) ); task_run %( task => 'add nginx to autostart', plugin => 'service', parameters => %( name => 'nginx' , action => 'enable' ) ); task_run %( task => 'remove nginx from autostart', plugin => 'service', parameters => %( name => 'nginx' , action => 'disable' ) );
テンプレートを使用して構成ファイルを構成する
最後の例はより複雑です。 Template-Toolkit形式のテンプレートを使用して構成ファイルを管理するにはどうすればよいですか。
templaterプラグインを使用します。 すべてが機能するように、Sparrowdoスクリプトと同じディレクトリにテンプレートを作成します。たとえば、
$ ssh master.host $ cat foo.conf.tmpl Hello, my name is [% name %]! I speak [% language %]
次に、テンプレートに基づいて構成ファイルをインストールするスクリプトを作成し、いくつかの変数を渡します。
$ ssh master.host $ cat sparrowfile use v6; use Sparrowdo; task_run %( task => 'install my config', plugin => 'templater', parameters => %( variables => %( name => 'sparrowdo', language => 'perl6' ), target => '/etc/foo.conf', owner => 'user', mode => '644', source => slurp 'foo.conf.tmpl' ) );
その結果、このスクリプトをターゲットサーバーに適用した後、その内容を含むファイル/etc/foo.conf
を取得します。
Hello, my name is sparrowdo! I speak perl6
プライベートプラグインの使用
上記のすべてのプラグインはパブリックです。 これらはすべて、公開された中央のSparrow Sparrowプラグインリポジトリにあります 。 何らかの理由でプラグインを共有したくない場合は、リモートgitリポジトリに配置してそこから使用できます。 これは、 プライベート Sparrowプラグインと呼ばれます。
githubリポジトリにあるprivate package-genericプラグインを使用した場合、システムパッケージインストールスクリプトの例は次のようになります(認証に関する詳細は省略します)。
$ ssh master.host $ cat sparrowfile use v6; use Sparrowdo; set_spl %( package-generic => 'https://github.com/melezhik/package-generic.git' ); task_run %( task => 'install my packages', plugin => 'package-generic', parameters => %( list => 'nginx nano telnet' ) );
これで、既存のSparrowdo / Sparrowシステムの機能の概要は終わりです。 既存のプラグインの完全なリストはこちらにあります 。 新しいプラグインは絶えず追加されています。この記事に興味がある人はプロセスに参加できます。すでに何度か言ったように-新しいSparrowプラグインの作成は、Perl、BashまたはRubyで書く人には可能です、 Outthenticと呼ばれるプラグインを開発するための特別な環境がありますすべての情報を見つけることができるドキュメント。 カスタムスクリプトをSparrowプラグインに変換するプロセスは、 Sparrowのドキュメントでも説明されています。
まとめ
そのため、記事のタイトルが示すように、Sparrowdoは単純ですが、非常に効果的な構成管理ツールです。 単純な理由は、よく知られている構成管理システムには多くの機能が存在しないためです。たとえば、chefなどの予行モードでのスクリプトの実行やプラグイン間の依存関係の管理などです。 ただし、Sparrowdo / Sparrowシステムを他の多くのシステムと区別する重要な機能は、必要なプラグインを迅速に開発し、その後の単一のリポジトリを介したシステムへの「組み込み」機能です。 chefの複雑なLWRP APIと比較して、新しいSparrowプラグインを作成すると、タスクが1桁速く、簡単に解決されます。 また、出力コードの理解、デバッグ、保守が容易になります。
また、Sparrowはプラグインを作成するDSLを課すことはありませんが、3つのプラグイン開発言語(Perl、Bash、Ruby)のすべてに統一されたAPIを提供します。
Sparrowdoシステム自体に関しては、Sparrowプラグイン用の一種のシンクライアントです。 シンプルなAPIを備えており、現代のPerl6言語のすべての能力を使用して、純粋に命令的なスタイルで適用されたプラグインのリストを作成する機能を備えています。
ご清聴ありがとうございました。 いつものように、私は事件、質問、コメントに対する批判を楽しみにしています。
ありがとう
PSおよび最後に、記事のトピックに直接関連しない単純なアンケート。