2015-12-17 44 views
1

我發送了數千個節點的配置文件,因爲有一些自定義可能有5或6個路徑到該文件(只有一個文件的主機,但路徑可能會有所不同)和沒有一種簡單的方法可以用事實來確定默認位置。Ansible發送文件到第一個遇到的目標

基於此,我正在尋找一些方法來設置複製模塊的「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。

編輯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的shell /命令任務或者通過一組位置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/或其他任何路徑真的)如果find未找到nrpe.cfg文件。

要使用stat而不是一個shell /命令的任務,你可以做這樣的事情:

- 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

我已經添加了第一次刺你可能需要使用統計數據,但沒有時間來測試它,然後調整它使它工作。如果你可以自己解決問題,那麼可以隨時提出修改建議,否則我會嘗試在有空閒時間時再看看這個。 – ydaetskcoR

+0

感謝您的幫助。我編輯了我的帖子,分享我最後的努力。現在的問題是--diff不起作用 –

相關問題