JavaScriptで自動化！Pacifista入門

皆さん環境構築とか、システムの設定作業とかって、どのように作業していますか？

古きは環境構築手順書を使って行なっていましたが、昨今の自動化ブームに伴って、
chefやcapistrano、fabricなどのツールを検討されている方も多いと思います。

ただ、最近はやりの自動化ツールって、RubyとかPythonを多少知っている必要があったり、
独自DSLや特殊な用語を覚える必要があったりと、学習コストが高くてとっつきにくくないですか？
まわりにススメても「あー便利そうだねけど難しそうだね」で終わってしまうパターンが多々あります。

#そこでPacifistaですよ
Pacifistaは「環境構築をまるごとプログラミングする。それもシンプルに」を目的としたOSSの自動化ツールです。

http://pacifista.ukiuni.org/

Pacifistaには、以下の特徴があります。

* JavaScriptでコードを書く事が出来る。
* JavaScript以外にも、Ruby,Python,Groovyなど複数の言語に対応している。
* 対象となるサーバにSSHでコマンドを投げるので、エージェント不要。
* EC2やVirtualBox上での仮想マシン操作や、構築後のテストなど、機能が豊富。
* 仮想マシン起動→構築→テストを１ファイルでシンプルに書くことが出来る。

個人的には、社内の大抵の人が読み書き出来るJavaScriptで書けるというのがとても魅力でした。

#Pacifistaのセットアップ
Javaがインストールされた環境に、公式サイトからダウンロードしたファイルを展開するだけです。簡単。

#使ってみよう！
ではPacifistaを使って、サーバにApacheをインストールしてみます。
コードはJavaScriptで記述します。JavaScriptが何となく読める人だったら、容易に理解出来ると思います。

```js:apacheinstall.js
//対象のサーバにssh接続するための設定
var host = "192.168.10.100"
var sshPort = "22"
var user = "user"
var password = "pass"

//対象のサーバに接続
var remote = Remote.create();
remote.connect(host, sshPort, user, password);

//rpm -q httpdを実行し、Apacheがインストールされていればエラー終了する
if (remote.execute("rpm -q　httpd").contains("httpd")) {
        throw "httpd is already installed"
}

//Apacheのインストールと起動
remote.call("sudo yum install -y httpd");
remote.call("sudo /etc/init.d/httpd start");
remote.call("sudo /sbin/chkconfig httpd on");

//80番ポートに接続できるかテスト
var tester = Tester.create(remote);
tester.assertPortOpen(80);
````

作成したコードは、Scriptsフォルダに配置しましょう。JavaScriptで記述しているので、拡張子は.jsにします。

作成したコードを実行する際は、以下のようにコマンドを実行します。

````
$ bin/pacifista
#sudo yum install -y httpd
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.jaist.ac.jp
 * extras: ftp.jaist.ac.jp
 * updates: ftp.jaist.ac.jp
base                                                     | 3.7 kB     00:00     
extras                                                   | 3.5 kB     00:00     
updates                                                  | 3.4 kB     00:00     
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package httpd.i686 0:2.2.15-29.el6.centos will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package       Arch         Version                       Repository       Size
================================================================================
Installing:
 httpd         i686         2.2.15-29.el6.centos          updates         828 k

Transaction Summary
================================================================================
Install       1 Package(s)

Total download size: 828 k
Installed size: 2.8 M
Downloading Packages:
httpd-2.2.15-29.el6.centos.i686.rpm                      | 828 kB     00:00     
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Warning: RPMDB altered outside of yum.
  Installing : httpd-2.2.15-29.el6.centos.i686                              1/1 
  Verifying  : httpd-2.2.15-29.el6.centos.i686                              1/1 

Installed:
  httpd.i686 0:2.2.15-29.el6.centos                                             

Complete!
#sudo /etc/init.d/httpd start
httpd を起動中: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
                                                           [  OK  ]
#sudo /sbin/chkconfig httpd on
````

はい、サックリとApacheがインストール出来ました！！
コード書いてコマンド一発と、とてもシンプルですね。今回試してみて、ハマりどころゼロでした。
事例はとても少ないですが、公式サイトの情報だけで十分に使いこなせます。

というわけで、Pacifista、オススメです。興味ある方是非使ってみて下さい。