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

無料レッスン

Ansibleのタグ、--limit、Vault

このレッスンのあとで: プレイブックの一部だけを実行し、秘密を平文で置かずに済ませられる。

60分のレッスンコマンド16件Ansible ロールのラボ:ロール、ハンドラー、Vault を1台の Ubuntu VM で

一部だけ実行し、秘密は隠す

Ansible のタグ(tags)とは、タスクに付ける名札で、プレイブックの一部だけを実行するために使います。Ansible Vault は、パスワードなどの秘密を、暗号化して保存する仕組みです。

設定を全部やり直すと時間がかかるので、ユーザーの追加だけをしたい日があります。また、トークンをそのまま書いたファイルは、人に渡せません。この回で、その2つを身につけます。

このレッスンのゴール

メモ

プレイブックの一部だけを実行し、秘密を平文で置かずに済ませられる。

重要な言葉

ことばいみれい
タグタスクに付ける名札tags: [config]
--tags指定したタグのタスクだけを動かす指定--tags user
--limit動かすホストを、さらに絞る指定--limit web1
Vaultファイルを暗号化して持つ、Ansible の機能
平文暗号化されていない、そのまま読める文字
パスワードファイルVault を開くパスワードを1行で書いたファイル

学生が入力するセルは、このプレビューでは空白です。

タグを付けると一部だけ動かせる

タスクに tags: [config] と書くと、名札が付きます。--tags config で実行すると、その名札のタスクだけが動きます。--skip-tags は、逆に、その名札のタスクを外します。

名札のないタスクは、--tags を使うと動きません。ただし always は、いつも動き、never は、名指しされたときだけ動きます。

自分のフォルダを作る

コマンド
mkdir ~/desk

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

そのフォルダに入る

コマンド
cd ~/desk

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

2つのホストを書く

コマンド
printf '%s\n' '[web]' 'web1 ansible_connection=local' '' '[spare]' 'spare1 ansible_connection=local' > inventory.ini

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

タグ付きの6つのタスクを書く

コマンド
printf '%s\n' '- hosts: web' '  gather_facts: false' '  tasks:' '    - name: Make the folder' '      ansible.builtin.debug:' '        msg: folder' '      tags: [config]' '    - name: Write the settings' '      ansible.builtin.debug:' '        msg: settings' '      tags: [config]' '    - name: Add the user' '      ansible.builtin.debug:' '        msg: user' '      tags: [user]' '    - name: Say hello' '      ansible.builtin.debug:' '        msg: hello' '    - name: Always check' '      ansible.builtin.debug:' '        msg: check' '      tags: [always]' '    - name: Slow cleanup' '      ansible.builtin.debug:' '        msg: cleanup' '      tags: [never, cleanup]' > play.yml

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

タスクとタグの一覧

コマンド
ansible-playbook -i inventory.ini play.yml --list-tasks | grep TAGS

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

userのタグだけ動かす

コマンド
ansible-playbook -i inventory.ini play.yml --tags user | grep -o 'TASK \[[^]]*\]'

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

neverのタスクを名指しする

コマンド
ansible-playbook -i inventory.ini play.yml --tags cleanup | grep -o 'TASK \[[^]]*\]'

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

--limitはホストを絞る

プレイの hosts が決めるのは、動かせるホストの全部です。--limit は、その中から、さらに絞ります。

プレイが使わないホストを --limit に書いても、動くホストは増えません。ひとつも残らないと、何も動きません。--list-hosts を付けると、動かさずに、どのホストが残るかだけを見られます。

プレイが使わないホストに絞る

コマンド
ansible-playbook -i inventory.ini play.yml --limit spare1 --list-hosts | grep "hosts ("

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

プレイが使うホストに絞る

コマンド
ansible-playbook -i inventory.ini play.yml --limit web1 --list-hosts | grep "hosts ("

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

Vaultは秘密のファイルを暗号化する

ansible-vault encrypt は、ファイルをその場で暗号化します。暗号化されたファイルは、1行目が $ANSIBLE_VAULT で始まります。

開くには、パスワードが要ります。パスワードを1行で書いたファイルを、--vault-password-file で渡します。ここでのパスワードとトークンは、練習用の偽物です。本物は、リポジトリに入れません。

練習用の偽のパスワードを書く

コマンド
printf '%s\n' 'classroom-password' > pw.txt

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

秘密のファイルを平文で書く

コマンド
printf '%s\n' 'api_token: demo-token-0042' > secrets.yml

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

暗号化する

コマンド
ansible-vault encrypt --vault-password-file pw.txt secrets.yml

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

ファイルの1行目を見る

コマンド
head -n 1 secrets.yml

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

パスワードで中身を開く

コマンド
ansible-vault view --vault-password-file pw.txt secrets.yml

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

秘密を使い、長さだけを出す

コマンド
ansible localhost -i localhost, -c local -m ansible.builtin.debug -a 'msg="{{ api_token | length }}"' -e @secrets.yml --vault-password-file pw.txt | grep msg

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

パスワードなしで使うと

コマンド
ansible localhost -i localhost, -c local -m ansible.builtin.debug -a 'msg="{{ api_token | length }}"' -e @secrets.yml 2>&1 | grep -m1 -o "no vault secrets found"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

よくある間違い

注意

--tags を付けても、タグのないタスクは動くと思いがちです。実際は、--tags を使うと、名札のないタスクは動きません。always だけが、いつも動きます。動かしたいなら、タグを付けます。

このラボとソースについて: Ansible ロールのラボ:ロール、ハンドラー、Vault を1台の Ubuntu VM で

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