如何编写Ansible Playbook验证fstab中NFS已挂载且支持读写
Ansible NFS挂载点读写校验实现方案
直接使用循环遍历挂载路径列表,结合临时文件创建+错误捕获逻辑即可实现需求,完整任务示例如下:
--- - name: NFS挂载校验任务 hosts: your_target_hosts gather_facts: false tasks: # 此处承接你已完成的挂载状态校验逻辑,仅做示例 - name: 获取当前已挂载的NFS路径 shell: mount -t nfs,nfs4 | awk '{print $3}' register: current_mount changed_when: false - name: 校验fstab NFS条目全部挂载 assert: that: fstab_devices | difference(current_mount.stdout_lines) | length == 0 fail_msg: "未挂载的fstab NFS条目:{{ fstab_devices | difference(current_mount.stdout_lines) | join(', ') }}" success_msg: "所有fstab NFS条目均已正常挂载" # 读写权限校验核心逻辑 - name: 校验NFS挂载点可写 block: - name: 每个NFS挂载点创建临时测试文件 tempfile: path: "{{ item }}" state: file suffix: .nfs_write_check loop: "{{ current_mount.stdout_lines }}" # 如果你已将路径存入block_devices变量,可替换为 loop: "{{ block_devices }}" register: test_file_result changed_when: false - name: 清理所有测试临时文件 file: path: "{{ item.path }}" state: absent loop: "{{ test_file_result.results }}" changed_when: false rescue: - name: 输出不可写挂载点错误并终止 fail: msg: "NFS挂载点 {{ failed_item.item }} 无写入权限,请检查配置" vars: # 筛选出执行失败的挂载点 failed_item: "{{ test_file_result.results | selectattr('failed', 'equalto', true) | first }}"
说明
- 使用
tempfile模块创建随机命名的临时文件,避免和挂载点下现有文件冲突 - 校验类任务统一添加
changed_when: false,不会标记为系统状态变更 - 任意挂载点创建文件失败时会自动进入rescue逻辑,精准输出不可写的挂载点路径后终止执行
- 如果仅需校验fstab中定义的NFS挂载点权限,将循环列表替换为
{{ fstab_devices }}即可
内容的提问来源于stack exchange,提问作者TheStromp
相关产品推荐
相关产品推荐

