Возможна отправка файла в первый пункт назначения
Я отправляю файл конфигурации для тысяч узлов, так как из-за некоторой настройки к этому файлу может быть 5 или 6 путей (есть только один файл для хоста, но путь может отличаться), и нет простого способа выяснить расположение по умолчанию с фактами.
Исходя из этого, я ищу способ установить "dest" модуля копирования, как мы можем установить "src", с помощью with_first_found
петля
Что-то вроде того:
copy: src=/foo/{{ ansible_hostname }}/nrpe.cfg dest="{{item}}
with_items:
- "/etc/nagios/nrpe.cfg"
- "/usr/local/nagios/etc/nrpe.cfg"
- "/usr/lib64/nagios/etc/nrpe.cfg"
- "/usr/lib/nagios/etc/nrpe.cfg"
- "/opt/nagios/etc/nrpe.cfg"
PS: я отправляю nrpe.cfg, так что если кто-то знает лучший способ найти, где находится nrpe.cfg по умолчанию, это будет намного проще.
РЕДАКТИРОВАТЬ 1: мне удалось работать с помощью @ydaetskcoR, как это:
- name: find nrpe.cfg
stat:
path: "{{ item }}"
with_items:
- "/etc/nagios/nrpe.cfg"
- "/usr/local/nagios/etc/nrpe.cfg"
- "/usr/lib64/nagios/etc/nrpe.cfg"
- "/usr/lib/nagios/etc/nrpe.cfg"
- "/opt/nagios/etc/nrpe.cfg"
register: nrpe_stat
no_log: True
- name: Copy nrpe.cfg
copy: src=/foo/{{ ansible_hostname }}/nrpe.cfg dest="{{item.stat.path}}"
when: item.stat.exists
no_log: True
with_items:
- "{{nrpe_stat.results}}"
1 ответ
Одним из вариантов может быть просто поиск уже существующих nrpe.cfg
файл, а затем зарегистрировать это местоположение в качестве переменной, которая будет использоваться для задачи копирования.
Вы можете сделать это либо с помощью команды shell/command, которая просто использует find
или перебрать кучу мест с stat
чтобы проверить, если они существуют.
Так что у вас может быть что-то вроде этого:
- name: find nrpe.cfg
shell: find / -name nrpe.cfg
register: nrpe_path
- name: overwrite nrpe.cfg
copy: src=/foo/{{ ansible_hostname }}/nrpe.cfg dest="{{item}}"
with_items:
- nrpe_path.stdout_lines
when: nrpe_path.stdout != ""
register: nrpe_copied
- name: copy nrpe.cfg to box if not already there
copy: src=/foo/{{ ansible_hostname }}/nrpe.cfg dest="{{ default_nrpe_path }}"
when: nrpe_copied is not defined
Как указал Mxx в комментариях, у нас есть третья задача - вернуться к копированию по какому-либо пути по умолчанию (потенциально /etc/nagios/
или любой другой путь на самом деле), если nrpe.cfg
файл не был найден find
,
Использовать stat
вместо задачи оболочки / команды вы можете сделать что-то вроде этого:
- name: find nrpe.cfg
stat:
path: {{ item }}
with_items:
- "/etc/nagios/nrpe.cfg"
- "/usr/local/nagios/etc/nrpe.cfg"
- "/usr/lib64/nagios/etc/nrpe.cfg"
- "/usr/lib/nagios/etc/nrpe.cfg"
- "/opt/nagios/etc/nrpe.cfg"
register: nrpe_stat
- name: overwrite nrpe.cfg
copy: src=/foo/{{ ansible_hostname }}/nrpe.cfg dest="{{item.stat.path}}"
when: item.stat.exists
with_items:
- "{{nrpe_stat.results}}"