192
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

JavaScriptで自動化!Pacifista入門

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

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

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

そこでPacifistaですよ

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

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

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

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

Pacifistaのセットアップ

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

使ってみよう!

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

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、オススメです。興味ある方是非使ってみて下さい。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
192
Help us understand the problem. What are the problem?