『初めてのAnsible』読書ノート

2016/07/20

初めてのAnsible』を読んだので、学んだ点をまとめる。

1.2 Ansibleが役立つこと

Ansibleが役立つこと
・設定管理
・デプロイ
・オーケストレーション(DB→APのデプロイ順、APは一つずつロードバランサから外すetc)
・プロビジョニング(新しい仮想マシンの起動)

1.9 テスト用サーバーのセットアップ

WindowsでAnsibleを実行するでアレンジしながら実践した。

・インベントリファイル
インベントリファイルをplaybooks/hostsとすると、 $ ansible サーバエイリアス -i hosts -m ping でpingモジュールが呼び出せる。

・ansible.cfg
デフォルト設定のためのファイル。
ansible.cfgによりインベントリファイルが簡略化できる。
カレントディレクトリにplaybookと一緒に置き、共にバージョン管理するのがBEST。

ansible.cfg

ansible.cfgで設定すると、次のように簡素に呼び出せる。

2.2 ごくシンプルなPlaybook

yes/no/True/Falseの使い分け
・モジュール引数:yes/no
・Playbookのその他:True/False

2.5.1 Play

playは次の二つが最小構成要素。
・設定するホスト(hosts)
・タスクのリスト(tasks)

3.4 グループとグループとグループ

インベントリにはグループが設定可能。

playbooks/hosts

自動的にall(あるいは*)グループが定義される。

3.5 ホストとグループ変数:インベントリの内部

ホストに対して任意の変数を定義できる。
環境ごとに異なる設定値(ex, DBの接続情報)はグループに対する変数として定義するのが良い。

3.8 複数ファイルへのインベントリの分割

通常のインベントリファイルと動的インベントリファイルを同じディレクトリに置く。
ansible.cfgに hostfile = ディレクトリ名 とする。

4.1 Playbook内での変数の定義

Playbook内で変数を定義する箇所
・varsセクション
・vars_filesセクション

4.2 変数の値の表示

4.3 変数の登録

4.4.1 サーバーに関連づけられたすべてのファクトの表示

setupモジュールでファクト収集が手動でできる。

フィルタリングはグロブを指定することで実現可能。

4.6.1 hostvars

すべてのホストに対して定義されたすべての変数を含む辞書。

ファクトにアクセスしようと思えば次のようにする。

6.4 イテレーション(with_items)

Ansibleはループでのイテレーション変数名として必ずitemを使う。

6.9 タスク中の複雑な引数

・YAMLの行折り返し

・キーを変数名とする辞書

7.1 コントロールマシン上でのタスクの実行

local_action節

7.2 ホスト以外のマシン上でのタスクの実行

delegate_to節

7.4 一度に一つのホストでの実行

serial節
playを並列実行するホスト数を設定する。
max_fail_percentage節を一緒に使え、すべてのホストでタスクが失敗する前にplay全体を失敗させる。

7.5 1回だけの実行

run_once節

7.8 Vaultによるセンシティブなデータの暗号化

センシティブ情報の扱い方

  1. センシティブ情報専用ファイルに切り出す。
    playbook.yml

  2. Vaultを使用してセンシティブ情報専用ファイルを暗号化する。

  3. Vaultでの暗号化の際に入力したパスワードを外部ファイルに書いて、playbookを実行する。

7.12 ルックアップ

lookup('file', '/path/to/file.txt') でファイルの中身を取り出せる。
file以外にpipi, env, csvfileなどがある。

7.13 さらに複雑なループ

with_items以外にwith_lines, with_fileglobなどがある。

8 ロール:プレイブックのスケールアップ

ロールは、playbookを複数のファイルに分割するための主要な仕組み。
ロールを1つ以上のホストに割り当てる。

8.1 ロールの基本構造

ロールに関連づけられたファイルは、 roles/ロール名/ ディレクトリに置かれる。

rolesディレクトリ自体は、次の場所である。
・playbookが置かれているディレクトリ内のroles
・システム全体にわたるロールは、/etc/ansible/roles

8.3 Playbooks内でのロールの利用

playbook中にロールのセクションを置く。
ロールを呼び出す際に変数が渡せる。(今回の例ではdatabase_name, database_userの2変数)

8.6 Mezzanineのデプロイのための"mezzanine"ロール

Ansibleには、複数のロール間で使える名前空間の記法がない。
→ほかのロールで定義された変数やplaybookの他の部分で定義された変数がどこからでもアクセス可能。
→ロールの変数に接頭語をつけるのがいい。
・mezzanine_venv_home
・mezzanine_venv_path
 など

14.4.1 構文チェック

--syntax-check

14.4.4 チェックモード

-C or --check
dry run。
実際にサーバーに変更を加えずplaybookを実行する。

チェックモードの難点:playbookのそれ以前の部分が成功した時のみ、ある部分が成功する場合、チェックモードではタスクが失敗する。

14.4.5 Diff(ファイルの差分の表示)

-D or --diff
--checkと併せて使う。

14.5.1 step

各タスクの実行前に y/n/c を聞いてくれる。
cを選ぶと、playbookの残りをプロンプトの表示をせずに実行する。

14.5.2 start-at-task

--start-at-task タスク名

-読書ノート
-