我正在为数千个节点发送配置文件,因为一些自定义可能有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}}"
答案 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}}"