はじめてansibleを触って、playbookを実行するまで
ansibleよりChef派でしたが、エージェント要らなかったり気軽という評判を聞きつけて、今度リリース要件にはansibleがよさそうなのでとりあえず使ってみた。
環境
ansibleサーバ:192.168.50.5 プロビジョン対象:192.168.50.6
EPELのリポジトリを追加してインストール
$ sudo rpm -ivh http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/i386/epel-release-6-8.noarch.rpm http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/i386/epel-release-6-8.noarch.rpm を取得中 警告: /var/tmp/rpm-tmp.sZnYCN: ヘッダ V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY 準備中... ########################################### [100%] 1:epel-release ########################################### [100%] $sudo yum install -y ansible
設定ファイル場所とか(デフォルトのパス)
/etc/ansible --ansible.cfg --hosts --roles --各playbookを置く??
事前準備 対象サーバに事前にsshの鍵なし認証を出来るようにしておく
秘密鍵作って公開鍵を相手サーバに登録する 下記参照で!! http://qiita.com/nagais/items/a4e3d7ef2aba43bb0e4d
初めてのansibleコマンド実行まで
hostsに対象マシンを追加
[グループ名]でグループ定義らしいのでとりあえずtestgrpを作る
# This is the default ansible 'hosts' file. # # It should live in /etc/ansible/hosts # # - Comments begin with the '#' character # - Blank lines are ignored # - Groups of hosts are delimited by [header] elements # - You can enter hostnames or ip addresses # - A hostname/ip can be a member of multiple
[testgrp] 192.168.50.6
ついに初めてのansibleコマンド!!
-mオプション
引数でモジュールを指定するらしいので、まずはテスト用に標準で用意されているpingモジュールを試してみる!
$ansible testgrp -m ping 192.168.50.6 | success >> { "changed": false, "ping": "pong" }
-aオプション
指定したコマンドを対象ホスト上で実施してくれる
$ansible testgrp -a "/bin/pwd" 192.168.50.6 | success | rc=0 >> /home/vagrant
ついでに、初めてのplaybookも実行してみる
やりたいのは、新規リリースサーバの手順をcode化することなので、Chefでいうレシピ的なものという噂のplaybookを使ってみる。
どこにplaybookを置くのが最適なのかはわからなかったので、とりあえず/etc/ansible配下においてみた。
かなり簡単だけどbind-utilsをインストールして、yahoo.co.jpを引いてみるplaybook
- hosts: testgrp remote_user: vagrant sudo: yes tasks: - name: install bind-utils yum : name=bind-utils notify: dig test handlers: - name: dig test command: /usr/bin/dig yahoo.co.jp
で、実行
全部通った。 すごい簡単というか、Chefの時はchef-soloで初回実行するまでに、結構時間かかったが、ここまで1時間程で。
所感
想像以上に障壁が低かった。ここらのツールは冪等性が最重要だと思ってるので、どこまでコマンド類が揃っているのかはまだまだわからないが、プロビジョニングはplaybookでやって、複数台で同じコマンド打ちたい時は、ansibleコマンドをグループに対して実行とかやるとかなり使えそう。 どうやら、web見てると出来ないと思ってた、ファイルのプッシュとかも出来そうなのでかなり楽にプロビジョニングの土台出来そう! 只、ディレクトリ構成とか細かいとこは全然わかってないので、もう少し触ってみようと思った。
※Qiitaに投稿か、ブログにしようかいつも迷うな。。。
参考
http://knowledge.sakura.ad.jp/tech/3124/ http://docs.ansible.com/ansible/playbooks_intro.html