如何在ansible playbook中使用set_fact计算算术百分比值
How to calculate arithmetic percentage value using set_fact in ansible playbook
我正在写一个 ansible 剧本来计算 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
在 计算之后,这将转换 float (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"
它应该按预期工作。
我看到两个问题
- ansible 调用有错别字
unit==GB
应该是 unit=GB
。注意双 == 而不是单 =.
- set_fact 应该是
new_advisory_limit_size: "{{ new_hard_limit_size | float * 0.8 }}"
.
我看到以下输出 post 更改
PLAY [isi_increase_quota] **********************************************************************************************************************************
TASK [Gathering Facts] *************************************************************************************************************************************
ok: [localhost]
TASK [Advisory limit size if cap unit is GB] ***************************************************************************************************************
ok: [localhost]
TASK [Print] ***********************************************************************************************************************************************
ok: [localhost] => {
"msg": [
"2",
"1.6"
]
}
PLAY RECAP *************************************************************************************************************************************************
localhost : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
我正在写一个 ansible 剧本来计算 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
在 计算之后,这将转换 float (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"
它应该按预期工作。
我看到两个问题
- ansible 调用有错别字
unit==GB
应该是unit=GB
。注意双 == 而不是单 =. - set_fact 应该是
new_advisory_limit_size: "{{ new_hard_limit_size | float * 0.8 }}"
.
我看到以下输出 post 更改
PLAY [isi_increase_quota] **********************************************************************************************************************************
TASK [Gathering Facts] *************************************************************************************************************************************
ok: [localhost]
TASK [Advisory limit size if cap unit is GB] ***************************************************************************************************************
ok: [localhost]
TASK [Print] ***********************************************************************************************************************************************
ok: [localhost] => {
"msg": [
"2",
"1.6"
]
}
PLAY RECAP *************************************************************************************************************************************************
localhost : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0