Ansible のラボ:プレイブックでマシンを設定する(ブラウザーで)
このラボでは、各生徒が自分専用の Ubuntu マシンと、未完成の Ansible プレイブックを受け取ります。パッケージをインストールし、変数の入ったテンプレートからファイルを作り、systemd のユニットファイルを書くようにプレイブックを仕上げ、もう一度実行して何も変わらないことを確かめます。生徒のパソコンには何もインストールせず、結果はスクリプトが採点するので、一台ずつ読む必要はありません。
生徒が学ぶこと
プレイブックとは何か:YAML で書いたタスクの一覧で、各タスクは1つの仕事をするモジュールを指名します。変数と、変数からファイルを埋めるテンプレート。マシンのあるべき状態を記述することと、そこに至るコマンドを打つことの違い。何より冪等性:良いプレイブックは2回実行しても1回目と同じ状態に保ち、最後のまとめに changed=0 と表示されます。
課題
ラボはホームフォルダーにプロジェクトを置きます。このマシンだけをローカル接続で載せたインベントリ、設定ファイル、変数の入ったテンプレート、そして3つの仕事が欠けているプレイブックです。仕事1はパッケージ tree。仕事2は、テンプレートから作る/etc/ansible-lab/welcome.txt で、所有者は root、モードは 0644。仕事3は、説明に変数が入るユニットファイル /etc/systemd/system/lab-greeter.service です。README には、それぞれで何をするかが書かれていて、タスクもモジュールも答えも書かれていません。生徒が書くのはファイルだけで、サービスは起動しません。
ブラウザーで動かす
VM ラボはモジュールのラボ課題として設定し、サンプルはラボのページにあります。マシンは小さく、CPU 1つ、メモリ 1 GB、ディスク 10 GB です。
- ラボを追加する. 自分が教えるモジュールで課題を追加し、「Ubuntu VM ラボ」のカードを選びます。ページにはcompose ファイルの代わりにマシンの短い記述が表示されます。
- サンプルから始める. ページには、そこから始められるサンプルのラボが用意されています。Ansible basics を選びます。サンプルを使うとテキストが置き換わりますが、「元に戻す」で自分のテキストに戻せます。
- 公開して自分のコピーを起動する. 「公開」してから「起動」を押します。VM の初回起動時に、ラボ自身の setup スクリプトが Ubuntu のアーカイブから Ansible をインストールし、プロジェクトと README を書きます。所要時間は10秒ほどです。
- ターミナルを開く. ターミナルを開き、ホームフォルダーの README.md を読みます。プレイブックで仕上げる3つの仕事が書かれていて、答えは書かれていません。
このラボの基本レッスン
Ansible Basics は、Ubuntu VM であるこのラボで行う小さなレッスンです。各ステップに説明と「実行」ボタンがあり、コマンドをマシンのターミナルに入力して、出力を表示します。生徒は、プロジェクトを一覧し、未完成のプレイブックを読み、実行して何も変わらないことを確かめ、ラボのフォルダーがもうあるかをモジュールに尋ねます。
レッスンは見て回るだけで、プレイブックを仕上げるというラボ自身の課題は生徒に任せるので、答えは示しません。レッスンはわざと小さくしてあります。ラボで行うレッスンがどういうものかを教師に見せるためのもので、残りはラボが担います。変更したいときは、自分のモジュールにコピーしてください。
採点の仕組み
このラボにはチェックがあります。保存されたマシンのコピーを再起動したあとに実行するので、生徒が保存したものだけが見えます。まずプレイブックを読み、shell、command、raw、scriptのタスクだけでできたものや、それらを include やロールに隠したものは受け付けません。保存されたパッケージとファイルを読み、そのあと誰も見たことのないサイト名を付けて、生徒のプレイブックを2回実行します。作られたファイルにはその名前が入っていなければならず、手で書いたファイルでは通りません。2回目の実行は changed=0 でなければならず、毎回何かを変えるタスクでは通りません。チェックが出力した最初の行に、何が正しくないかが書かれます。
止められないのは、自分のマシンで管理者の権限を持つ、本気の生徒が Ansible 自体を書き換えることです。これは教室のためのチェックであり、証明ではありません。
- 配布する. ほかの課題と同じようにラボを配布します。期限を付けることもできます。各生徒には専用の VM が渡され、セッションをまたいで保持されます。
- チェックを実行する. クラス一覧の生徒の行で「チェックを実行」を押します。保存されたマシンのコピーが(元には保存されない形で)起動し、ラボのチェックスクリプトが root で実行されて、合格したか、何を出力したか、いつかが表示されます。結果は生徒には知らされません。
- 採点する. チェックが出力した最初の行を読みます。変数が入っていないファイルや、2回目の実行で変わったタスクなど、何が正しくないかが書かれています。足りない場合は理由を書いて差し戻します。
GitHub の定義ファイル
このファイルはラボの定義のすべてで、プラットフォームが実行するものと同じテキストです。サイズ、setup スクリプト、README、チェックが入っています。コピーして、パッケージやパス、仕事を変えれば、自分のラボになります。
よくある質問
- チェックはサービスを起動しますか?
- いいえ。ユニットファイルを読むだけで、起動はしません。このラボは Ansible でファイルを書くことが課題で、採点されるのはファイルの所有者、モード、内容です。
- このラボで Terraform も教えられますか?
- このラボではできません。マシンが届くのは Ubuntu のアーカイブ、PyPI、npm、GitHub だけで、Terraform はマシンが届かないレジストリーからプロバイダーをダウンロードするため、Ansible だけを提供しています。Ansible は VM の起動時に Ubuntu のアーカイブからインストールされます。
- プレイブックは何を管理しますか?
- 各生徒のマシンは1台なので、ローカル接続のその VM 自身です。本物のコマンドが使えます。ansible-playbook、ansible-doc、そして試し実行のための --check です。