介绍
挂载自动化应当是可重复且安全的。对于实验虚拟机而言,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 中存在用于未来启动的条目。最后的 copy 任务会在挂载的文件系统中写入一个小标记文件,以便你验证挂载是否可用。
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
第二次运行将检查 Ansible 是否能在不进行任何更改的情况下识别现有的挂载、fstab 条目和标记文件。
grep -E 'host.*changed=0' reports/mount-second.txt
总结
你使用 ansible.posix.mount 配置了一个安全的 tmpfs 挂载,验证了实时和持久化的挂载状态,并确认了 Playbook 的收敛性(幂等性)。


