我正在编写一个可操作的剧本来计算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 }}"我现在使用额外的vars来传递值。
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,但是我得到了空.我不知道我哪里出了问题。请帮忙..。
发布于 2021-09-01 04:46:11
我认为有两个问题
unit==GB应该是unit=GB。注意双==而不是=.
我看到下面的输出发布了这些更改
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发布于 2021-09-01 03:43:55
获得null值的主要原因是跳过了set_fact任务,而在vars:部分中分配的值保持不变。
这是因为您正在使用== (即unit==GB )传递额外的vars。
另一个问题可能是在计算之后将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",它应该可以按预期工作。
https://stackoverflow.com/questions/69004211
复制相似问题