この記事を書いている時点で Ansible の安定版はバージョン 1.9 系だけど、もうしばらくすると 2.0 系がリリースされそうな雰囲気になっている。 メジャーバージョンが上がるということもあって 2.0 系には一部に後方互換性のない変更も含まれている。 そこで、作ったものやこれから作るものが将来的にも動くか否かについて、今のうちから気にしておいた方が良さそうだなと考えた。 そんなわけで、今回は開発中の 2.0 系アルファリリースをインストールしてみる。
検証環境には Mac OS X を使った。
$ uname -s Darwin $ sw_vers ProductName: Mac OS X ProductVersion: 10.10.5 BuildVersion: 14F27
リポジトリをチェックアウトする
まずは GitHub のリポジトリからソースコードをクローンする。
$ git clone https://github.com/ansible/ansible.git $ cd ansible
Git のタグを確認すると、今のところ 2.0 系は alpha2 までリリースされているようだ。
$ git tag -l | grep ^v2 v2.0.0-0.1.alpha1 v2.0.0-0.2.alpha2
上記のタグをチェックアウトする。
$ git checkout -b v2.0a2 v2.0.0-0.2.alpha2 Switched to a new branch 'v2.0a2'
そして Git のサブモジュールを読み込んだら、ひとまず準備完了。
$ git submodule update --init --recursive
Makefile を一部手直しする
インストールには make を使うみたい。 ただ、その中で使っている xargs に GNU 拡張のオプションがあることを想定していたのでちょっと手直しする。 巷の Linux ディストリビューションのように、最初から GNU xargs が入っている場合この作業は必要ない。
Homebrew で GNU xargs と GNU sed をインストールしておく。 これで GNU 版の xargs と sed が gxargs と gsed という名前で使えるようになる。
$ brew install findutils gnu-sed
実はほんとに必要なのは GNU xargs の方だけなんだけど。
Makefile の中の xargs を gxargs に置換する。
$ gsed -i -e "s:xargs:gxargs:g" Makefile
見事に 1 文字パッチ。
$ git diff -u Makefile diff --git a/Makefile b/Makefile index 508be40..e35077c 100644 --- a/Makefile +++ b/Makefile @@ -142,7 +142,7 @@ clean: @echo "Cleaning up byte compiled python stuff" find . -type f -regex ".*\.py[co]$$" -delete @echo "Cleaning up editor backup files" - find . -type f \( -name "*~" -or -name "#*" \) |grep -v test/units/inventory_test_data/group_vars/noparse/all.yml~ |xargs -n 1024 -r rm + find . -type f \( -name "*~" -or -name "#*" \) |grep -v test/units/inventory_test_data/group_vars/noparse/all.yml~ |gxargs -n 1024 -r rm find . -type f \( -name "*.swp" \) -delete @echo "Cleaning up manpage stuff" find ./docs/man -type f -name "*.xml" -delete
Ansible をインストールする
make コマンドで Ansible をインストールする。 インストール先がシステムの場合には適宜 sudo なんかをする感じで。 今回はインストール先の環境に virtualenv を使ったので不要。
$ make $ make install
パッケージマネージャ pip で確認すると ansible の 2.0 系がインストールされたことが分かる。
$ pip list | grep -i ansible ansible (2.0.0)
pip が入っていないときは sudo easy_install pip とかして入れておこう。
もちろん ansible コマンドや ansible-playbook コマンドも使えるようになる。
$ ansible --version ansible 2.0.0 config file = configured module search path = None $ ansible-playbook --version ansible-playbook 2.0.0 config file = configured module search path = None
試しにちょっと動かしてみる。
$ ansible -i "localhost," -c local -m ping localhost localhost | SUCCESS => { "changed": false, "ping": "pong" } $ cat << EOF > site.yml --- - hosts: - all tasks: - name: greet debug: msg="Hello, World!" EOF $ ansible-playbook -i "localhost," -c local site.yml PLAY *************************************************************************** TASK [setup] ******************************************************************* ok: [localhost] TASK [greet] ******************************************************************* ok: [localhost] => { "changed": false, "msg": "Hello, World!" } PLAY RECAP ********************************************************************* localhost : ok=2 changed=0 unreachable=0 failed=0
ばっちり。
別のやり方
開発するときなんかには、わざわざ Python 実行環境にインストールしなくてもいい方法が用意されているみたい。
make install の代わりに以下のコマンドを使うと、ソースコードにパスだけが通った状態になる。
$ source ./hacking/env-setup
この状態で ansible* コマンドが使える。
$ ansible --version ansible 2.0.0 (v2.0a2 70677b030b) last updated 2015/09/15 19:47:39 (GMT +900) lib/ansible/modules/core: (detached HEAD 2520627fe7) last updated 2015/09/15 19:47:51 (GMT +900) lib/ansible/modules/extras: (detached HEAD 5cd0fab9d0) last updated 2015/09/15 19:47:56 (GMT +900) config file = configured module search path = None $ ansible-playbook --version ansible-playbook 2.0.0 (v2.0a2 70677b030b) last updated 2015/09/15 19:47:39 (GMT +900) lib/ansible/modules/core: (detached HEAD 2520627fe7) last updated 2015/09/15 19:47:51 (GMT +900) lib/ansible/modules/extras: (detached HEAD 5cd0fab9d0) last updated 2015/09/15 19:47:56 (GMT +900) config file = configured module search path = None
ソースコードの変更内容がダイレクトに反映されてよさそう。
一点気をつけるべきなのは、このやり方だと依存パッケージが入らない。 なのでセットアップスクリプトの内容から依存パッケージを確認した上で別途インストールしよう。
$ grep requires setup.py install_requires=['paramiko', 'jinja2', "PyYAML", 'setuptools', 'pycrypto >= 2.6', 'six'], $ pip install paramiko jinja2 PyYAML pycrypto six
いじょう。
まとめ
今回は開発中の Ansible 2.0 をインストールしてみた。 後はこの環境を使ってこれまでに作ったものとかこれから作るものが動くことを確認していけばよさそうかな。