5台のサーバー、5通りの設定
小さな会社に Web サーバーが5台あります。2年かけて、別々の人が手作業で設定しました。1台だけ応答が遅いのに、理由はだれにも分かりません。
解決の道は、設定をファイルに書き残し、道具にすべてのマシンを同じ姿にさせることです。サーバーが壊れても、数分で同じものを作り直せます。
このレッスンのゴール
メモ
マシンを設定する playbook を書き、2回目の実行では何も変わらないようにできる。
大事な言葉
| ことば | いみ | れい |
|---|---|---|
| プレイブック | マシンの設定のしかたを並べたファイル(playbook) | |
| タスク | プレイブックの中の1つの手順 | |
| モジュール | タスクが使う、組み込みの道具 | ansible.builtin.file |
| インベントリ | 管理するマシンの一覧 | |
| 冪等 | 「べきとう」と読む(idempotent)。何度実行しても結果が同じで、2回目は何も変えない | |
| テンプレート | 空欄を持つファイル。変数が空欄を埋める |
学生が入力するセルは、このプレビューでは空白です。
プレイブックは「あるべき姿」を書く
プレイブックは「フォルダを作れ」とは書きません。「このフォルダがあるべきだ」と書きます。
道具はマシンを見て、すでに正しいところはそのままにし、違うところだけ直します。あなたは最後の姿を書き、手順は道具が見つけます。
この VM にはプロジェクトのフォルダがあります。入って、中のファイルを読みましょう。Run は同じ端末を使うので、移動したままになります。
プロジェクトのフォルダへ
cd ~/ansible-labここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
プレイブックを読む
cat site.ymlここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
インベントリを読む
cat inventory.iniここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
2回実行しても、もう変わらない
冪等なタスクは、何回実行しても同じ結果になります。1回目は仕事をします。2回目は、やることが見つかりません。
試してみましょう。次の Run は、自分用の小さなプレイブック practice.yml を書きます。/tmp にフォルダとメモを作るだけで、site.yml には触れません。
練習用のプレイブックを書く
printf '%s\n' '- hosts: localhost' ' gather_facts: false' ' vars:' ' team: Finance' ' tasks:' ' - name: Make a notes folder' ' ansible.builtin.file:' ' path: /tmp/notes-demo' ' state: directory' ' - name: Write a note' ' ansible.builtin.copy:' ' dest: /tmp/notes-demo/note.txt' ' content: "Hello {{ team }}"' > practice.ymlここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
1回目の実行
ansible-playbook practice.ymlここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
もう一度実行する
ansible-playbook practice.ymlここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
よくある間違い
注意
プレイブックは YAML で書いたシェルスクリプトだと思う人が多いです。スクリプトは毎回すべての手順を実行します。プレイブックのモジュールは、先に確かめて、必要なときだけ動きます。shell モジュールは毎回「変更あり」と報告するので、ほかに道具がないときだけ使います。
テンプレートは変数で空欄を埋める
テンプレートは、{{ site_name }} のような空欄を持つファイルです。ファイルを作るとき、変数が空欄を埋めます。
変数を変えれば、手で直さなくてもファイルが変わります。実行のとき -e で変数を渡せます。
まずラボのテンプレートを読みます。次に、練習用のプレイブックで team を変えてみましょう。
ラボのテンプレートを読む
cat templates/welcome.txt.j2ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
別のチーム名で実行する
ansible-playbook practice.yml -e team=Supportここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
予行: 何が元に戻るか
ansible-playbook practice.yml --check --diffここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
メモを読む
cat /tmp/notes-demo/note.txtここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
もう一歩先へ
2つ目のプレイブック shell.yml を書きましょう。タスクは1つで、ansible.builtin.shell で date > /tmp/notes-demo/stamp.txt を実行します。2回実行し、毎回 recap を読みます。
次に、そのタスクの下に args: と creates: /tmp/notes-demo/stamp.txt を足して、また2回実行します。recap の何が変わったか、なぜ変わったかを説明しましょう。