ansible による pyramid 環境構築

ansible を使ってみたいということで。
Chef とかといったような構成管理ツールです。Python 製ですが Python の知識はいらず、yaml 形式のシンプルにかけるものです。
チュートリアルhttp://yteraoka.github.io/ansible-tutorial/を上から自分の環境に合わせて実行してみました。Ubuntu なので yum でなく apt モジュールになります。

インストールされている前提。pip からインストールできたはずです。

疎通確認


ansible で接続するには、host 名が書かれた hosts ファイルが必要です。
カレントディレクトリを優先して読んでくれるので、そこに作成。
.ssh/config に設定してある Host も使用可能。

echo hostname > hosts


下記のコマンドで、今作った hosts ファイルを指定してちゃんと相手に接続できるか確認します。

% ansible -i hosts hostname -m ping
devops | success >> {
"changed": false,
"ping": "pong"
}


接続成功。
コマンドを実行してみる。

ansible -i hosts hostname -a 'uname -r'
devops | success | rc=0 >>
3.2.0-29-generic

できた。
試しに vim を install してみます。

% ansible -i hosts devops -m apt -s -a name=vim
devops | success >> {
"changed": false
}


install 済みなので失敗。

Playbook


playbook を書いてみます。言語に依存しないシンプルなファイルらしい。
まずインベントリファイルでグループを定義。

% cat hosts
[pyramid]
hostname


playbook の作成。

---
- hosts: pyramid
sudo: yes
tasks:
- name: be sure httpd is installed
apt: name=apache2 state=installed

- name: be sure httpd is running and enabled
service: name=apache2 state=running enabled=yes


syntax のチェック。

% ansible-playbook -i hosts simple-playbook.yml --syntax-check

playbook: simple-playbook.yml


task の一覧を確認。

% ansible-playbook -i hosts simple-playbook.yml --list-tasks

playbook: simple-playboopk.yml

play #1 (pyramid):
be sure httpd is installennd
be sure httpd is running and enabled


実際に実行するとどうなるのかのチェック。

% ansible-playbook -i hosts simple-playbook.yml --check

PLAY [pyramid] ****************************************************************

GATHERING FACTS ***************************************************************
ok: [hostname]

TASK: [be sure httpd is installed] ********************************************
ok: [hostname]

TASK: [be sure httpd is running and enabled] **********************************
ok: [hostname]

PLAY RECAP ********************************************************************
hostname : ok=3 changed=0 unreachable=0 failed=0

エラーがあると赤字で表示されるらしい。

実際に実行してみる。

% ansible-playbook -i hosts simple-playbook.yml

PLAY [pyramid] ****************************************************************

GATHERING FACTS ***************************************************************
ok: [hostname]

TASK: [be sure httpd is installed] ********************************************
ok: [hostname]

TASK: [be sure httpd is running and enabled] **********************************
ok: [hostname]

PLAY RECAP ********************************************************************
hostname : ok=3 changed=0 unreachable=0 failed=0

成功。

下記のコマンドで対象の情報を確認。ながながと表示されるので出力は割愛。

% ansible -m setup -i hosts devops


以上が ansible の基礎。次は pyramid について。

Pyramid

python 製の小さい web framework。ansible を使って置いてみます。

playbook はこんなかんじ。python , pip , virtualenv, pyramid の順で入れて行きます。

---
- hosts: pyramid
sudo: yes
tasks:
- name: install python
apt: name=python2.7-dev state=installed

- name: install pip
apt: name=python-pip state=installed

- name: install virtualenv
pip: name=virtualenv

- name: install pyramid
pip: name=pyramid


結果は以下のように。試しに一度実行してしまったので changed になるはずのところが ok になってたりしますが。

% ansible-playbook -i hosts pyramid-playbook.yml

PLAY [pyramid] ****************************************************************

GATHERING FACTS ***************************************************************
ok: [hostname]

TASK: [install python] ********************************************************
ok: [hostname]

TASK: [install pip] ***********************************************************
ok: [hostname]

TASK: [install virtualenv] ****************************************************
changed: [hostname]

TASK: [install pyramid] *******************************************************
changed: [hostname]

PLAY RECAP ********************************************************************
hostname : ok=5 changed=2 unreachable=0 failed=0


開発環境を作る場合、root ではなく user で実行したい……ということで、とりあえずファイル分割。他にも何か方法があるかもしれないけれど。su [username]とか。

Python、pip、virtualenvのインストールまで。

---
- hosts: pyramid
sudo: yes
tasks:
- name: install python
apt: name=python2.7-dev state=installed

- name: install pip
apt: name=python-pip state=installed

- name: install virtualenv
pip: name=virtualenv


home directory に pyramid directory を作って、virtualenv の設定、virtualenv 環境へ pyramid のインストールまで。

---
- hosts: pyramid
sudo: no
tasks:
- name: make pyramid directory
file: dest=/home/devops/pyramid state=directory

- name: make develop env to use virtualenv
command: /usr/local/bin/virtualenv ~/pyramid

- name: install pyramid
command: ~/pyramid/bin/pip install pyramid


以上。

まとめ

今回は ansible のチュートリアルと、pyramid の開発環境を ansible でサクッと作ってみました。
確かに ansible はシンプルで、yaml ファイルもかなり書きやすい。remote 側に何かをインストールする必要もないのが簡単でした。
ただ私自身がこういうソフトになれてなくて、ssh で入って普通にコマンドたたいて試す、とかやっちゃってたのでもっと有効活用できたらいいな、と感じました。
次回は ansible と vagrant と関連させたり playbook のディレクトリを学んだり、pyramid の本番環境を ansible で書いてみたりしてみます。

参考

http://yteraoka.github.io/ansible-tutorial/

コメント

このブログの人気の投稿

相互インクルード対策

make error "Circular"

gdb操作