【问题标题】:Ansible how to assign new value to extra vars valueAnsible如何为额外的变量值分配新值
【发布时间】:2020-07-23 00:41:18
【问题描述】:

塔:3.2.3 Ansible 2.4.2

我有一个分配了值的 Tower 剧本,比如说 build_cl: latest。这是在 Ansible Tower 的调查中定义的,我认为这被视为额外变量。我有一个执行检查的任务,如果条件正确,我需要修改 build_cl 的值。

所以让我们说当 Tower playbook 被启动时,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

我已经测试过,这里返回的第一个任务的调试可以说是 123456

但是我尝试使用 set_fact 模块,但第二个调试输出仍然给出:latest

我尝试的一切似乎都不会影响原始价值。帮助将不胜感激。谢谢

【问题讨论】:

  • 我已经验证 ansible 正在分配新值:{ "changed": false, "ansible_facts": { "build_cl": "123456" }, "_ansible_no_log": false }
  • 您是否将其作为额外的 var 传递?如果是,则绝对没有机会修改该值。额外的变量有the highest precedence priority

标签: variables ansible ansible-tower


【解决方案1】:

额外的变量(即在命令行上使用-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

【讨论】:

  • 邓...感谢您的快速回复。我将不得不花时间我不想或有,然后修改我的逻辑:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-08
  • 1970-01-01
  • 1970-01-01
  • 2019-10-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多