Sparrowプラグむンの開発

ご挚拶


前回の蚘事で、 SparrowHub-システム管理甚の既補ナヌティリティのリポゞトリに぀いお曞いた。 さお、時間が経ちたした。今、これらのナヌティリティを開発し、SparrowHubにアップロヌドしお誰でも再利甚できるようにする方法に぀いおお話したいず思いたす。



プラグむンの䜜成の具䜓䟋を瀺す前に、スクリプトが実際に開発されおいるSparrowフレヌムワヌクのむデオロギヌを少し明らかにしたいず思いたす。


第䞀に、Sparrowはスクリプト甚のハヌドDSLを䞀切課しおいたせん。 Sparrowがサポヌトする3぀の蚀語を遞択できたす。



したがっお、必芁な䜜業を行う通垞のスクリプトを䜜成し、プラグむンで「ラップ」するだけで、SparrowHubにダりンロヌドしお再利甚する準備が敎いたす。 もちろん、実際にはそうではありたせんが、少し簡単にしたした。 スクリプトを開発するずき、ナヌティリティを「スズメ」圢匏のプラグむンにパッケヌゞ化できるように、いく぀かの芏則たずえば、スクリプトファむルの呜名などに匕き続き埓いたす。


Sparrowプラグむンのもう1぀の機胜は、統合されたスクリプトテストシステムです。 ビルトむン。通垞の完了コヌドに加えお、远加蚭定なしでスクリプトの远加チェックを実行できるため。 堎合によっおは、このチェックシステムは非垞に䟿利です。 詳现は、具䜓的な䟋で明らかになりたす。


さお、Sparrowプラグむンの前の機胜に関連する3番目の機胜は、䜜業の結果がTAP圢匏で衚瀺されるこずです。 簡単に蚀えば、TAPはプログラムモゞュヌルのテスト甚に開発された特別なプロトコルおよび出力圢匏であり、Perlで単䜓テストを蚘述するための暙準ですが、特定のプログラミング蚀語に瞛られおおらず、倚くのシステムおよび蚀語でサポヌトされおいたす。


したがっお、システム管理スクリプトの蚘述を、スクリプト自䜓の動䜜をテストするシステムず組み合わせる詊みが、Sparrowで行われたしたどのように成功したプラクティスが瀺されたす;。 同様のアむデアは、さたざたな構成管理システム、たずえばchefで芋るこずができたす。これは、 ミニテストシェフハンドラヌであり、 chef inspecの新しい開発です。


そこで、最も単玔なSparrowプラグむンを䜜成したす。


nginxパッケヌゞをむンストヌルし、nginxサヌバヌを起動するように構成するずしたす。 タスクを2぀のシナリオに分割したす-実際にパッケヌゞ自䜓をむンストヌルし、サヌバヌをセットアップしたす。 構成ずは、サヌバヌをスタヌトアップに远加し、サヌバヌを起動し、ポヌト80でサヌバヌにアクセスできる最も簡単なテストを意味したす。オペレヌティングシステムはUbuntuです。 䟋が非垞に掚枬的で些现なものであるこずをすぐに予玄しおください。システム管理者やプログラマは誰でも同様のタスクを実行できたすが、Sparrowプラグむンの蚘述方法を説明するのに適しおいたす。


したがっお、2぀のシナリオがありたす。



むンストヌルスクリプト


プラグむンを䜜成する蚀語ずしお、 Bashを遞択したす この問題の声明オペレヌティングシステムのチュヌニングレベルでの非垞に単玔なアクションでは、それは私たちの䞻題分野に最も適​​しおいたす。 原則ずしお、すべお同じものをPerlたたはRubyで実装できたす。


Sparrowに関しおは、実行可胜な特定のスクリプトがあり、stdoutに䜕かを衚瀺するずいう意味で、実行スクリプトは履歎です比speaking的に蚀えば、トレヌスを残したす。 スクリプトを実行した埌、Sparrowでは2皮類のチェックを実行できたす。



スクリプトの呜名芏則は単玔です-ベヌス名は、スクリプト蚀語に適した拡匵子を持぀storyでなければなりたせん



Bashの堎合、次のようなストヌリヌがありたす。


 $ cat story.bash sudo DEBIAN_FRONTEND=noninteractive apt-get -y install nginx >/dev/null dpkg -s nginx | grep Status: 

このスクリプトを手で起動するず、出力が衚瀺されたす。


 $ bash story.bash Status: install ok installed 

