An ansible-sensu-plugin-install роль была создана для установки sensu-плагинов с помощью этот код:
- name: be sure sensu-plugins-{{ item.name }} is installed
command: sensu-install -p {{ item.name }}:{{ item.version }}
when: "'sensu-plugins-{{ item.name }} ({{ item.version }})' not in installed_plugins.stdout"
with_items: "{{ sensu_plugin_install }}"
Есть еще две роли, для которых требуются сенсорные плагины. Первая роль требует плагин почтовой программы:
sensu_plugin_install:
- name: mailer
version: 1.0.0
и второй требует несколько плагинов:
sensu_plugin_install:
- name: cpu-checks
version: 1.0.0
- name: disk-checks
version: 2.0.1
- name: http
version: 1.0.0
- name: memory-checks
version: 1.0.2
- name: ntp
version: 1.0.0
Первая и вторая роли включены в одну книгу.
Текущий результат
Либо mailer
определенные в роли 1 или плагины, определенные в роли 2, будут установлены. Комментируя один из sensu_plugin_install
объявления будут устанавливать плагины, относящиеся к первой или второй роли, например будет установлен только плагин почтовой программы:
TASK [030.sensu-plugin-install : be sure sensu-plugins-{{ item.name }} is
installed] ***
changed: [host.example.com] => (item={u'version': u'1.0.0', u'name':
u'mailer'}) => {"changed": true,
если sensu_plugin_install
закомментирована вторая роль.
Ожидаемый результат
Ожидаемый результат - будут установлены все плагины, то есть в данном случае шесть вместо одного, т.е. mailer
или пять.
Обсуждение
Похоже, что массивы не будут объединены, так как вместо шести будет установлен один или пять плагинов, и один из двух необходимо закомментировать, чтобы принудительно установить плагин.
Один из вариантов решения этой проблемы - объединить эти массивы, т.е. sensu_plugin_install + sensu_plugin_install
. Например, в Puppet можно объединять массивы, используя hiera_array
. Как это можно было сделать в Ansible?
С помощью Две разные переменные для решения проблемы не вариант, поскольку используются функции одной роли, и не рекомендуется добавлять другую переменную к этой роли, если другая роль хочет установить плагины sensu.
Попробуйте эту роль из ansible galaxy https://galaxy.ansible.com/eugene0707/merge_custom_vars/
Я сделал это некоторое время назад по той же причине. Он может объединять словари из нескольких файлов vars и устанавливать собственный приоритет слияния.
Эта роль может работать в Ansible 2.0+.