¿Es posible establecer un hecho de una lista en Ansible?

Resuelto xiamx asked hace 10 años • 6 respuestas

¿Es posible establecer un hecho que contenga una lista en Ansible usando set_fact? ¿Cuál es la sintaxis correcta?

xiamx avatar May 07 '14 09:05 xiamx
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   
lindes-hw avatar Nov 21 '2014 00:11 lindes-hw

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"
}
Bruce P avatar May 07 '2014 16:05 Bruce P