2017-06-28 33 views
0

我需要添加文字說明「允許所有」正下方的「訂單允許,拒絕」 所以這樣的:Ansible:我如何使用Ansible playbook在conf文件的中間插入文本字符串?

# Restrict access to the server... 
<Location /> 
    Order allow,deny 
</Location> 

應該是這樣的:

# Restrict access to the server... 
<Location /> 
    Order allow,deny 
    Allow all 
</Location> 

我Ansible劇本塊看起來是這樣的到目前爲止:

- name: Enable access to the server                                          
    lineinfile: 
     destfile: /etc/cups/cupsd.conf 

回答

0

沒有辦法無條件地「插入使用Ansible劇本 conf文件中間的文本字符串」。

Ansible lineinfile模塊,您可以確保一個特定的行的文件是否存在,如果沒有,它會前(insertbefore)插入或之後(insertafter)另一條線,但即使它在特定的情況下, ,這是一個特定情況(條件:該行不在文件的其他位置)。

對於平面配置文件,這可能是可以接受的,但如果文件是結構化的(可能包含相同行的部分),則會很麻煩。


底線是:你應該避免依賴於未指定的初始狀態的代碼,所以使用template module代替。

在極少數的情況下是不可能的,定義全部與blockinfile module,例如:

- blockinfile: 
    path: /etc/cups/cupsd.conf 
    marker: # Ansible-managed block { mark } 
    block: | 
     <Location /> 
     Order allow,deny 
     Allow all 
    </Location> 
+0

我嘗試這樣做,它在文件 – aphexlog

+0

的底部插入該塊的唯一differnce是因爲我我使用Ansible 2.2,我不得不使用destfile而不是路徑 – aphexlog

+0

默認情況下它會在底部插入塊。這就是爲什麼我說你應該使用'template'。 'blockinfile'的建議適用於某些特定情況,但您需要知道,您正在做什麼以及逐步構建文件。 – techraf