Sparrowdo-シンプルな構成管理ツール

こんにちは この記事では、単純な構成管理ツールであるSparrowdoについてお話します。 Sparrowdoシステムは、いわゆるSparrowプラグインの使用に基づいていることをすぐに言います。これについては、すでにhabrahabr.ruにいくつかの記事を書いています。


画像画像



したがって、このツールの特徴的な機能:



マスターホストへの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つの条件を提供する必要があります。



両方の基準が満たされている場合、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' ) ); 

このシナリオでは、 CGIDBIの 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および最後に、記事のトピックに直接関連しない単純なアンケート。



Source: https://habr.com/ru/post/J304982/


All Articles