2016-06-21 15 views
0

這是我group_vars不明白爲什麼我行不斷使用ansible得到更換lineinfile

services: 
    service_csmsaga: 
    service_name: "service_csmsaga" 
    port: "21100/tcp" 
    service_csmsagatcp: 
    service_name: "service_csmsagatcp" 
    port: "21200/tcp" 

我想這些行添加到我的/etc/services使用:

- name: Add saga services to /etc/services 
    lineinfile: dest=/etc/services regexp='^{{ item.value.service_name }}' 
       line="{{ item.value.service_name}} {{ item.value.port }}" 
    with_dict: services 

的線條已被添加到/etc/services如下:

service_csmsaga 21100/tcp 
service_csmsaga 21100/tcp 
service_csmsaga 21100/tcp 
service_csmsagatcp 21200/tcp 

但它仍然繼續添加該行:

TASK [db_server : Add saga services to /etc/services] ************************** 
changed: [172.17.0.2] => (item={'value': {u'service_name': u'service_csmsaga', u'port': u'21100/tcp'}, 'key': u'service_csmsaga'}) => {"backup": "", "changed": true, "item": {"key": "service_csmsaga", "value": {"port": "21100/tcp", "service_name": "service_csmsaga"}}, "msg": "line replaced"} 
changed: [172.17.0.2] => (item={'value': {u'service_name': u'service_csmsagatcp', u'port': u'21200/tcp'}, 'key': u'service_csmsagatcp'}) => {"backup": "", "changed": true, "item": {"key": "service_csmsagatcp", "value": {"port": "21200/tcp", "service_name": "service_csmsagatcp"}}, "msg": "line added"} 

我在這裏錯過了什麼?

回答

1

看看你的regexp參數然後你的數據。

第一次迭代(service_csmsaga)將匹配兩條線,因此會將兩條線都替換爲第一條線。然後,第二次迭代將添加一條新行,因爲service_csmsagatcp不存在。然後,當你再次運行你的劇本時,你的第一次迭代會替換所有三行,等等。

要修復它,您需要更改您的數據(更改服務的名稱)或在您的正則表達式中更具體。

像這樣的東西應該工作:

- name: Add saga services to /etc/services 
    lineinfile: dest=/etc/services regexp='^{{ item.value.service_name }}\s' 
       line="{{ item.value.service_name}} {{ item.value.port }}" 
    with_dict: services 

這將確保它只是取代它,這樣你的服務名稱不重疊之前匹配service_name其次是一些空白。

相關問題