Ansible在文件中添加一行

时间:2019-06-28 05:46:57

标签: ansible

我正在尝试通过ansible lineinfile模块在文件中添加新行。以下是剧本中定义的任务。

lineinfile:

path: /etc/httpd/file.conf

line: myfilecontent

它可以正常工作,并在文件中添加新行。但是,当我将行内容修改为另一个值,即mynewfilecontent时,它将添加另一行而不是对其进行更新。

lineinfile:

path: /etc/httpd/file.conf

line: mynewfilecontent

我们非常感谢您的帮助。 谢谢

2 个答案:

答案 0 :(得分:3)

使用lineinfile模块的 state 参数并在下面创建结构

my_lines:
  - line: myfilecontent
    state: absent
  - line: mynewfilecontent
    state: present

state 参数控制文件中是否存在该行。参见下面的示例

- hosts: localhost
  vars:
    my_lines:
      - line: myfilecontent
        state: absent
      - line: mynewfilecontent
        state: present
  tasks:
    - lineinfile:
        path: /tmp/test.conf
        create: yes
        line: "{{ item.line }}"
        state: "{{ item.state }}"
      loop: "{{ my_lines }}"

注释1。

仅当该行不存在

时,才可以通过添加 state 参数来简化结构
my_lines:
  - line: myfilecontent
    state: absent
  - line: mynewfilecontent

在循环中声明默认的状态

state: "{{ item.state|default('present') }}"

注释2。

模块中定义的默认 state present ,因此如果数据结构中不存在 state 参数,则可以省略

state: "{{ item.state|default(omit) }}"

以上所有3个变体在功能上都是等效的。

答案 1 :(得分:0)

如果您希望您的行可能替换文件中的现有行,则需要为regexp模块提供一个lineinfile参数。

  

要在文件的每一行中查找的正则表达式。   对于state = present,如果找到则替换模式。仅找到的最后一行将被替换。   对于状态=不存在,要删除的行的样式。   如果正则表达式不匹配,则该行将按照insertbefore或insertafter设置添加到文件中。   修改线时,正则表达式通常应匹配线的初始状态以及被线替换后的状态,以确保幂等。

与您的正则表达式匹配的最后一行将替换为您的line值;如果没有匹配项,则会添加新行。

如果没有参数regexp,模块将仅检查与您的line值的完全匹配。

请参见https://docs.ansible.com/ansible/latest/modules/lineinfile_module.html