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