when vars set_fact practices playbook hostvars group_vars best ansible fact

vars - ansible set_fact



Variable de fecha Ansible (4)

El comando ansible localhost -m setup básicamente dice "ejecutar el módulo de configuración contra el host local", y el módulo de configuración recopila los hechos que se ven en el resultado.

Cuando ejecuta el comando echo estos hechos no existen ya que el módulo de instalación no se ejecutó. Un método mejor para probar cosas como esta sería usar ansible-playbook para ejecutar un libro de jugadas que se ve así:

- hosts: localhost tasks: - debug: var=ansible_date_time - debug: msg="the current date is {{ ansible_date_time.date }}"

Debido a que esto se ejecuta como un libro de jugadas, los hechos para localhost se recopilan antes de que se ejecuten las tareas. El resultado del libro de estrategias anterior será algo como esto:

PLAY [localhost] ************************************************** GATHERING FACTS *************************************************************** ok: [localhost] TASK: [debug var=ansible_date_time] ******************************************* ok: [localhost] => { "ansible_date_time": { "date": "2015-07-09", "day": "09", "epoch": "1436461166", "hour": "16", "iso8601": "2015-07-09T16:59:26Z", "iso8601_micro": "2015-07-09T16:59:26.896629Z", "minute": "59", "month": "07", "second": "26", "time": "16:59:26", "tz": "UTC", "tz_offset": "+0000", "weekday": "Thursday", "year": "2015" } } TASK: [debug msg="the current date is {{ ansible_date_time.date }}"] ********** ok: [localhost] => { "msg": "the current date is 2015-07-09" } PLAY RECAP ******************************************************************** localhost : ok=3 changed=0 unreachable=0 failed=0

Estoy tratando de aprender a usar los hechos de Ansible como variables, y no lo entiendo. Cuando corro ...

$ ansible localhost -m setup

... enumera todos los hechos de mi sistema. Seleccioné uno al azar para intentar usarlo, ansible_facts.ansible_date_time.date, pero no puedo entender CÓMO usarlo. Cuando corro ...

$ ansible localhost -m setup -a "filter=ansible_date_time" localhost | success >> { "ansible_facts": { "ansible_date_time": { "date": "2015-07-09", "day": "09", "epoch": "1436460014", "hour": "10", "iso8601": "2015-07-09T16:40:14Z", "iso8601_micro": "2015-07-09T16:40:14.795637Z", "minute": "40", "month": "07", "second": "14", "time": "10:40:14", "tz": "MDT", "tz_offset": "-0600", "weekday": "Thursday", "year": "2015" } }, "changed": false }

Entonces, está CLARAMENTE allí. Pero cuando corro ...

$ ansible localhost -a "echo {{ ansible_facts.ansible_date_time.date }}" localhost | FAILED => One or more undefined variables: ''ansible_facts'' is undefined $ ansible localhost -a "echo {{ ansible_date_time.date }}" localhost | FAILED => One or more undefined variables: ''ansible_date_time'' is undefined $ ansible localhost -a "echo {{ date }}" localhost | FAILED => One or more undefined variables: ''date'' is undefined

¿Qué no estoy recibiendo aquí? ¿Cómo uso los hechos como variables?


El módulo de búsqueda de ansible funciona bien para mí. El yml es:

- hosts: test vars: time: "{{ lookup(''pipe'', ''date -d /"1 day ago/" +/"%Y%m%d/"'') }}"

Puede reemplazar cualquier comando con fecha para obtener el resultado del comando.


La opción de filtro filtra solo la subclave de primer nivel debajo de ansible_facts


Tenga en cuenta que el comando ansible no recopila hechos, pero sí lo hace el comando ansible-playbook . Cuando se ejecuta la ansible -m setup , el módulo de instalación pasa a ejecutar la colección de hechos para que usted obtenga los hechos, pero ejecutar el ansible -m command no. Por lo tanto, los hechos no están disponibles. Esta es la razón por la que las otras respuestas incluyen archivos YAML de playbook e indican que la búsqueda funciona.