2017-05-15 54 views
0

随着模式=拉,我希望获取并保存相同的顶级目录树下远程文件每个主机的“目标”目录。Ansible同步模块模式=拉保存到/ tmp目录/ <hostname>/<filename>

这就是我想要的:

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' 

/tmp目录内/ cpuinfo的Ansible主(= DEST)文件被由每一个远程主机的cpuinfo中的文件和覆盖我只能看到最后一个。

也就是说,我希望有一个类似的行为,如果我跑

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

预先感谢您!

  • 史蒂夫

回答

0

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

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

可以做的事情,但你必须提前创建/tmp/<hostname>目录,因为rsync不会为您创建不存在的目录。而且不能使用事实(如ansible_hostnameansible_fqdn)作为临时模块执行的参数 - 只有“预定义”变量(如​​)。

更新:剧本代码

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

谢谢,康斯坦丁。我举了一个临时执行的例子,但我想在剧本中使用同步模块。 – Young

+0

增加了playbook snippet –

+0

谢谢,但我想要的是在Ansible主机上创建/ tmp/{{inventory_hostname}},以便远程文件可以保存在/ tmp/server1/proc/cpuinfo,/ tmp/server2/proc/cpuinfo等等,就像获取模块的行为一样,而是将目录也复制到Ansible master(因为获取模块不能复制目录)。 – Young

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' } 
+0

只有存在'/ tmp/{{inventory_hostname}}'时,才会抛出错误。 –

+0

只要父目录(/ tmp/testing)存在,它就会在父目录下创建每个{{inventory_hostname}}子目录。它为我工作。也就是说,用这种方式创建{{inventory_hostname}}子目录不需要使用文件模块。 – Young

+0

对不起,我的坏。我认为它工作。由于我在删除以前的目录结构之后做了一个全新的测试,因此它不起作用。在我做了更多测试以确认之后,我会删除此部分。 – Young