ansible:lineinfile几行?
同样的方式有“lineinfile”在文件中添加一行,有没有办法添加几行?
我不想使用模板,因为您必须提供整个文件。 我只想添加一些东西到现有的文件,而不必知道文件已经包含了什么,所以模板不是一个选项。
 你可以使用循环来做到这一点。 这是一个使用with_items循环的例子: 
 - name: Set some kernel parameters lineinfile:   dest: /etc/sysctl.conf   regexp: "{{ item.regexp }}"   line: "{{ item.line }}" with_items:   - { regexp: '^kernel.shmall', line: 'kernel.shmall = 2097152' }   - { regexp: '^kernel.shmmax', line: 'kernel.shmmax = 134217728' }   - { regexp: '^fs.file-max', line: 'fs.file-max = 65536' } 
 你可以尝试使用blockinfile来代替。 
你可以做类似的事情
 - blockinfile: | dest=/etc/network/interfaces backup=yes content="iface eth0 inet static address 192.168.0.1 netmask 255.255.255.0" 
以下是使用with_items的解决scheme的无噪声版本:
 - name add lines lineinfile: dest=fruits.txt line='{{item}}' with_items: - 'Orange' - 'Apple' - 'Banana' 
对于每个项目,如果项目在fruits.txt中存在,则不采取任何操作。
如果该项目不存在,它将被追加到文件的末尾。
十分简单。
 这不是理想的,但你可以多次调用lineinfile 。 通过insert_after使用,你可以得到你想要的结果: 
 - name: Set first line at EOF (1/3) lineinfile: dest=/path/to/file regexp="^string 1" line="string 1" - name: Set second line after first (2/3) lineinfile: dest=/path/to/file regexp="^string 2" line="string 2" insertafter="^string 1" - name: Set third line after second (3/3) lineinfile: dest=/path/to/file regexp="^string 3" line="string 3" insertafter="^string 2" 
如果你需要configuration一组独特的property = value行,我推荐一个更简洁的循环。 例如:
 - name: Configure kernel parameters lineinfile: dest: /etc/sysctl.conf regexp: "^{{ item.property }}=" line: "{{ item.property }}={{ item.value }}" with_items: - { property: 'kernel.shmall', value: '2097152' } - { property: 'kernel.shmmax', value: '134217728' } - { property: 'fs.file-max', value: '65536' } 
 我可以通过在参数中使用\n来实现这一点。 
如果文件可以被validation,并且添加单行会生成一个无效的文件,这是特别有用的。
 在我的情况下,我使用以下命令将AuthorizedKeysCommand和AuthorizedKeysCommandUser添加到sshd_config中 : 
 - lineinfile: dest=/etc/ssh/sshd_config line='AuthorizedKeysCommand /etc/ssh/ldap-keys\nAuthorizedKeysCommandUser nobody' validate='/usr/sbin/sshd -T -f %s' 
仅添加其中一个选项会生成validation失败的文件。