Ansible Playbook无法在磁盘使用率达80%时触发失败问题求助
解决Ansible Playbook磁盘使用率超限触发失败的问题
原脚本存在两处核心问题,导致无法实现需求,以下是问题分析和修正方案:
问题点分析
- awk命令语法与逻辑错误:
原命令使用了中文单引号‘’,会导致shell执行报错;同时awk的条件判断位置错误,无法正确筛选出使用率超80%的分区。 - fail模块判断逻辑错误:
filesystem.stdout是文本内容(可能为空或多行分区信息),转成int后无法正确反映是否有分区超限,导致条件永远不成立。
修正后的完整Playbook
- name: Check for filesystem usage over 80% shell: df -h | awk '$5+0 > 80 {print $1, $5}' register: filesystem changed_when: false # 标记任务无系统状态变更 failed_when: false # 不直接因超限触发任务失败,交给后续fail模块统一处理 - name: Show disk usage details if over 80% debug: var: filesystem.stdout_lines when: filesystem.stdout != "" - name: Fail if any disk partition usage exceeds 80% fail: msg: "Disk space is running low: {{ filesystem.stdout_lines | join('; ') }}" when: filesystem.stdout != ""
关键修改说明
- 修正awk命令:使用英文单引号,调整条件判断位置,确保只输出使用率超80%的分区名称和对应使用率。
- 优化shell任务属性:添加
changed_when和failed_when避免误标记任务状态,让流程更可控。 - 调整fail触发条件:通过判断
filesystem.stdout是否非空来确定是否存在超限分区,同时将超限信息嵌入错误提示,方便排查。
内容的提问来源于stack exchange,提问作者techuserf
相关产品推荐
相关产品推荐

