2015-12-17 3 views
1

Я отправляю конфигурационный файл для тысяч узлов, из-за некоторой настройки есть, возможно, 5 или 6 путей к этому файлу (есть только один файл для хоста, но путь может меняться) и нет простого способа определить местоположение по умолчанию с фактами.Ansible send file to first met destination

Исходя из этого, я ищу способ установить «dest» модуля копирования, как мы можем установить «src», с with_first_found loop.

Нечто подобное:

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 это будет намного проще.

EDIT 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}}" 

ответ

4

Одним из вариантов может быть просто искать уже существующие nrpe.cfg файл, а затем зарегистрировать его местоположение, переменную, которая будет использоваться для задачи копирования.

Вы можете сделать это либо с помощью задачи оболочки/команды, которая просто использует 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}}" 
+0

Здравствуйте @ydaetskcoR, это на самом деле то, что я делаю прямо сейчас, но я пытаюсь найти решение без оболочки, поэтому я мог бы использовать --check –

+0

Я добавил первый удар по тому, что вам может понадобиться для использования stat вместо этого, но у вас нет времени проверить его, а затем настроить его, чтобы он работал. Если вы можете самостоятельно разобраться в этом, тогда не стесняйтесь предлагать редактирование, иначе я попробую еще раз взглянуть на это, когда у меня будет свободное время. – ydaetskcoR

+0

Спасибо за помощь. Я редактировал свой пост, чтобы поделиться своими последними усилиями. Проблема теперь в том, что -diff больше не работает –