Ansible如何将新值分配给额外的变量值
Ansible how to assign new value to extra vars value
塔:3.2.3
Ansible 2.4.2
我有一个 Tower 剧本,其中分配了一个值让我们说 build_cl:latest。这是在 Ansible Tower 的调查中定义的,我认为它被视为 extra-vars。我有一个执行检查的任务,如果条件正确我需要修改 build_cl.
的值
所以假设 Tower 剧本启动时,var 是:
build_cl: latest
然后:
- name: "Get latest installed CL on groups['Healthcheck_Host'][0]"
shell: |
grep -oP '(?<=\:)(.*?)(?=\-)' {{ latest_deployed_build_dir.stdout }}/buildinfo.txt
register: latest_deployed_cl
- debug:
var: latest_deployed_cl
- set_fact:
build_cl: "{{ latest_deployed_cl.stdout }}"
cacheable: yes
- debug:
var: build_cl
我已经测试并调试了这里的第一个任务 returns 让我们说 123456.
但是我尝试使用 set_fact 模块,但第二个调试输出仍然给出:latest.
我尝试的任何操作似乎都不会影响原始值。帮助将不胜感激。谢谢
额外变量(即使用 -e
选项在命令行上传递的变量)具有 highest precedence 并且在剧本生命周期内无法更改。 set_fact
不会抛出任何错误,但该值将保持在启动时传递的值。
这里有一个简单的例子来说明:
---
- name: Immutable extra var demo
hosts: localhost
gather_facts: false
vars:
test_var: value set in playbook var
tasks:
- name: debug var value at playbook start
debug:
var: test_var
- name: change var value
set_fact:
test_var: value set in set_fact
- name: debug var value at playbook end
debug:
var: test_var
没有额外的变量:
$ ansible-playbook test.yml
PLAY [Immutable extra var demo] ********************************************************************************************************************************************************************************************************
TASK [debug var value at playbook start] ***********************************************************************************************************************************************************************************************
ok: [localhost] => {
"test_var": "value set in playbook var"
}
TASK [change var value] ****************************************************************************************************************************************************************************************************************
ok: [localhost]
TASK [debug var value at playbook end] *************************************************************************************************************************************************************************************************
ok: [localhost] => {
"test_var": "value set in set_fact"
}
PLAY RECAP *****************************************************************************************************************************************************************************************************************************
localhost : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
有额外变量:
$ ansible-playbook test.yml -e "test_var='value set in extra vars'"
PLAY [Immutable extra var demo] ********************************************************************************************************************************************************************************************************
TASK [debug var value at playbook start] ***********************************************************************************************************************************************************************************************
ok: [localhost] => {
"test_var": "value set in extra vars"
}
TASK [change var value] ****************************************************************************************************************************************************************************************************************
ok: [localhost]
TASK [debug var value at playbook end] *************************************************************************************************************************************************************************************************
ok: [localhost] => {
"test_var": "value set in extra vars"
}
PLAY RECAP *****************************************************************************************************************************************************************************************************************************
localhost : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
塔:3.2.3 Ansible 2.4.2
我有一个 Tower 剧本,其中分配了一个值让我们说 build_cl:latest。这是在 Ansible Tower 的调查中定义的,我认为它被视为 extra-vars。我有一个执行检查的任务,如果条件正确我需要修改 build_cl.
的值所以假设 Tower 剧本启动时,var 是:
build_cl: latest
然后:
- name: "Get latest installed CL on groups['Healthcheck_Host'][0]"
shell: |
grep -oP '(?<=\:)(.*?)(?=\-)' {{ latest_deployed_build_dir.stdout }}/buildinfo.txt
register: latest_deployed_cl
- debug:
var: latest_deployed_cl
- set_fact:
build_cl: "{{ latest_deployed_cl.stdout }}"
cacheable: yes
- debug:
var: build_cl
我已经测试并调试了这里的第一个任务 returns 让我们说 123456.
但是我尝试使用 set_fact 模块,但第二个调试输出仍然给出:latest.
我尝试的任何操作似乎都不会影响原始值。帮助将不胜感激。谢谢
额外变量(即使用 -e
选项在命令行上传递的变量)具有 highest precedence 并且在剧本生命周期内无法更改。 set_fact
不会抛出任何错误,但该值将保持在启动时传递的值。
这里有一个简单的例子来说明:
---
- name: Immutable extra var demo
hosts: localhost
gather_facts: false
vars:
test_var: value set in playbook var
tasks:
- name: debug var value at playbook start
debug:
var: test_var
- name: change var value
set_fact:
test_var: value set in set_fact
- name: debug var value at playbook end
debug:
var: test_var
没有额外的变量:
$ ansible-playbook test.yml
PLAY [Immutable extra var demo] ********************************************************************************************************************************************************************************************************
TASK [debug var value at playbook start] ***********************************************************************************************************************************************************************************************
ok: [localhost] => {
"test_var": "value set in playbook var"
}
TASK [change var value] ****************************************************************************************************************************************************************************************************************
ok: [localhost]
TASK [debug var value at playbook end] *************************************************************************************************************************************************************************************************
ok: [localhost] => {
"test_var": "value set in set_fact"
}
PLAY RECAP *****************************************************************************************************************************************************************************************************************************
localhost : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
有额外变量:
$ ansible-playbook test.yml -e "test_var='value set in extra vars'"
PLAY [Immutable extra var demo] ********************************************************************************************************************************************************************************************************
TASK [debug var value at playbook start] ***********************************************************************************************************************************************************************************************
ok: [localhost] => {
"test_var": "value set in extra vars"
}
TASK [change var value] ****************************************************************************************************************************************************************************************************************
ok: [localhost]
TASK [debug var value at playbook end] *************************************************************************************************************************************************************************************************
ok: [localhost] => {
"test_var": "value set in extra vars"
}
PLAY RECAP *****************************************************************************************************************************************************************************************************************************
localhost : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0