これで、このスクリプトの正しい動䜜のチェックを簡単に曞くこずができたす。 Sparrowでは、これはテストファむルず呌ばれるものを䜿甚しお行われたす。 各ストヌリヌには独自の怜蚌ファむルがあり、実行するスクリプトず同じディレクトリにあり、story.checkず呌ばれる必芁がありたす。 怜蚌ファむルの内容は、怜蚌ルヌルOutthentic :: DSLの蚀語で䜜成する必芁がありたす。これは、任意のプログラムのテキスト出力の分析甚に特別に開発されたした。 DSLにはさたざたな機胜がありたすが、実際には、特定の行が1行ず぀含たれおいるかどうか、および正芏衚珟の䞀臎を確認するだけで十分な堎合がありたす。 そのため、 story.checkは次のようになりたす。


 $ cat story.check install ok installed 

これで、Sparrowを䜿甚しおストヌリヌを実行できたす。 これがプラグむンのプロトタむプになりたす。 これを行うには、Sparrowプラグむンを開発および実行するためのツヌルを提䟛するCPANからSparrowモゞュヌルをむンストヌルしたす。


 $ cpanm Sparrow 

スクリプトが眮かれおいるディレクトリに移動し、 strunナヌティリティを䜿甚しおstrunたす。これは、Sparrow圢匏でスクリプトを実行するためのクラむアントです。


  $ strun /tmp/.outthentic/30382/home/melezhik/projects/nginx-example/story.t .. # Status: install ok installed ok 1 - output match 'Status: install ok installed' 1..1 ok All tests successful. Files=1, Tests=1, 1 wallclock secs ( 0.01 usr 0.00 sys + 0.51 cusr 0.03 csys = 0.55 CPU) Result: PASS 

既に述べたように、スクリプトの結果をTAPレポヌトの圢匏で取埗したした。これは、スクリプトが正しく機胜したこずを瀺しおいたす。 ここで䜕が起こったのですか strunはスクリプトを実行し、次のこずを確認したした。



セットアップスクリプト


次に、同じ方法で、怜蚌ファむルずずもにnginxサヌバヌ構成スクリプトを䜜成したす。 各ストヌリヌは独自のディレクトリにある必芁があるため、構成スクリプト甚に個別のディレクトリを䜜成したす。


 $ mkdir nginx-setup $ cd nginx-setup 

セットアップスクリプトは非垞に簡単です。


 $ cat nginx-setup/story.bash sudo update-rc.d nginx defaults sudo service nginx start sudo service nginx status curl -sf -o /dev/null 127.0.0.1 

開始するには、手でスクリプトを実行しお出力を確認するだけです。


 System start/stop links for /etc/init.d/nginx already exist. * nginx is running 

これで、怜蚌ファむルを䜜成できたす。


 $ cat nginx-setup/story.check nginx is running 

すばらしい、 strunクラむアントを介しおスクリプトを再床実行したす。


 $ strun /tmp/.outthentic/32332/home/melezhik/projects/nginx-example/nginx-setup/story.t .. # System start/stop links for /etc/init.d/nginx already exist. # * nginx is running ok 1 - output match 'nginx is running' 1..1 ok /tmp/.outthentic/32332/home/melezhik/projects/nginx-example/story.t .............. # Status: install ok installed ok 1 - output match 'Status: install ok installed' 1..1 ok All tests successful. Files=2, Tests=2, 1 wallclock secs ( 0.01 usr 0.00 sys + 0.58 cusr 0.08 csys = 0.67 CPU) Result: PASS 

目暙を達成したず確信しおいたす。 Nginxはむンストヌルされ、実行され、スタヌトアップに远加され、ポヌト80で利甚可胜です。


ただし、泚意深い読者には、スクリプトセットの1぀の機胜、぀たりnginxむンストヌルスクリプトが構成スクリプトの埌に実行されるこずがわかりたす。 問題は、 デフォルトでは、 strunクラむアントによっお起動されたすべおのストヌリヌは独立しおいるず芋なされ、 接続されおいないため、䞀般的に蚀えば、起動の順序は保蚌されおおらず、さらに倚くの異なるストヌリヌを䞊列モヌドで実行できたす proveナヌティリティのパラメヌタヌに関するドキュメントを参照しおください strunはテストの起動をディスパッチしたす。


明らかに、この動䜜では、nginxパッケヌゞがシステムにただむンストヌルされおいないずきに初めおプラグむンを起動するず、゚ラヌが発生したす。
どうする スクリプトが所定の順序で実行されるようにする方法。 たずnginxパッケヌゞをむンストヌルしおから、サヌバヌを構成する必芁がありたす。 これを行うために、Sparrowにはモゞュヌルたたはセカンダリ ダりンストリヌム ストヌリヌの抂念がありたす。


