ãæšæ¶ïŒ
ååã®èšäºã§ã SparrowHub-ã·ã¹ãã 管ççšã®æ¢è£œãŠãŒãã£ãªãã£ã®ãªããžããªã«ã€ããŠæžããã ããŠãæéãçµã¡ãŸãããä»ããããã®ãŠãŒãã£ãªãã£ãéçºããSparrowHubã«ã¢ããããŒãããŠèª°ã§ãåå©çšã§ããããã«ããæ¹æ³ã«ã€ããŠã話ããããšæããŸãã
ãã©ã°ã€ã³ã®äœæã®å
·äœäŸã瀺ãåã«ãã¹ã¯ãªãããå®éã«éçºãããŠããSparrowãã¬ãŒã ã¯ãŒã¯ã®ã€ããªãã®ãŒãå°ãæããã«ããããšæããŸãã
第äžã«ãSparrowã¯ã¹ã¯ãªããçšã®ããŒãDSLãäžå課ããŠããŸããã SparrowããµããŒããã3ã€ã®èšèªãéžæã§ããŸãã
- Perl
- ã«ããŒ
- ããã·ã¥
ãããã£ãŠãå¿
èŠãªäœæ¥ãè¡ãéåžžã®ã¹ã¯ãªãããäœæãããã©ã°ã€ã³ã§ãã©ãããããã ãã§ã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çš®é¡ã®ãã§ãã¯ãå®è¡ã§ããŸãã
- å®äºã³ãŒããæåããããšã確èªããŸãïŒ== 0ïŒ
- ã¹ã¯ãªããã®ããã¹ãåºåã«ç¹å®ã®ããŒã¿ãå«ãŸããŠããããšã確èªããŸãïŒæååãšæ£èŠè¡šçŸãžã®æºæ ã確èªããŸãïŒ
ã¹ã¯ãªããã®åœåèŠåã¯åçŽã§ã-ããŒã¹åã¯ãã¹ã¯ãªããèšèªã«é©ããæ¡åŒµåãæã€story
ã§ãªããã°ãªããŸããïŒ
- Bash-story.bash
- Perl-story.pl
- ã«ããŒ-story.rb
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
ã¯ã¹ã¯ãªãããå®è¡ããæ¬¡ã®ããšã確èªããŸããã
- æ£åžžçµäºã³ãŒã
- ã¹ã¯ãªããã¯ããStatusïŒinstall ok installedããšããè¡ãstdoutã«åºåããŸãã
ã»ããã¢ããã¹ã¯ãªãã
次ã«ãåãæ¹æ³ã§ãæ€èšŒãã¡ã€ã«ãšãšãã«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éçºç°å¢ã®ãã¹ãŠã®æ©èœãšåŸ®åŠãã説æããæ¹æ³ã¯ãããŸããã ç§ã¯ããªãã«è«æãä»ã«äœãæããã«ããããšãã§ããŸããã ïŒèªè
ãããã«èå³ãæã£ãŠãããªãã以äžã®èšäºã§ãããå¯èœã«ãªããŸãïŒã
- Perlããã³Rubyçšã®Outthenitc API
- ãã€ããŒã¹ããŒãªãŒã®ãªãã·ã§ã³
- Outthentic :: DSL-ãã¬ãŒã³ããã¹ãããªããŒã¿ãŒïŒæ€èšŒã«ãŒã«ãžã§ãã¬ãŒã¿ãŒãã€ãã³ãããã£ãããããã¹ããããã¯ãªã©ïŒ
- Sparrowãã©ã°ã€ã³ã®æ§æïŒã¿ã¹ã¯ãã©ã³ã¿ã€ã ãã©ã¡ãŒã¿ãŒãYAMLæ§æãã¡ã€ã«ãããã³æ§æ::äžè¬åœ¢åŒïŒ
PS建èšçãªæ¹å€ãæåŸ
ããŸã:)ããããŠãã¡ãããæ°ãããã©ã°ã€ã³éçºè
ãSparrowHubãããžã§ã¯ãã«åŒãä»ããŸãã
ãããããé¡ãããŸãïŒ