有一个模块lineinfile在文件中添加一行,有没有办法添加几行?
我不想使用模板,因为您必须提供整个文件.我只是想在现有文件中添加一些东西而不必知道文件已包含的内容,因此模板不是一个选项.
Ben*_*ley 212
您可以使用循环来执行此操作.这是一个使用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' }
Run Code Online (Sandbox Code Playgroud)
Soi*_*shi 166
您可以尝试使用blockinfile.
你可以做点什么
- blockinfile: |
dest=/etc/network/interfaces backup=yes
content="iface eth0 inet static
address 192.168.0.1
netmask 255.255.255.0"
Run Code Online (Sandbox Code Playgroud)
Ric*_*hea 16
这是一个使用with_items的解决方案的无噪声版本:
- name: add lines
lineinfile:
dest: fruits.txt
line: '{{ item }}'
with_items:
- 'Orange'
- 'Apple'
- 'Banana'
Run Code Online (Sandbox Code Playgroud)
对于每个项目,如果该项目存在于fruits.txt中,则不执行任何操作.
如果该项目不存在,它将附加到文件的末尾.
十分简单.
Nic*_*kin 16
如果需要配置一组唯一的property = value行,我建议使用更简洁的循环.例如:
- name: Configure kernel parameters
lineinfile:
dest: /etc/sysctl.conf
regexp: "^{{ item.property | regex_escape() }}="
line: "{{ item.property }}={{ item.value }}"
with_items:
- { property: 'kernel.shmall', value: '2097152' }
- { property: 'kernel.shmmax', value: '134217728' }
- { property: 'fs.file-max', value: '65536' }
Run Code Online (Sandbox Code Playgroud)
使用Alix Axel建议的字典并添加自动删除匹配的注释输入条目,
- name: Configure IPV4 Forwarding
lineinfile:
path: /etc/sysctl.conf
regexp: "^#? *{{ item.key | regex_escape() }}="
line: "{{ item.key }}={{ item.value }}"
with_dict:
'net.ipv4.ip_forward': 1
Run Code Online (Sandbox Code Playgroud)
这并不理想,但是允许您多次调用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"
Run Code Online (Sandbox Code Playgroud)
通过使用\nline参数,我能够做到这一点。
如果可以验证文件,并且添加一行会生成一个无效文件,这将特别有用。
就我而言,我是使用以下命令将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'
Run Code Online (Sandbox Code Playgroud)
仅添加一个选项会生成一个验证失败的文件。
| 归档时间: |
|
| 查看次数: |
127501 次 |
| 最近记录: |