2015-10-14 35 views
2

我需要掃描/etc/fstab文件才能找到條目,如果不存在,請將另一個文件的內容追加到/etc/fstab將源文件的內容追加到目標文件

我見過的Ansible模塊似乎不允許將文件附加到其他文件,而不是添加特定的「文本」行。

+0

裝配模塊是否工作? http://docs.ansible.com/ansible/assemble_module.html – user2182349

+0

assemble更多的是將目錄中的一堆文件連接成單個文件。一個典型的例子(和它寫的是什麼)是''conf.d'樣式的目錄到'.conf'文件 – ydaetskcoR

回答

3

如果您的用例僅僅檢查是否存在特定行,則可以使用lineinfile模塊。

例如,如果你想確保有定義的/dev/sdb1分區,它映射到/data和使用EXT4文件系統,那麼你可以使用:

lineinfile: dest=/etc/fstab regexp="^/dev/sdb1 " line="/dev/sdb1 /data ext4 defaults 1 2" 

如果沒有開頭行/dev/sdb1然後它將它添加到文件的末尾。如果該行的其餘部分不匹配(例如,如果將其安裝爲ext3),那麼它會將其更改爲提供的行。

如果你真的需要它使用文件的全部內容是,那麼你也許可以逃脫使用file lookup這可能看起來像:

lineinfile: dest=/etc/fstab regexp="^/dev/sdb1 " line="{{ lookup('file', 'files/fstabdata') }}" 

我沒有測試,雖然。

如果您的使用案例是圍繞安裝磁盤,那麼您可以考慮使用mount模塊來處理更好的事情。

如果你真的堅持那麼你可以隨時掏出的東西,如:

-name: Check for line in /etc/fstab 
command: grep /dev/sdb1 
changed_when: False 
register: shell_out 

-name: Append to /etc/fstab 
command: cat /home/ansible/files/fstabdata >> /etc/fstab 
when: shell_out.std_out != '' 

但總體上與Ansible你應該總是看使用訴諸炮擊了之前提供的模塊。

+0

謝謝!任何建議應該工作正常。 Liam – LiamC

+1

如果答案對你有幫助,你可以考慮[接受答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)。這有利於向未來的讀者展示相同的問題,這個答案對您有益。它還以2點聲望得分來獎勵你! – ydaetskcoR

相關問題