ansible - 如何在 ansible playbook 中使用 set_fact 计算算术百分比值
问题描述
我正在编写一个可靠的剧本来计算advisory_limit_size,如果单位是GB,它是hard_limit_size 的80%。
- name: isi_increase_quota
hosts: localhost
connection: local
vars:
new_hard_limit_size:
new_advisory_limit_size:
tasks:
- name: Advisory limit size if cap unit is GB
set_fact:
new_advisory_limit_size: "{{ (new_hard_limit_size*0.8)|int }}"
when: ( unit =="GB" )
- name: Print
debug:
msg:
- "{{ new_hard_limit_size }}"
- "{{ new_advisory_limit_size }}"
我现在使用额外的变量来传递值
ansible-playbook isi_increase_quota_v1.yml -e "unit==GB new_hard_limit_size=2"
我的输出是
(ansible-3) [*****@****** ansiblecode]$ ansible-playbook isi_increase_quota_v1.yml -e "unit==GB new_hard_limit_size=2"
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'
PLAY [isi_increase_quota] **************************************************************************************************
TASK [Gathering Facts] *****************************************************************************************************
ok: [localhost]
TASK [Advisory limit size if cap unit is GB] *******************************************************************************
skipping: [localhost]
TASK [Print] ***************************************************************************************************************
ok: [localhost] => {
"msg": [
"2",
null
]
}
PLAY RECAP *****************************************************************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
我正在寻找new_advisory_limit_size = 1.6但我得到null ...我不确定我哪里出错了。请帮忙....
解决方案
获取值的主要原因null
是因为set_fact
任务被跳过,而在vars:
节中分配的值仍然存在。
这是因为您通过==
, 即传递额外变量unit==GB
。
另一个问题可能是您在计算之后new_advisory_limit_size
将 的值转换为,这会将浮点 ( ) 转换为整数。过滤器应应用于输入(如果需要)。int
1.6
int
new_hard_limit_size
例子:
- name: Advisory limit size if cap unit is GB
set_fact:
new_advisory_limit_size: "{{ new_hard_limit_size | int * 0.8 }}"
when: unit == "DB"
- name: show new_advisory_limit_size
debug:
var: new_advisory_limit_size
运行剧本时,通过-e "unit=GB"
,它应该按预期工作。
推荐阅读
- java - 如何查看 ArrayList 是否包含整个术语并且仅包含该术语?
- python - 数据框平均计算输出似乎错误
- javascript - Bootsrap 按钮在 React 中无法正常工作
- javascript - 将左标签推到桑基图中节点的左侧
- python - 如何在文件列表中为文件夹中的所有文件添加前缀“_”[Python]
- javascript - 获取购物车中物品的价值并相应地移除库存
- r - 从文件列表中读取 CSV 并“变异”一列(日期)
- c++ - 如何正确释放动态内存
- angular-material - 如何在 Angular 8 中的 Material Angular 中创建持续时间选择器
- python - pip 安装问题