クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

ファイル一つでマシンを設定する(Ansible)

このレッスンのあとで: マシンを設定する playbook を書き、2回目の実行では何も変わらないようにできる。

55分のレッスンコマンド10件Ansible のラボ:プレイブックでマシンを設定する(ブラウザーで)

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 の何が変わったか、なぜ変わったかを説明しましょう。

このラボとソースについて: Ansible のラボ:プレイブックでマシンを設定する(ブラウザーで)

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。