You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 06:36:00