Ansible ロールのラボ:ロール、ハンドラー、Vault を1台の Ubuntu VM で
このラボは「Ansible の基本」ラボの2段階目です。生徒ごとに、ansible-core の入った自分専用の Ubuntu VM、小さなプロジェクト、README が渡され、1つのロールをゼロから作ります。変数、テンプレート、タグ付きのタスク、ハンドラー、そして Ansible Vault に入れたトークンです。マシン自身がローカル接続の対象なので、ほかに必要なものはありません。
生徒のコンピューターには何もインストールしません。先に「Ansible の基本」を行います。そこではプレイブック、パッケージ、テンプレート、プレイブックを2回実行することを学ぶので、このラボでは繰り返しません。
生徒が学ぶこと
プレイブックがロールへと育つ流れです。生徒はネットワークがなくても動く ansible-galaxy role init で標準のフォルダーを作り、tasks、defaults、vars、templates、handlers、meta を埋めます。変数がどの順番で勝つかを自分で確かめます。ロールの defaults はプレイに置いた変数に負け、ロール自身の vars はそれに勝ち、-e で渡した値はすべてに勝ちます。ループと条件を使う Jinja2 のテンプレートを書いて --check と --diff で確かめ、loop、register、when を使い、--tags と --limit で一部のタスクだけを実行します。
3つのタスクが知らせるハンドラーは1回だけ実行されなければならず、生徒はロールが途中でハンドラーを実行するようにします。最後は Ansible Vault です。ansible-vault で作ったファイルをパスワードファイルで開き、トークンはほかのどこにも平文で書きません。作業はすべて Ansible 標準のモジュールで、チェックが見られるファイル、フォルダー、システムユーザーに対して行います。
プロジェクト
生徒は、この1台のマシンに2つの名前を付けたインベントリ、まだ存在しないロールを使うプレイブック、秘密ではないと書かれた偽の vault パスワードが入ったフォルダーから始めます。プレイブックはすでにプレイに2つの変数を置いているので、優先順位は読むものではなく、生徒が正しく答えを出すものです。マシンは小さく、CPU 1つ、メモリ 1 GB、ディスク 10 GB です。
ブラウザーで動かす
VM ラボは、モジュールのラボタスクとして出し、サンプルはラボのページにあります。このラボは Ubuntu のアーカイブだけを使うので、無料アカウントの VM でも動きます。
- ラボを追加する. 担当するモジュールでタスクを追加し、Ubuntu VM ラボのカードを選びます。ページには compose ファイルの代わりに、マシンの短い説明が表示されます。
- サンプルから始める. ページには、すぐ使えるラボが用意されています。Ansible roles, handlers and vault を選びます。サンプルを使うとテキストが置き換わり、元に戻すで自分のテキストを取り戻せます。
- 公開して自分用のコピーを起動する. 公開してから開始を押します。VM の初回起動時に、ラボの setup スクリプトが Ubuntu のアーカイブから ansible-core をインストールし、プロジェクト、プレイブック、練習用の偽の vault パスワード、README を作ります。1、2分かかります。
- ターミナルを開く. ターミナルを開き、ホームフォルダーの README.md を読みます。7つの手順で何をするかが書かれていて、答えは書かれていません。
このラボの基本レッスン
Ansible Roles Basics は、このラボ(Ubuntu VM)で進める小さなレッスンです。導入、「できる」で書く目標、キーワード、ウォームアップ、各アイデアのあとのチェック、よくある間違い、最後のチェックがあり、各ステップには、そのコマンドをマシンのターミナルに入力する実行ボタンがあります。生徒は使い捨てのロールを作ってフォルダーを見て、小さなプレイブックを2回実行して変数が -e に負けるのを見て、2つの通知に対してハンドラーが1回だけ実行されるのを確かめ、Vault で値を暗号化します。
レッスンは見て回るだけで、ラボ自身のロールは生徒に任せるので、答えは配りません。
採点の仕組み
ラボにはチェックがあります。新しく起動した、保存済みのマシンのコピーで実行されます。まずロールを読みます。標準のフォルダー、埋められた meta ファイル、プレイブックではなくロールの中にある6つ以上のタスク、ハンドラー、ループ、タグ、for ループと if を持つテンプレートです。shell、command、raw、script、プログラムを実行するルックアップは受け付けません。ラボのパスワードで vault ファイルを開き、プロジェクトに平文で書かれたトークンも受け付けません。
そのあと、誰も見たことのない値で、生徒自身のプレイブックを7回実行します。きれいなマシンで、変更するものが何も残っていない状態でもう一度、変更を表示して何も書かないドライラン、別の値、各タグ、プレイが使わないホストへの --limit です。実際の出力でハンドラーの実行回数を数えるので、3回実行されるハンドラーは受け付けられず、できたファイルも読みます。出力の1行目が理由を伝えます。
- 配る. 他のタスクと同じようにラボを割り当てます。希望すれば期限も付けられます。生徒ごとに専用の VM が用意され、セッションをまたいで保たれます。
- チェックを実行する. クラス一覧で生徒の行にあるチェックを実行を押します。保存されたマシンのコピー(保存し直されません)を起動し、ラボのチェックスクリプトを root で実行して、合格したか、何を出力したか、いつ実行したかを表示します。結果は生徒には伝わりません。
- 採点する. チェックの出力の1行目を読みます。ハンドラーが3回実行された、変数を置く場所が違う、vault ファイルが開かない、など何が正しくないかが書かれています。足りなければ理由を添えて差し戻します。
GitHub の定義ファイル
このファイルがラボの定義のすべてで、プラットフォームが実行するものと同じテキストです。サイズ、setup スクリプト、README、チェックが入っています。コピーして、ロール、変数、ハンドラーを変えれば、もっと長いラボが作れます。
このラボを試す、そして費用
無料の個人アカウントで、このラボの基本レッスンに取り組めます。毎月、ほとんどのレッスンに足りる無料クレジットがあり、カードは要りません。クラスで使う場合、学校は最初の365日間、生徒50人まで無料で、その後は生徒1人あたりの年額です。すべてのラボが含まれ、教職員は無料です。
よくある質問
- ラボにライセンスや有料の Ansible は必要ですか。
- いいえ。ansible-core はオープンソースで Ubuntu のアーカイブに入っており、生徒の VM の起動時にインストールされます。私たちは何も配布せず、ほかの場所から何かをダウンロードすることもありません。
- 再起動するサービスがないのはなぜですか。
- ラボは、チェックが見られるものでハンドラーを示します。実際の実行の出力から数えた実行回数と、ハンドラーが書くファイルです。本物のサービスの再起動はチェックでは証明できないので、ラボはそれを外し、そのことを明記しています。
- 生徒が何かを壊すことはありますか。
- 壊せるのは自分のコピーだけです。マシンが届くのは Ubuntu のアーカイブ、PyPI、npm、GitHub だけです。vault パスワードはラボのためにプロジェクトに置かれた偽のもので、トークンはデモ用のデータであり、本物の秘密ではありません。
- ラボは本物の生徒の VM でテストしましたか。
- setup、レッスンのコマンド、そして偽の答えに対するチェックの動きは、VM の代わりのコンテナの中の本物の Ubuntu 26.04 で実行しました。ディスクイメージから起動する本物の生徒の VM では、授業の前に一度試すことをおすすめします。