ansibleの実行方法、インベントリファイルやPlaybookの書き方、ベストプラクティスについて取り上げます。
実行方法
1つのモジュールを実行
ansibleコマンド
でモジュールを指定して実行します。
ansible 192.168.33.11 -m ping
192.168.33.11サーバーに対して pingモジュール
を実行しています。
ansibleコマンドの主なオプション
オプション | 概要 |
---|---|
-i INVENTORY | インベントリファイルのパスを指定。デフォルトは /etc/ansible/hosts |
--help | ansibleコマンドのヘルプを表示 |
-m MODULE_NAME | モジュールを指定 |
モジュールについては、ansible-docコマンド
で詳細を確認できます。
または、 https://docs.ansible.com/ansible/modules_by_category.html で確認します。
複数モジュールを実行
Playbookに複数のモジュールを記述して ansible-playbookコマンド
で実行します。
ansible-playbook playbook.yml
主なオプションです。
# -iでインベントリファイルを指定
# -uでSSH接続するリモートユーザー名を指定
# -tで指定したタグが付けられたタスクのみを実行
# --private-keyでSSHの秘密鍵を指定
# SSHは公開鍵認証でも、一般ユーザーがsudoを実行するには-k(--ask-pass)オプションもつける
ansible-playbook -i hosts playbook.yml -u wkuser -t mysql-after --private-key=~/.ssh/id_rsa -k
Playbookをデバックする方法です。
# 構文チェック
ansible-playbook playbook.yml --syntax-check
# 処理対象task一覧チェック
ansible-playbook playbook.yml --list-tasks
# 処理対象ホスト一覧チェック
ansible-playbook playbook.yml --list-hosts
# ステップ実行
ansible-playbook playbook.yml --step
# 実行内容詳細表示(-v or -vvv)
ansible-playbook playbook.yml -v
イベントリファイルの書き方
操作対象のサーバー情報を記述します。イベントリファイルに記述されたサーバーのみ操作することができます。
ansibleコマンド
ansible-playbookコマンド
の「-iオプション」でイベントリファイルを指定することができます。指定しなかった場合 /etc/ansible/hosts
が利用されます。
以下、記述例です。
[web]
192.168.33.11
192.168.33.12:40022
aws_web
[db]
aws_db
webグループとdbグループを定義しています。
Playbookの書き方
Playbookは、YAML形式でタスクを記述するファイルです。
以下、記述例です。
---
- hosts: all
become: true
tasks:
- name: ローカルのファイルをリモートにコピー
copy:
src={{ playbook_dir }}/tmp/test.txt
dest=/tmp
owner=root
group=root
mode=0700
tags: upload
- name: Apacheをインストール
yum: name=httpd state=latest
- 1行目
- YAMLファイルであることを宣言。
- 2行目
- 対象サーバーを指定。
- allの場合、インベントリファイル内の全てのサーバーが対象となる。
- グループ名、ホスト名での指定も可能。
- 3行目
- sudo権限を指定。
- 4行目以降
- タスクを指定。
- このPlaybookでは、copyモジュールとyumモジュールが実行される。
YAMLファイル上でコメントを記述するには、 #
を利用します。
ベストプラクティス
http://docs.ansible.com/ansible/playbooks_best_practices.html でAnsibleの実践的な使い方について紹介されています。
ベストプラクティスでは、Playbookの再利用性を高めるために、ロールによる分割を行っています。
以下は、ベストプラクティスを参考にしたディレクトリ構造例です。
production # 商用環境用のインベントリファイル
staging # 開発環境用のインベントリファイル
group_vars/ # グループに対する変数
all.yml
group1.yml
group2.yml
host_vars/ # ホストに対する変数
hostname1
hostname2
site.yml # webservers.ymlとdbservers.ymlをインクルード
webservers.yml # 必要なRoleを指定して実行
dbservers.yml # 必要なRoleを指定して実行
ansible.cfg # 設定ファイル
roles/
common/ #
tasks/ # タスク用
main.yml #
handlers/ # ハンドラ用
main.yml #
templates/ # テンプレートファイル
ntp.conf.j2 #
files/ # 転送するファイル
bar.txt #
foo.sh #
defaults/ # デフォルト変数(最も優先度が低い)
main.yml #
nginx/
mysql/
ansible.cfg
ansibleの設定ファイルです。以下の順でansible.cfgが探されます。
1. カレントディレクトリ
2. 環境変数の ANSIBLE_CONFIG or ~/ansible.cfg
3. /etc/ansible/ansible.cfg
テンプレートファイル
テンプレートエンジンとしてJinja2が使われます。変数には{{ }}が使われ、制御文には{% %}が使われるようです。
部分的に無効にするには以下のようにします。
{% raw %}
; e.g. for a ISO8601 formatted timestring, use: %{%Y-%m-%dT%H:%M:%S%z}t
{% endraw %}