1

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

基于此,我正在寻找某种方法来设置复制模块的“dest”,就像我们可以使用with_first_found循环设置“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}}"
4

1 回答 1

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而不是 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}}"
于 2015-12-17T22:36:40.650 回答