在Ansible剧本中使用通配符

时间:2019-11-20 12:55:00

标签: ansible wildcard

我正在ansible客户端上远程运行脚本,该脚本创建了文件名HOSTNAME.html。 我计划一次性在多个客户端上运行此程序,因此我需要能够从所有客户端复制所有文件* .html。 我是新手,所以有一些剧本。

---
- hosts: tariq-test
  tasks:

  - name: run script

    script: /usr/bin/cfg2html-linux

  - name: fetch file

    fetch:
      src: /root/*.html
      dest: /tmp/
      flat: yes

并得到这个:

[root@ansible playbooks]# ansible-playbook scp.yml

PLAY [tariq-test] *******************************************************************************************************************************************

TASK [Gathering Facts] **************************************************************************************************************************************
ok: [tariq-test]

TASK [run script] *******************************************************************************************************************************************
changed: [tariq-test]

TASK [fetch file] *******************************************************************************************************************************************
fatal: [tariq-test]: FAILED! => {"changed": false, "msg": "file not found: /root/*.html"}
        to retry, use: --limit @/etc/ansible/playbooks/scp.retry

PLAY RECAP **************************************************************************************************************************************************
tariq-test                 : ok=2    changed=1    unreachable=0    failed=1

1 个答案:

答案 0 :(得分:1)

(未经测试)

选项1: 如果文件名是hostname.html并且只有一个文件

    fetch:
      src: "/root/{{ansible_hostname}}.html"
      dest: /tmp/
      flat: yes

选项2: 使用* .html模式查找文件,然后在循环中使用访存。

- name: Find files
   find:
    path: "{{folder}}"
    pattern: "*.html"
   register: html_files


 - name: Fetch files
   fetch:
      src: "{{item.path}}"
      dest: /tmp/
      flat: yes
   with_items: "{{html_files.files}}"