Saltar al contenido

¿Cómo obtener los paquetes yum instalados con Ansible?

Solución:

Puedo hacerlo fácilmente usando comandos de shell que no son idempotentes

Realmente no puedes hablar de idempotencia, cuando estás preguntando el estado actual de una máquina.

“Idempontent” significa que la tarea garantizará que la máquina esté en el deseado indique sin importar cuántas veces ejecute una determinada tarea.

Cuando consulta el estado actual, no describe el estado deseado. No importa lo que haga, el método que utilice, el término “idempotente” simplemente no es aplicable.


Con respecto a su ejemplo, que no le da resultados, ha repetido dos veces el mismo argumento list y la tarea debería fallar (no lo hace, lo que parece una peculiaridad de Ansible).

Para obtener una lista de los paquetes instalados, debe usar:

- name: yum_command 
  yum:
    list=installed
  register: yum_packages

- debug:
    var: yum_packages

Guarda una lista de diccionarios que describen cada paquete en una variable yum_packages.

Luego puede usar un filtro de consulta JSON para obtener un solo paquete (tar):

- debug: var=item
  with_items: "{{yum_packages|json_query(jsonquery)}}"
  vars:
    jsonquery: "results[?name=='tar']"

para obtener un resultado como este:

"item": {
    "arch": "x86_64",
    "epoch": "2",
    "name": "tar",
    "nevra": "2:tar-1.26-31.el7.x86_64",
    "release": "31.el7",
    "repo": "installed",
    "version": "1.26",
    "yumstate": "installed"
}

O solo su versión:

- debug: var=item
  with_items: "{{yum_packages|json_query(jsonquery)}}"
  vars:
    jsonquery: "results[?name=='tar'].version"
"item": "1.26"

Desde Ansible 2.5, también puede utilizar el package_facts módulo: recopilará la lista de paquetes instalados como hechos de Ansible.

Ejemplo de los documentos:

- name: get the rpm package facts
  package_facts:
    manager: rpm

- name: show them
  debug: var=ansible_facts.packages
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *