2014-10-09 2 views
1

закомментировать несколько строк должны работать со стандартной петлей [1], как это:анзибль петли в lineinfile

- name: "Allow /srv folder accessed by default. Just comment out the lines to allow." 
lineinfile: dest=/etc/apache2/apache2.conf regexp={{ item.regexp }} line={{ item.line }} state=present 
with_items: 
    - { regexp: '#<Directory /srv/>', line: '<Directory /srv/>' } 

Но я получил ошибку:

 failed: [192.168.101.101] => (item={'regexp': '#<Directory /srv/>', 'line': '<Directory /srv/>'}) => {"failed": true, "item": {"line": "<Directory /srv/>", "regexp": "#<Directory /srv/>"}} 
msg: this module requires key=value arguments (['dest=/etc/apache2/apache2.conf', 'regexp=#<Directory', '/srv/>', 'line=<Directory', '/srv/>', 'state=present']) 

FATAL: all hosts have already failed -- aborting 

Так как получить эту работу с несколько строк/элементов?

[1] http://docs.ansible.com/playbooks_loops.html#standard-loops

ответ

3

спасибо, ворошилка42! Вы больше, чем правы.

Чтобы быть идемпотентным, задача lineinfile должна совпадать как с прокомментированным, так и с несогласованным состоянием строки, поэтому мы начинаем ее:^#? Таким образом, полностью функционирующий игра установлена, чтобы быть:

- name: "Allow /srv folder accessed by default. Comment out the lines to allow. " 
    lineinfile: 
     dest=/etc/apache2/apache2.conf 
     regexp="{{ item.regexp }}" 
     line="{{ item.line }}" 
     state=present 
    with_items: 
     - { regexp: '^#?<Directory /srv/>', line: '<Directory /srv/>' } 
     - { regexp: '^#?\tOptions Indexes FollowSymLinks', line: '\tOptions Indexes FollowSymLinks' } 
     - { regexp: '^#?\tAllowOverride None', line: '\tAllowOverride None' } 
     - { regexp: '^#?\tRequire all granted', line: '\tRequire all granted' } 
     - { regexp: '^#?</Directory>', line: '</Directory>'} 

Это на самом деле не является хорошей идеей. Определенно лучше использовать копию с резервной копией = да.

1

Вы были действительно близки к тому, это работает. Просто добавьте цитаты вокруг регулярного выражения и строки.

lineinfile: dest=/etc/apache2/apache2.conf regexp="{{ item.regexp }}" line="{{ item.line }}" state=present 

Я не был уверен, но сообщение об ошибке подразумеваемого были проблемы с видя regexp и line арга, так что я попробовал несколько вещей.

Напоминание, lineinfile - это нечто вроде противодействия. Когда вы обнаружите, что используете его, это знак, который вы должны рассмотреть, перейдя на copy или template.

Смежные вопросы