2017-12-18 79 views
-1

我想列出一個目錄中的文件並將其複製到其他目錄。如何在Ansible中將數組傳遞給已註冊的變量?

這是我的劇本:

--- 
- hosts: testserver 
    become: true 
    tasks: 
    - name: list files 
    command: " ls /root/" 
    register: r 
    - debug: var=r 

    - debug: msg="item.item={{item.item}}, item.stdout={{item.stdout}}, item.changed={{item.changed}}" 
    with_items: "{{r.results}}" 

這是我收到的錯誤:

失敗! => {「味精」:「'字典對象有沒有屬性‘結果’」}

+1

'results'當您註冊循環 –

回答

0

你有一個debug任務那裏,說明你的變量r的內容。你看到一個名爲results的鑰匙嗎?

當在循環中有註冊值時,您只能看到results密鑰(並且需要使用item.item),如here所述。你不這樣做,所以r的結構將會簡單得多。

如果你想遍歷ls輸出的線,你可能想:

- debug: 
    msg: "filename={{item}}" 
    with_items: "{{r.stdout_lines}}" 
+0

item.item也給錯誤 –

+0

--- 的值(s)爲唯一有效的 - 主機:TESTSERVER 成爲:真正 任務: - 名稱:列表文件 命令: 「LS /根/」 寄存器: 「R」 - 調試:VAR = R - 調試:MSG = {{item.item}} with_items: - 「{{ r.stdout_lines}}「 –

+0

是的,'item.item'給你t的錯誤他同樣的原因。在我的例子中,你會注意到我沒有使用它。 – larsks

0

我試圖列出目錄中的文件複製到其他目錄。

  1. Don't parse ls output!既不Ansible,也沒有任何其他地方。

  2. 請不要使用command模塊Ansible提供的本地模塊。

Ansible有一個find module它返回一個文件列表。你的情況:

- name: list files 
    find: 
    paths: /root 
    register: my_find 

- debug: 
    var: item.path 
    with_items: "{{ my_find.files }}" 
相關問題