2017-01-13 7 views
1

Я работаю с файлом инвентаризация анзибля и в sensu-cli (interactes с API Sensu в)анзибля - автоматизировать удаление хостов в Sensu

После того, как сервер удаляются из инвентаря, что сервер все еще прилипает вокруг, пока не будет удален вручную с вызов API.

Этот рабочий процесс работает, но он не идеален в любом случае.

Последняя задача удалит все серверы. Любой сервер, на котором установлен sensu-клиент, будет обращаться к ведущему устройству Sensu и самому считывать. Что совсем не круто.

Идея здесь заключается в том, чтобы удалять ТОЛЬКО серверы, не находящиеся в файле инвентаризации.

- 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 

ответ

1

Попробуйте это:

- 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']) }}"