如何在Ansible Playbook中使用set_fact计算算术百分比值
问题根因
- 命令行传参语法错误
你执行ansible-playbook时通过-e传参错误使用了双等号==给unit赋值,实际unit变量没有被正确赋值为GB,导致when判断条件不满足,set_fact步骤直接被跳过。 - 计算逻辑不符合预期
你在计算new_advisory_limit_size时使用了|int过滤器,会将浮点型的计算结果强制转为整数,即使条件命中,最终得到的结果也会是1而不是你预期的1.6。
额外优化点:计算前给new_hard_limit_size加|float过滤器,避免参数以字符串形式传入时出现计算报错。
修复方案
1. 修正执行命令
将传参的双等号改为单等号:
ansible-playbook isi_increase_quota_v1.yml -e "unit=GB new_hard_limit_size=2"
2. 修正Playbook计算逻辑
修改set_fact任务的计算表达式:
- name: Advisory limit size if cap unit is GB set_fact: new_advisory_limit_size: "{{ new_hard_limit_size | float * 0.8 }}" when: unit == "GB"
验证效果
修改完成后重新执行,输出的new_advisory_limit_size将会是预期的1.6。
内容的提问来源于stack exchange,提问作者Suresh
相关产品推荐
相关产品推荐

