ストレージとマウント設定の自動化

AnsibleBeginner
オンラインで実践に進む

はじめに

マウントの自動化は、再現可能かつ安全である必要があります。実験用仮想マシン(VM)において、tmpfs はシステムに影響を与えずにマウントポイントや /etc/fstab の管理を練習できる最適なファイルシステムです。

この実験では、マウントポイントの作成、ansible.posix.mount を使用した tmpfs のマウント、findmnt および /etc/fstab による検証を行い、Playbook の冪等性(べきとうせい)を確認します。

マウント自動化プロジェクトの作成

このステップでは、安全な tmpfs マウントを自動化するためのプロジェクトを作成します。

cd /home/labex/project
mkdir -p rhce-ansible/{inventory,playbooks,reports}
cd rhce-ansible
cat > ansible.cfg <<'EOF'
[defaults]
inventory = ./inventory/hosts
host_key_checking = False
retry_files_enabled = False
EOF
cat > inventory/hosts <<'EOF'
[managed]
host ansible_connection=local
EOF

マウントターゲットは実際のマウントポイントですが、tmpfs を使用するためディスクのパーティション分割は不要です。これにより、実験環境の安全性を保ちつつ、マウントおよび /etc/fstab の動作を学習できます。

マウント変数の定義

このステップでは、マウントポイント、ファイルシステムタイプ、およびオプションを定義します。size=16m オプションを指定することで、tmpfs のサイズを小さく抑えます。 このステップのコマンドを実行する前に、Ansible プロジェクトディレクトリに戻ってください。これにより、LabEx が各ステップを個別に実行する場合でもコマンドが安定します。

cd /home/labex/project/rhce-ansible
mkdir -p inventory/group_vars
cat > inventory/group_vars/managed.yml <<'EOF'
mount_point: /mnt/rhce-ansible-data
mount_src: tmpfs
mount_fstype: tmpfs
mount_opts: size=16m,mode=0755
EOF

これらの変数は、ライブマウントと永続的なエントリの両方を記述しています。tmpfs はソースとファイルシステムタイプであり、size=16m,mode=0755 はメモリ内ファイルシステムのサイズとマウントポイントの権限を制御します。

cat inventory/group_vars/managed.yml

マウント用 Playbook の作成

このステップでは ansible.posix.mount を使用します。state: mounted を設定することで、ファイルシステムを即座にマウントし、/etc/fstab エントリが存在することを保証します。 このステップのコマンドを実行する前に、Ansible プロジェクトディレクトリに戻ってください。

cd /home/labex/project/rhce-ansible
cat > playbooks/manage-mount.yml <<'EOF'
---
- name: Configure a safe tmpfs mount
  hosts: managed
  become: true
  gather_facts: false
  tasks:
    - name: Ensure mount point exists
      ansible.builtin.file:
        path: "{{ mount_point }}"
        state: directory
        mode: '0755'

    - name: Mount and persist tmpfs
      ansible.posix.mount:
        path: "{{ mount_point }}"
        src: "{{ mount_src }}"
        fstype: "{{ mount_fstype }}"
        opts: "{{ mount_opts }}"
        state: mounted

    - name: Write evidence inside mounted filesystem
      ansible.builtin.copy:
        dest: "{{ mount_point }}/mounted-by-ansible.txt"
        content: |
          mounted=true
        mode: '0644'
EOF

state: mounted は、ファイルシステムを現在マウントし、将来の起動のために /etc/fstab エントリが存在することを保証するという 2 つの役割を果たします。最後のコピータスクは、マウントが使用可能であることを証明するために、マウントされたファイルシステム内に小さなマーカーファイルを書き込みます。

ansible-playbook playbooks/manage-mount.yml --syntax-check

マウントの実行と確認

このステップでは、Playbook を実行し、ライブマウントと永続的な fstab エントリを確認します。

cd /home/labex/project/rhce-ansible
ansible-playbook playbooks/manage-mount.yml | tee reports/mount-first.txt

初回実行時には、マウントポイントの作成、tmpfs のマウント、/etc/fstab の更新、およびマーカーファイルの書き込みが行われます。それぞれの結果を直接確認します。

findmnt /mnt/rhce-ansible-data

findmnt は、ライブカーネルのマウントテーブルにマウントポイントが含まれていることを確認します。

grep -F /mnt/rhce-ansible-data /etc/fstab

/etc/fstab の行は、永続的な設定が存在することを確認します。

cat /mnt/rhce-ansible-data/mounted-by-ansible.txt

マーカーファイルを読み取ることで、マウントされたファイルシステムが書き込み可能であり、期待されるパスに正しくアタッチされていることが証明されます。

マウント自動化の冪等性の確認

このステップでは、Playbook を再実行します。マウントポイント、fstab エントリ、および証拠ファイルはすでに目的の状態と一致しているはずです。

cd /home/labex/project/rhce-ansible
ansible-playbook playbooks/manage-mount.yml | tee reports/mount-second.txt

2 回目の実行では、Ansible が既存のマウント、fstab エントリ、およびマーカーファイルを変更せずに認識できるかどうかを確認します。

grep -E 'host.*changed=0' reports/mount-second.txt

まとめ

ansible.posix.mount を使用して安全な tmpfs マウントを設定し、ライブおよび永続的なマウント状態を検証し、Playbook が収束(冪等)することを確認しました。