【问题标题】:Ansible send file to the first met destinationAnsible 将文件发送到第一个遇到的目的地
【发布时间】:2015-12-17 21:12:24
【问题描述】:

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

基于此,我正在寻找一些方法来设置复制模块的“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}}"

【问题讨论】:

    标签: copy ansible nagios nrpe


    【解决方案1】:

    一种选择是简单地搜索已经存在的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 在 cmets 中指出的那样,如果 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}}"
    

    【讨论】:

    • 你好@ydaetskcoR,这实际上是我现在正在做的,但我试图找到一个没有shell的解决方案,所以我可以使用--check
    • 我已经添加了第一次尝试使用 stat 可能需要的内容,但没有时间对其进行测试,然后对其进行调整以使其正常工作。如果您可以自己解决,请随时提出修改建议,否则我会在有空闲时间时尝试再看一下。
    • 感谢您的帮助。我编辑了我的帖子以分享我最后的努力。现在的问题是 --diff 不再起作用了
    • 不知道为什么,但它现在可以工作了。再次感谢您的帮助
    • 我的意思是建议对答案进行编辑。我已经在自己身上添加了它。感谢您完成它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-02
    • 1970-01-01
    相关资源
    最近更新 更多