Ansible将文件发送到第一个到达目的地

时间:2015-12-17 21:12:24

标签: copy ansible nagios nrpe

我正在为数千个节点发送配置文件,因为一些自定义可能有5或6个路径到该文件(主机只有一个文件,但路径可能不同)并且没有一个简单的方法用事实计算出默认位置。

基于此,我正在寻找一些设置复制模块“dest”的方法,就像我们可以用with_first_found loop设置“src”一样。

类似的东西:

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 个答案:

答案 0 :(得分: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/文件,我们还有第三个任务可以回退到复制到某个默认路径(可能是nrpe.cfg或任何其他路径) find找不到。

要使用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}}"