shnagaiの日記

主にエンジニアリング関連のトピックについて雑多に書いています

はじめてansibleを触って、playbookを実行するまで

ansibleよりChef派でしたが、エージェント要らなかったり気軽という評判を聞きつけて、今度リリース要件にはansibleがよさそうなのでとりあえず使ってみた。

環境

Mac上にVagrantでCent0S6.6を2台

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時間程で。

1__tmux.jpg

所感

想像以上に障壁が低かった。ここらのツールは冪等性が最重要だと思ってるので、どこまでコマンド類が揃っているのかはまだまだわからないが、プロビジョニングはplaybookでやって、複数台で同じコマンド打ちたい時は、ansibleコマンドをグループに対して実行とかやるとかなり使えそう。 どうやら、web見てると出来ないと思ってた、ファイルのプッシュとかも出来そうなのでかなり楽にプロビジョニングの土台出来そう! 只、ディレクトリ構成とか細かいとこは全然わかってないので、もう少し触ってみようと思った。

※Qiitaに投稿か、ブログにしようかいつも迷うな。。。

参考

http://knowledge.sakura.ad.jp/tech/3124/ http://docs.ansible.com/ansible/playbooks_intro.html