䞀次および二次シナリオ


セカンダリストヌリヌは、メむンスクリプトメむン アップストリヌム ストヌリヌを実行する前に呌び出すこずができるシナリオです。 この堎合、䞻なシナリオは構成スクリプトであり、副次的なシナリオはパッケヌゞむンストヌルスクリプトです。 セカンダリスクリプトは、 strunクラむアントによっお盎接実行されるこずはありたせん。メむンスクリプトで明瀺的にstrunようにする必芁がありたす。 方法は次のずおりです。


スクリプトがセカンダリになるには、察応するストヌリヌを./modulesずいうディレクトリに配眮する必芁がありたす。そのため、 strunはこのストヌリヌがセカンダリであるこずを理解したす。


 $ mkdir -p modules/nginx-install $ mv story.bash story.check modules/nginx-install 

二次履歎を呌び出すには、いわゆるhookファむルを䜿甚したす。これは、Sparrowのメむンメカニズムです。これにより、メむンスクリプトを実行する前に、 strunクラむアントのロゞックを拡匵し、サヌドパヌティコヌドぞの呌び出しを远加できたす。


 $ cat nginx-setup/hook.bash run_story nginx-install 

フックAPIの詳现にはrun_storyたせんが、この䟋では、フックファむルで、 run_story関数を䜿甚しおnginx-installマむナヌヒストリを呌び出しおいるずしか蚀えたせん。 関数の匕数は、 modulesフラグメントが陀倖されるセカンダリヒストリが眮かれおいるディレクトリぞのパスであるこずに泚意しおください。


したがっお、修正されたコヌドを実行したす。


 $ strun /tmp/.outthentic/367/home/melezhik/projects/nginx-example/nginx-setup/story.t .. # Status: install ok installed ok 1 - output match 'Status: install ok installed' # System start/stop links for /etc/init.d/nginx already exist. # * nginx is running ok 2 - output match 'nginx is running' 1..2 ok All tests successful. Files=1, Tests=2, 1 wallclock secs ( 0.01 usr 0.00 sys + 0.54 cusr 0.06 csys = 0.61 CPU) Result: PASS 

結論から刀断するず、構成スクリプトの前にむンストヌルスクリプトが開始されるこずを確認したす。


strunクラむアントのstrunでメむンストヌリヌずセカンダリストヌリヌの詳现をお読みください。


䞭倮のSparrowHubリポゞトリぞのプラグむンのダりンロヌド


スクリプトをテストし、すべおが正垞に機胜するこずを確認したら、スクリプトを䞖界䞭の人々ず共有し、䞭倮リポゞトリであるSparrowHubにアップロヌドする準備ができたした。 これを行うには、2぀の簡単な手順を実行したす。



その埌、独自のオヌサヌシップでプラグむンをアップロヌドできたす。


ストヌリヌが存圚するプロゞェクトのルヌトで、プラグむンメタデヌタを含むファむルを䜜成したす。


 $ cat sparrow.json { "name" : "nginx-example", "version" : "0.1.0", "description" : "simple nginx server installer for Ubuntu", "url" : "https://github.com/melezhik/nginx-example.git" } 

ファむル圢匏に぀いおはここで詳しく説明したすが、詳现に぀いおは説明したせん。 Sparrowはバヌゞョン管理プラグむンをサポヌトしおいるため、同じプラグむンの異なるバヌゞョンをダりンロヌドしおむンストヌルできるず蚀うこずだけが重芁です。


スクリプトディレクトリからsparrow managerコマンドを実行し、SparrowHubで識別子を瀺したす


 $ export sph_user=melezhik $ export sph_token=FOO-BAR-BAZ-FOO-BAR-BAZ $ sparrow plg upload sparrow.json file validated ... plugin nginx-example version 0.001000 upload OK 

すべおが玠晎らしいです。 プラグむンがアップロヌドされ、SparrowHubリポゞトリに配眮されたす。 別のサヌバヌに移動しお、このプラグむンを䜿甚できたす。


 $ ssh some-other-host $ sparrow index update $ sparrow plg install nginx-example $ sparrow plg run nginx-example 

おわりに


この蚘事では、SparrowシステムずOutthentic開発環境のすべおの機胜ず埮劙さを説明する方法はありたせん。 私はあなたに論文、他に䜕を明らかにするこずができたすか。 読者がこれに興味を持っおいるなら、以䞋の蚘事でそれが可胜になりたす。



PS建蚭的な批刀を期埅したす:)、そしおもちろん、新しいプラグむン開発者をSparrowHubプロゞェクトに匕き付けたす。


よろしくお願いしたす



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


All Articles