使用mode = pull,我想将远程文件提取并保存到" dest"同一顶级目录树下每个主机名的目录。
这就是我想要的:
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'
提前谢谢!
答案 0 :(得分:0)
我怀疑你可以用单个ad-hoc命令来做到这一点。
ansible all -m synchronize -a 'src=/proc/cpuinfo dest=/tmp/{{inventory_hostname}}/cpuinfo mode=pull'
可以做到这一点,但您必须提前创建/tmp/<hostname>
目录,因为rsync
不会为您创建不存在的目录。并且您不能使用安全事实(如ansible_hostname
和ansible_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' }