2016-06-21 53 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其次是一些空白。

相关问题