Как получить доступ к программно сконструированной переменной ansible?
Я построил ансибельную переменную, используя две другие определенные ансибельные переменные. Построенная переменная определяется в vars / main.yml и я хотим получить доступ к определенному значению в vars / main.в формате YML. Варс/главная.yml
---
var1_var2: "some value"
Теперь я строю переменную
---
- name: Construct and get the value
hosts: localhost
tasks:
- include_vars: "vars/main.yml"
- set_fact:
variable1: "var1"
variable2: "var2"
- set_fact:
final_variable: "{{ variable1 }}_{{ variable2 }}"
- set_fact:
ultimate_variable: "{{ final_variable }}"
Если я запускаю playbook с флагом-vvv, я вижу, что ultimate_variable
устанавливает значение var1_var2
, в то время как я хочу получить значение, определенное в vars/main.в формате YML
то есть, some value
TASK [set_fact]
ok: [localhost] => {
"ansible_facts": {
"variable1": "var1",
"variable2": "var2"
},
"changed": false,
"failed": false
}
TASK [set_fact] task path: /home/ubuntu/test.yml:78
ok: [localhost] => {
"ansible_facts": {
"final_variable": "var1_var2"
},
"changed": false,
"failed": false
}
TASK [set_fact]
ok: [localhost] => {
"ansible_facts": {
"ultimate_variable": "var1_var2"
},
"changed": false,
"failed": false
}
1 ответ:
Обновленный ответ:
Используйте плагин поиска, чтобы сделать двойную замену:
ultimate_variable: "{{ lookup('vars', '{{final_variable}}') }}"
Playbook:
- include_vars: "vars/main.yml" - set_fact: variable1: "var1" variable2: "var2" - set_fact: final_variable: "{{ variable1 }}_{{ variable2 }}" - set_fact: ultimate_variable: "{{ lookup('vars', '{{final_variable}}') }}" - debug: var: ultimate_variable
Вывод:
PLAY [localhost] **************************************************************************************************************************************************************************************************** TASK [include_vars] ************************************************************************************************************************************************************************************************* ok: [localhost] TASK [set_fact] ***************************************************************************************************************************************************************************************************** ok: [localhost] TASK [set_fact] ***************************************************************************************************************************************************************************************************** ok: [localhost] TASK [set_fact] ***************************************************************************************************************************************************************************************************** ok: [localhost] TASK [debug] ******************************************************************************************************************************************************************************************************** ok: [localhost] => { "ultimate_variable": "some value" } PLAY RECAP ********************************************************************************************************************************************************************************************************** localhost : ok=5 changed=0 unreachable=0 failed=0
Надеюсь, что это помогает.