2017-01-13 2 views
1

Je travaille avec le fichier d'inventaire de Ansible et les sensu-cli (interactes avec l'API Sensu)Ansible - automatiser la suppression des hôtes dans Sensu

Une fois qu'un serveur est supprimé de l'inventaire de ce serveur colle toujours autour jusqu'à ce qu'il soit supprimé manuellement un appel d'API.

Ce workflow fonctionne mais n'est pas idéal en tout cas.

La dernière tâche supprimera tous les serveurs. Tout serveur sur lequel le sensu-client est installé atteindra le maître Sensu et se lira lui-même. Ce qui n'est pas cool du tout.

L'idée ici est de supprimer uniquement les serveurs ne figurant pas dans le fichier d'inventaire.

- name: Get a list hosts in Sensu 
    shell: sensu-cli client list -f json | jq -r .[].name 
    register: sensu_hosts 

- name: Get a list of Ansible hosts 
    set_fact: 
    sensu_ansible_hosts: "{{ hostvars[item]['inventory_hostname'] }}" 
    with_items: groups['all'] 

- name: Delete clients not in inventory 
    shell: sensu-cli client delete {{ item }} 
    with_items: sensu_hosts.stdout_lines 
    when: item not in sensu_ansible_hosts 

Répondre

1

Essayez ceci:

- name: Get a list hosts in Sensu 
    shell: sensu-cli client list -f json | jq -r .[].name 
    register: sensu_hosts 

- name: Delete clients not in inventory 
    shell: sensu-cli client delete {{ item }} 
    with_items: "{{ sensu_hosts.stdout_lines | difference(groups['all']) }}"