2017-05-15 85 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