Ansible lineinfile跳过行

时间:2015-09-11 22:32:39

标签: apache2 vagrant ubuntu-14.04 ansible

在我的Ansible脚本上,我正在使用循环向客户操作系统上的apache2.conf文件添加行。 lineinfile模块插入除最后一行</Directory>之外的每一行。为什么Ansible会跳过最后一行?感谢。

- name: test
  lineinfile:
    dest: /etc/apache2/apache2.conf
    line: "{{ item.line }}"
  with_items: 
    - { line: <Directory /vagrant> }
    - { line: Options Indexes FollowSymLinks }
    - { line: AllowOverride All }
    - { line: Require all granted }
    - { line: </Directory> }
  notify:
    - restart apache2   

3 个答案:

答案 0 :(得分:1)

这是不可复制的。您确定文件中没有</Directory>标记吗?

这是我测试过的任务:

  - name: test
    lineinfile:
      dest: foo.conf
      line: "{{ item.line }}"
    with_items: 
      - { line: <Directory /vagrant> }
      - { line: Options Indexes FollowSymLinks }
      - { line: AllowOverride All }
      - { line: Require all granted }
      - { line: </Directory> }

foo.conf

的内容
<Directory /vagrant>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>

另外,使用lineinfile通常表示文件(本例中为apache2.conf)不在配置管理中。许多可怕的事情都可能发生,这将导致这种情况发生。将apache2.conf放入配置管理中会好得多。 (例如,使用Ansible部署它)。或者,您至少可以使用conf.d文件,以便Ansible能够拥有&#34;拥有&#34;整个文件。

答案 1 :(得分:0)

我认为这是模块lineinfile中的错误。

</Directory>出现在文件apache2.conf中,Ansible lineinfile出现在其中。

我向Ansible团队报告了this bug

答案 2 :(得分:0)

注意Ansible 2.0(2016年1月发布,在提出此问题后),这最好用blockinfile实现:

- name: insert vagrant directory
  blockinfile:
    path: /etc/apache2/apache2.conf
    block: |
      <Directory /vagrant>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
      </Directory>
  Match User ansible-agent
  PasswordAuthentication no 

参考:http://docs.ansible.com/ansible/latest/blockinfile_module.html