「初めてのAnsible」を読み進めながらのメモ
前掲
初めてのAnsible(1章:イントロダクション)
初めてのAnsible(2章:Playbook:始めてみよう)
初めてのAnsible(3章:インベントリ:サーバーの記述)
初めてのAnsible(4章:変数とファクト)
初めてのAnsible(7章:複雑なPlaybook)
初めてのAnsible(8章:ロール:プレイブックのスケールアップ)
初めてのAnsible(9章:Ansibleの高速化)
初めてのAnsible(10章:カスタムモジュール)
Ansibleとは
-
構成管理ツール
- VagrantやDocker、種々のIaaSなんかも使える
- ホスト(サーバ)にエージェントをインストール必要がない(必要なのは以下のみ)
- ホスト:Python2.5+ or Python2.4(simplejsonライブラリ必要)
- コントロールマシン:Python2.6+
ディレクトリ構成
- 公式ドキュメントのBest Practicesにある例を
playbooks/
├── inventories/
│ ├── production/
│ │ ├── hosts.yml # production環境のインベントリファイル
│ │ ├── group_vars/ # production環境のグループ変数設定ファイル群
│ | | ├── group1
│ | | └── group2
│ │ └── host_vars/ # production環境のホスト変数ファイル群
│ | ├── hostname1
│ | └── hostname2
│ └── staging/
│ ├── hosts.yml # staging環境のインベントリファイル
│ ├── group_vars/ # staging環境のグループ変数ファイル群
│ | ├── group1
│ | └── group2
│ └── host_vars/ # staging環境のホスト変数ファイル群
│ ├── hostname1
│ └── hostname2
├── library/ # カスタムモジュール
├── filter_plugins/ # フィルタープラグイン
├── site.yml # マスターplaybook
├── webservers.yml # webserver層のplaybook
├── dbservers.yml # dbserver層のplaybook
└── roles/ # ロールファイル群
├── common/ # commonロールファイル群
| ├── tasks/ # タスク群
| | └── main.yml
| ├── handlers/ # ハンドラ群
| | └── main.yml
| ├── templates/ # テンプレートファイル群
| | └── ntp.conf.j2
| ├── files/ # アップロードファイル群
| | ├── bar.txt
| | └── foo.txt
| ├── vars/ # オーバーライドすべきでない変数群
| | └── main.yml
| ├── defaults/ # オーバーライドできるデフォルトの変数群
| | └── main.yml
| └── meta/ # 依存ロール設定ファイル
| └── main.yml
├── webtier/
| :
├── monitoring/
| :
└── fooapp/
:
Playbook
- YAML形式で記述される 設定管理スクリプト
- 1つ以上のPlayのリスト
Play
- ホストとタスクを結びつけるもの で以下を含む
- 設定するホストの集合
- ホスト上で実行するタスクのリスト
インベントリファイル
-
インベントリ : Ansibleの知るホスト群
-
インベントリファイルにはホスト群を記述
- ホストのグループを定義可能
- AWS EC2 など動的にインベントリを設定することも可能
変数
記述することで定義できる変数と、Ansibleが定義してくれる変数がある
ホスト変数
- 各ホストに関する変数
-
host_vars/hostname1
で hostname1 の変数を定義
グループ変数
- 各グループに関する変数
-
group_vars/group1
で group1 に属するホストに変数を定義 - グループの積集合に対して変数を定義する、なども可能
ファクト
- ホストに関する情報を保存した変数
- CPUアーキテクチャ / OS / IPアドレス など
- playbook実行のはじめにファクトの収集が行われる
ロール
- playbookを分割・再利用するための仕組み
依存ロール
- あるロールが依存する1つ以上のロールを指定可
- 指定された依存対象のロールが実行されることを保証