インストール要件の確認
AnsibleはPython 2.6+なので要件を確認。
$ python --version
Python 2.7.5
インストール
AnsibleはEPELリポジトリからインストールするので、EPELリポジトリが未インストールの場合はEPELリポジトリをインストールする。
$ sudo yum -y install epel-release
Ansibleをインストールする。
$ sudo yum -y install ansible
Ansibleのバージョン確認する。
$ ansible --version
ansible 2.1.1.0
config file = /etc/ansible/ansible.cfg
configured module search path = Default w/o overrides
あっさりインストールが完了。
Ansibleを構成する主な3要素
- インベントリ(inventory)
インベントリは構成管理をする対象ノードへの接続情報を記載したもの。
デフォルトでは /etc/ansible/hosts
だが、環境変数 ANSIBLE_HOSTS
を設定したり、-i
オプションでhosts
ファイルへのパスを指定可能です。
- モジュール(module)
モジュールはユーザーを作成したり、ファイルをコピーしたりするもので、多くは冪等性が保たれたものとなります。基本モジュールをそのまま利用するだけで大抵の事ができます。自分でモジュールを作ることもできます。モジュールは-m
オプションで個別に実行することも可能です。
- プレイブック(playbook)
プレイブックは複数のモジュールを組み合わせて、WEBサーバを構築するとか、DBサーバを構築するとか、の手順を記述したものです。こちらも冪等性を保つように作ります。
Hello World
-m
オプションでping
モジュールをlocalhost
ノードに対して実行します。
$ ansible -m ping localhost
[WARNING]: provided hosts list is empty, only localhost is available
localhost | SUCCESS => {
"changed": false,
"ping": "pong"
}
インベントリの定義
インベントリが空だと警告が出てウザいので、ノードlocalhost
を定義しておきます。
$ echo "localhost ansible_host=127.0.0.1 ansible_connection=local" > hosts
Ansibleは通常SSHで接続をします。
インベントリにansible_connection=local
と記述するか、--connection local
オプションをするとSSHを使わずにローカルで実行します。
-i
オプションでインベントリファイルhosts
を指定し、-m
オプションでping
モジュールをlocalhost
ノードに対して実行します。
$ ansible -i hosts -m ping localhost
localhost | SUCCESS => {
"changed": false,
"ping": "pong"
}
はい、警告が出なくなりました。
全てのノードにpingモジュールを実行
-i
オプションでインベントリとしてhosts
を指定し、-m
オプションでping
モジュールを、インベントリに記載の全てのノードに実行します。
$ ansible -i hosts -m ping all
localhost | SUCCESS => {
"changed": false,
"ping": "pong"
}
インベントリには1つしか記載がないので結果は変わりません。