はじめに
Ansible のコンテンツは、ロール(roles)とコレクション(collections)から構成されます。制限された実験環境では、インターネットからダウンロードするよりも、ローカルのコンテンツアーカイブを使用する方が安全です。
この実験では、ローカルロールをパッケージ化し、要件ファイル(requirements file)を通じてインストールし、プリインストールされているコレクションを確認し、インストールしたロールを適用します。
コンテンツインストールプロジェクトの作成
このステップでは、ローカルコンテンツのソース、インストールされたロール、プレイブック、および出力ディレクトリを含むプロジェクトを作成します。
cd /home/labex/project
mkdir -p rhce-ansible/{inventory,roles,vendor_src/local_message/{tasks,meta},playbooks,managed,reports}
cd rhce-ansible
cat > ansible.cfg <<'EOF'
[defaults]
inventory = ./inventory/hosts
roles_path = ./roles
host_key_checking = False
retry_files_enabled = False
EOF
cat > inventory/hosts <<'EOF'
[managed]
host ansible_connection=local
EOF
この実験では、ロールのソースとインストールされたロールのコンテンツを分離しています。vendor_src/local_message は受け取った、あるいは作成したコンテンツを表し、roles/local_message は Ansible が実際に読み込むインストール済みのコピーとなります。
ローカルロールソースの構築
このステップでは、インストール先の roles ディレクトリの外側に小さなロールソースを作成します。これは、信頼できるソースからロールコンテンツを受け取る状況をシミュレートしています。
このステップのコマンドを実行する前に、Ansible プロジェクトディレクトリに戻ってください。これにより、LabEx が各ステップを個別に実行する場合でもコマンドが安定します。
cd /home/labex/project/rhce-ansible
cat > vendor_src/local_message/tasks/main.yml <<'EOF'
---
- name: Ensure local message directory exists
ansible.builtin.file:
path: /home/labex/project/rhce-ansible/managed/local-message
state: directory
mode: '0755'
- name: Write message from installed role
ansible.builtin.copy:
dest: /home/labex/project/rhce-ansible/managed/local-message/message.txt
content: |
installed_role=local_message
mode: '0644'
EOF
cat > vendor_src/local_message/meta/main.yml <<'EOF'
---
galaxy_info:
author: LabEx
description: Local role for RHCE Ansible prep
license: MIT
min_ansible_version: '2.16'
dependencies: []
EOF
ロールソースは、通常のロールと同じ基本的な構造を持っています。tasks/main.yml にタスクロジック、meta/main.yml にロールのメタデータが含まれます。タスクは、インストールされたロールが実行されたことを証明するために、目に見えるメッセージを書き込みます。
tar -czf vendor_src/local_message.tar.gz -C vendor_src local_message
このアーカイブは、オフラインのロールパッケージをシミュレートします。ローカルアーカイブを使用することで、requirements.yml のワークフローを学習しながら、実験の再現性を保つことができます。
ls -l vendor_src/local_message.tar.gz
要件ファイルからのロールのインストール
このステップでは、ローカルアーカイブを指すロール要件ファイルを作成し、それを roles ディレクトリにインストールします。
このステップのコマンドを実行する前に、Ansible プロジェクトディレクトリに戻ってください。
cd /home/labex/project/rhce-ansible
cat > requirements.yml <<'EOF'
---
roles:
- name: local_message
src: file:///home/labex/project/rhce-ansible/vendor_src/local_message.tar.gz
EOF
file:// ソースは、ansible-galaxy に対してローカルアーカイブを指定します。これはリモートソースを使用する場合と同じ考え方ですが、ネットワークアクセスに依存しません。
ansible-galaxy role install -r requirements.yml -p roles --force
-r オプションは要件ファイルを読み込み、-p roles はインストールディレクトリを選択し、--force は実験を再実行する場合にコマンドを繰り返し実行可能にします。
find roles/local_message -maxdepth 2 -type f -print
インストールされたロールの tasks/main.yml と meta/main.yml が表示されるはずです。プレイブックは、元の vendor_src ディレクトリではなく、インストールされたロールのパスを使用します。
インストール済みコレクションの内容確認
このステップでは、インストール済みのコレクションを確認します。RHEL10 イメージには一般的なコレクションが既に含まれているため、この実験ではインターネットからのダウンロードを避けつつ、コレクションの検出方法を示します。 このステップのコマンドを実行する前に、Ansible プロジェクトディレクトリに戻ってください。
cd /home/labex/project/rhce-ansible
ansible-galaxy collection list ansible.posix | tee reports/collection-list.txt
ansible-doc ansible.posix.acl | sed -n "1,20p"
コレクションは、名前空間の下にモジュールをパッケージ化します。ここでは ansible.posix.acl は ansible.posix コレクションの acl モジュールを意味し、ansible-doc は Ansible がローカルでドキュメントを見つけられることを証明しています。
インストール済みロールの適用
このステップでは、要件ファイルからインストールしたロールを適用します。これにより、Ansible がインストールされたロールのコンテンツを見つけて実行できることが証明されます。 このステップのコマンドを実行する前に、Ansible プロジェクトディレクトリに戻ってください。
cd /home/labex/project/rhce-ansible
cat > playbooks/use-installed-role.yml <<'EOF'
---
- name: Use a locally installed role
hosts: managed
gather_facts: false
roles:
- role: local_message
EOF
roles_path がインストールディレクトリを指しているため、プレイブックは local_message を参照するだけで済みます。これにより、プレイブックはアーカイブの場所から独立したものになります。
ansible-playbook playbooks/use-installed-role.yml | tee reports/installed-role-run.txt
実行は failed=0 で終了し、インストールされたロールのタスクからメッセージファイルが作成されるはずです。
cat managed/local-message/message.txt
まとめ
requirements.yml を通じてローカルロールをパッケージ化およびインストールし、インストール済みのコレクションの内容を確認し、プレイブックからインストールされたロールを適用しました。


