2017-02-23 60 views
0

我試圖禁用所有我的服務器上使用可靠的回購,所以我試圖做一個目錄內的多個文件的替換,但似乎無法得到它工作任何想法讚賞!Ansible替換目錄中的多個文件中的代碼

tasks: 

    - name: get repo names 
    raw: find /etc/yum.repos.d/ -type f -name "*.repo" 
    register: repos 

    - name: disable all repos 
    replace: dest={{repos}} regexp="enabled=1" replace="enabled=0" 
    with_items: repos.stdout_lines 

當我運行此我只是得到一個錯誤,如它試圖做一次全部?如果情況如此,我將如何分割它們?

/etc/yum.repos.d/CentOS-Debuginfo.repo\r\n/etc/yum.repos.d/epel.repo\r\n/etc/yum.repos.d/CentOS -Base.repo \ r \ n'}不存在 「

更新:

- find: 
     paths: "/etc/yum.repos.d/" 
     patterns: "*.repo" 
    register: repos 

    - name: disable all repos 
    replace: dest={{items}} regexp="enabled=1" replace="enabled=0" 
    with_items: repos 

新的錯誤是以下幾點: ! 」味精「:」 外地 'ARGS' 有無效的值,它似乎包含一個未定義的變量。錯誤是:'商品'是未定義的

好吧越來越近!在禁用回購現在收到此錯誤:

FAILED! => { 
    "failed": true, 
    "msg": "'dict object' has no attribute 'stdout_lines'" 
} 

回答

2

這是「試圖一次全部」,因爲您提供的前一個任務的整個輸出作爲dest參數:

dest={{repos}} 

相反,你應該餵你的項目迭代:

dest={{item}} 

你也別引用with_items中的變量。

第二項任務應該是這樣的:

- name: disable all repos 
    replace: dest={{repos}} regexp="enabled=1" replace="enabled=0" 
    with_items: "{{ repos.stdout_lines }}" 

此外,你可以使用find module代替raw命令。

+0

嗨更新上面對不起沒有意識到它不會顯示好評論! – completenewb

+0

檢查更新回答 – techraf

+0

感謝您的這一點,我不認爲查找是正確地存儲可能禁用讀取的信息?添加新的錯誤,再次感謝! – completenewb

0

錯誤是:「項目」是不確定的

這是因爲ü必須

dest= 

(dest={{item}}) 

使用「項目」,而不是項目,而是items

所以正確的方法是:

- name: disable all repos 
    replace: dest={{item}} regexp="enabled=1" replace="enabled=0" 
    with_items: repos 
相關問題