2016-06-21 13 views
0

Verwendung in ansible ersetzt bekommen group_vars:verstehen nicht, warum auf meiner Linie hält mein Dies ist lineinfile

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

ich diese Zeilen in mein /etc/services mit hinzufügen möchten:

- 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 

Die Linien haben bereits /etc/services wie unten hinzugefügt:

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

, aber es fügt immer noch die Zeile hinzu:

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"} 

Was fehlt mir hier?

Antwort

1

Betrachten Sie Ihren regexp Parameter und dann Ihre Daten.

Die erste Iteration (service_csmsaga) stimmt mit beiden Zeilen überein und ersetzt beide Zeilen durch die erste. Dann fügt die zweite Iteration dem Ende eine neue Zeile hinzu, weil service_csmsagatcp nicht existiert. Wenn Sie dann Ihr Playbook erneut ausführen, ersetzt Ihre erste Iteration alle drei Zeilen und so weiter und so fort.

Um es zu beheben, müssen Sie entweder Ihre Daten ändern (ändern Sie den Namen des Dienstes) oder genauer in Ihrem Regex.

So etwas sollte funktionieren:

- 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 

Dies wird dann stellen Sie sicher, es passt nur die service_name von einigen Leerzeichen folgt, bevor es so zu ersetzen, dass Ihre Service-Namen nicht überlappen.