¿Es posible establecer un hecho de una lista en Ansible?
¿Es posible establecer un hecho que contenga una lista en Ansible usando set_fact
? ¿Cuál es la sintaxis correcta?
Aceptado
Sí, esto es posible. Como se mencionó en otra respuesta, puede configurar una matriz usando comillas dobles, así:
- name: set foo fact to a list
set_fact:
foo: "[ 'one', 'two', 'three' ]"
Sin embargo, pensé en crear otra respuesta para indicar que también es posible agregar a una matriz existente, así:
- name: add items to foo list fact
set_fact:
foo: "{{ foo + ['four'] }}"
Combinando estos y agregando depuración como un libro de jugadas (al que llamo facts.yml
) así:
---
- name: test playbook
gather_facts: false
hosts: localhost
tasks:
- name: set foo fact to an array
set_fact:
foo: "[ 'one', 'two', 'three' ]"
- debug:
var: foo
- name: add items to foo array fact
set_fact:
foo: "{{ foo + [ 'four' ] }}"
- debug:
var: foo
Produce (a través de ansible-playbook facts.yml
) lo siguiente:
PLAY [test playbook] ********************************************************
TASK: [set foo fact to an array] ********************************************
ok: [localhost]
TASK: [debug var=foo] *******************************************************
ok: [localhost] => {
"foo": [
"one",
"two",
"three"
]
}
TASK: [add items to foo array fact] *****************************************
ok: [localhost]
TASK: [debug var=foo] *******************************************************
ok: [localhost] => {
"foo": [
"one",
"two",
"three",
"four"
]
}
PLAY RECAP ******************************************************************
localhost : ok=4 changed=0 unreachable=0 failed=0
De hecho, es. Sin embargo, es necesario citar la lista completa:
- name: set fact
set_fact: foo="[ 'one', 'two', 'three' ]"
- name: debug
debug: msg={{ item }}
with_items: foo
Las tareas anteriores deberían generar el siguiente resultado:
TASK: [set fact] **************************************************************
ok: [localhost]
TASK: [debug] *****************************************************************
ok: [localhost] => (item=one) => {
"item": "one",
"msg": "one"
}
ok: [localhost] => (item=two) => {
"item": "two",
"msg": "two"
}
ok: [localhost] => (item=three) => {
"item": "three",
"msg": "three"
}