Ansible find replace不适用于2行

时间:2017-12-18 20:42:26

标签: ansible

- name: Cassandra cassandra.yaml
  lineinfile:
    dest: "{{ home}}/conf/cassandra.yaml"
    state: present
    regexp: "{{ item.regexp }}"
    line: "{{ item.line }}"
#   backup: yes
 with_items:
 - { regexp: "data_file_directories:", line: "data_file_directories: \n               - {{ data_directory }}" }

在第一个文件中首次运行它看起来不错但在第二次运行时它不断添加新行。为了第二次运行需要做的事情看起来也很好。

 data_file_directories:
               - /mount1/data

第二次运行

 data_file_directories:
               - /mount1/data
               - /mount1/data
               - /mount1/data

我想要一些像

这样的东西
data_file_directories:
               - /mount1/data

1 个答案:

答案 0 :(得分:0)

lineinfile - 正如其名称所示 - 是一个模块,用于确保某个位于目标文件中;不是

处理多行:

  • regexp module与matchgroup和backreference一起使用 - 具体实现取决于目标文件中的其他构造,

  • 使用blockinfile module - 具体实现取决于目标文件中的其他构造,

  • 或(最好)使用template module