Ansible lineinfile在正则表达式后替换行

时间:2018-03-13 12:24:22

标签: regex ansible

我有一个有很多不同的文件。它看起来像这样:

       -  file:
            url: filestore://20180205/group2/test123.xml
            sha1: b856565abe4d9416323d82fce9005db29e9a6c57
          dest_folder: group-2
          ensure: present
       -  file:
            url: filestore://20180213/group2/othertest.xml
            sha1: ec9d3d82232c05f7b49a034dcec9ea83f5c1981a
          dest_folder: group-2
          ensure: present

现在我需要用新数据更改url和sha1行。 我可以使用lineinfile模块更改url行,因为我知道文件的组和名称,但我不知道sha1值。

那么如何更改sha1线?

我试过这样:

---
- name: regex Test
  hosts: localhost
  become: no
  tasks:
    - name: regex two lines
      lineinfile:
        dest: /tmp/testdatei
        regexp: 'group2/test123.xml'
        line: '                url: filestore://gpv/hal/20180213/group2/test1'

    - name: regex two lines
      lineinfile:
        dest: /tmp/testdatei
        regexp: 'group2/test123.xml
                sha1: '
        line: '                sha1: test'

Ansible在文件末尾添加新的sha1行,不要用当前的sha1行替换它。

2 个答案:

答案 0 :(得分:0)

使用ansible replace module

- name: regex two lines
  replace:
    dest: /tmp/testdatei
    regexp: '^(\s*url: ).*group2/test123.xml\n(\s*sha1: ).*$'
    replace: '\1filestore://gpv/hal/20180213/group2/test1\n\2test'
    backup: yes

答案 1 :(得分:0)

我现在找到了一个解决方案。

---
- name: replace url and hash
  replace:
    path: /tmp/testdatei
    regexp: 'test1\n[^\n]+'
    replace: 'FileName\nsha1hash'

- name: regex url
  lineinfile:
    dest: /tmp/testdatei
    regexp: 'FileName'
    line: '                url: filestore://gpv/hal/{{current_date}}/{{group_name}}/{{file_name}}'

- name: regex hash
  lineinfile:
    dest: /tmp/testdatei
    regexp: 'sha1hash'
    line: '                sha1: {{sha1var.stdout}}'

我这样做了,因为必须正确相同。