ファイルリスト表示のための再利用可能なロールの作成
このステップでは、ファイルリスト表示のための Ansible ロールを作成する方法を学びます。ロールは、プレイブックを整理し、再利用性を高める方法です。これは、複数のプレイブックまたはプロジェクトで同じタスクを実行する必要がある場合に特に役立ちます。
Ansible ロールの理解
Ansible ロールは、標準のディレクトリ構造にグループ化された一連のタスク、変数、ファイル、テンプレート、およびその他のリソースです。ロールを使用すると、コードを簡単に再利用し、他のユーザーと共有できます。
ロールの標準的なディレクトリ構造は次のようになります。
roles/
rolename/
tasks/ ## ロールのメインタスク
handlers/ ## タスクによってトリガーされるハンドラー
defaults/ ## デフォルト変数
vars/ ## ロール変数
files/ ## 静的ファイル
templates/ ## テンプレート
meta/ ## ロールのメタデータ
ファイルリスト表示ロールの作成
長形式でファイルをリスト表示するためのロールを作成しましょう。
- まず、ロールのディレクトリ構造を作成します。
cd ~/project/ansible-lab
mkdir -p roles/file_lister/tasks
- ロールのメインタスクファイルを作成します。
cd ~/project/ansible-lab
- Explorer パネルで、
~/project/ansible-lab/roles/file_lister/tasks
に移動します。
- 右クリックして「New File」を選択します。
- ファイル名を
main.yml
とします。
- 次の内容を追加します。
---
## Tasks for file_lister role
- name: Find files in the specified directory
ansible.builtin.find:
paths: "{{ path | default('/etc') }}"
patterns: "{{ patterns | default('*') }}"
file_type: "{{ file_type | default('any') }}"
recurse: "{{ recurse | default(false) }}"
register: found_files
- name: Display files in long format
debug:
msg: "{{ item.mode }} {{ item.uid }} {{ item.gid }} {{ item.size }} {{ item.mtime }} {{ item.path }}"
loop: "{{ found_files.files | sort(attribute='path') }}"
loop_control:
label: "{{ item.path }}"
when: show_details | default(true)
- name: Display only file paths
debug:
msg: "{{ item.path }}"
loop: "{{ found_files.files | sort(attribute='path') }}"
loop_control:
label: "{{ item.path }}"
when: not (show_details | default(true))
このロールは次のことを行います。
- パラメータに基づいて、指定されたディレクトリ内のファイルを検索します。
- ファイルを長形式またはパスのみで表示します。
- 指定されていない場合は、パラメータにデフォルト値を使用します。
プレイブックでのロールの使用
次に、新しいロールを使用するプレイブックを作成しましょう。
- Explorer パネルで、
~/project/ansible-lab
ディレクトリに移動します。
- 右クリックして「New File」を選択します。
- ファイル名を
use_role.yml
とします。
- 次の内容を追加します。
---
- name: Use file listing role
hosts: local
roles:
- role: file_lister
vars:
path: "/etc"
patterns: "*.conf"
file_type: "file"
show_details: true
このプレイブックは次のことを行います。
- ローカルホストで実行されます。
file_lister
ロールを使用します。
- ロールの動作をカスタマイズするために変数を設定します。
プレイブックを実行しましょう。
cd ~/project/ansible-lab
ansible-playbook use_role.yml
/etc
ディレクトリ内のすべての .conf
ファイルの詳細を示す出力が表示されるはずです。
ロール変数のカスタマイズ
ロールの利点の 1 つは、変数を変更することでその動作を簡単にカスタマイズできることです。異なるパラメータを使用してロールを使用する別のプレイブックを作成しましょう。
- Explorer パネルで、右クリックして「New File」を選択します。
- ファイル名を
custom_listing.yml
とします。
- 次の内容を追加します。
---
- name: Custom file listing
hosts: local
roles:
- role: file_lister
vars:
path: "/home/labex"
patterns: "*.yml"
file_type: "file"
show_details: false
このプレイブックは次のことを行います。
file_lister
ロールを使用します。
/home/labex
ディレクトリを検索するように設定します。
- YAML ファイル(*.yml)をフィルタリングします。
- ファイルパスのみを表示します(詳細情報なし)。
プレイブックを実行しましょう。
ansible-playbook custom_listing.yml
詳細情報なしで、/home/labex
ディレクトリ内のすべての YAML ファイルのリストが表示されるはずです。
高度な使用法:レポートの作成
最後に、ロールを使用してファイルのレポートを生成する、より高度なプレイブックを作成しましょう。
- Explorer パネルで、右クリックして「New File」を選択します。
- ファイル名を
generate_report.yml
とします。
- 次の内容を追加します。
---
- name: Generate file listing report
hosts: local
vars:
report_path: "~/project/ansible-lab/file_report.txt"
tasks:
- name: Find files in the specified directory
ansible.builtin.find:
paths: "/etc"
patterns: "*.conf"
file_type: "file"
register: found_files
- name: Create report header
copy:
dest: "{{ report_path }}"
content: |
File Listing Report
Generated on: {{ ansible_date_time.date }} at {{ ansible_date_time.time }}
-----------------------------------------------------------
Mode Owner Group Size Modified Path
-----------------------------------------------------------
force: yes
- name: Append file information to report
lineinfile:
path: "{{ report_path }}"
line: "{{ item.mode }} {{ item.uid }} {{ item.gid }} {{ item.size | string | ljust(10) }} {{ item.mtime }} {{ item.path }}"
loop: "{{ found_files.files | sort(attribute='path') }}"
loop_control:
label: "{{ item.path }}"
- name: Display report location
debug:
msg: "Report generated at {{ report_path }}"
このプレイブックは次のことを行います。
/etc
ディレクトリ内の .conf
ファイルを検索します。
- ヘッダー付きのテキストファイルを作成します。
- 各ファイルに関する情報をレポートに追加します。
- レポートの場所を表示します。
プレイブックを実行しましょう。
ansible-playbook generate_report.yml
プレイブックを実行した後、レポートを表示できます。
cat ~/project/ansible-lab/file_report.txt
/etc
ディレクトリ内のすべての .conf
ファイルをリスト表示する、フォーマットされたレポートが表示されるはずです。