Возможна отправка файла в первый пункт назначения

Я отправляю файл конфигурации для тысяч узлов, так как из-за некоторой настройки к этому файлу может быть 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}}"
Другие вопросы по тегам