Ansible同步模块模式=拉到保存到/ tmp / <主机名> / <文件名>

时间:2017-05-15 17:40:14

标签: ansible

使用mode = pull,我想将远程文件提取并保存到&#34; dest&#34;同一顶级目录树下每个主机名的目录。

这就是我想要的:

src=/proc/cpuinfo (of every Ansible inventory host)

dest=/tmp/host1/cpuinfo, /tmp/host2/cpuinfo, /tmp/host3/cpuinfo, etc. (of the Ansible master)

如果我这样做,

ansible all -m synchronize 'src=/proc/cpuinfo dest=/tmp/cpuinfo mode=pull'
Ansible主机(= dest)上的

/ tmp / cpuinfo文件被每个远程主机的cpuinfo文件覆盖,我只能看到最后一个。

也就是说,我想要一个类似的行为,就像我运行

一样
ansible all -m fetch -a 'src=/proc/cpuinfo dest=/tmp/cpuinfo'

提前谢谢!

  • 史蒂夫

2 个答案:

答案 0 :(得分:0)

我怀疑你可以用单个ad-hoc命令来做到这一点。

ansible all -m synchronize -a 'src=/proc/cpuinfo dest=/tmp/{{inventory_hostname}}/cpuinfo mode=pull'

可以做到这一点,但您必须提前创建/tmp/<hostname>目录,因为rsync不会为您创建不存在的目录。并且您不能使用安全事实(如ansible_hostnameansible_fqdn)作为ad-hoc模块执行的参数 - 仅限#34;预定义&#34;变量(如inventory_hostname)。

更新:剧本代码

- file:
    path: "/tmp/{{ inventory_hostname }}"
    state: directory
  delegate_to: localhost
- synchronize:
    src: /proc/cpuinfo
    dest: "/tmp/{{ inventory_hostname }}/cpuinfo"
    mode: pull

答案 1 :(得分:0)

(原创海报)

仅使用同步模块执行此操作的另一种方法:

  - synchronize:
      src: "{{ item.src }}"
      dest: "{{ item.dest }}"
      mode: pull
    with_items:
      - { src: '/proc/cpuinfo', dest: '/tmp/testing/{{ inventory_hostname }}/proc' }
      - { src: '/proc/meminfo', dest: '/tmp/testing/{{ inventory_hostname }}/proc' }
      - { src: '/etc/services', dest: '/tmp/testing/{{ inventory_hostname }}/etc' }