在我的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
答案 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