regex 使用ansible将多行文本前置到文件

bgtovc5b  于 2023-05-23  发布在  其他
关注(0)|答案(1)|浏览(160)

我想把它添加到一个文件的顶部:

#
# Ansible managed
#

我尝试了lineinfile,它可以工作,但不是幂等的-它在每一次ansible运行时都会添加另一个。

- ansible.builtin.lineinfile:
    path: /some/file
    regexp: "^#\n# Ansible managed\n#\n"
    line: "#\n# Ansible managed\n#\n"
    insertbefore: BOF

我尝试了blockinfile,它在文件的中间添加了一个块(不知道为什么),然后在每次运行ansible时添加另一个块。

- ansible.builtin.blockinfile:
    path: /some/file
    marker: ""
    marker_begin: ""
    marker_end: ""
    insertbefore: "^#\n# Ansible managed\n#\n"
    block: |
      #
      # Ansible managed
      #

我尝试了replace,它严重地破坏了文件(在每一行之前添加块)。

- ansible.builtin.replace:
    path: /some/file
    regexp: "^(?:#\n# Ansible managed\n#\n)?(.*)$"
    replace: '#\n# Ansible managed\n#\n\1'

我该怎么做?

vecaoik1

vecaoik11#

使用模块ansible.posix.patch。例如,给定远程主机上的文件

shell> ssh admin@test_11 cat /tmp/test.txt
line1
line2
line3

创建修补程序文件

shell> cat files/a.patch 
0a1,3
> #
> # Ansible managed
> #

如何创建修补程序的示例

shell> cat a
line1
line2
line3
shell> cat b
#
# Ansible managed
#
line1
line2
line3
shell> diff a b
0a1,3
> #
> # Ansible managed
> #

那出戏

shell> cat pb.yml 
- hosts: all

  tasks:

    - ansible.posix.patch:
        src: a.patch
        dest: /tmp/test.txt

将修补文件

shell> ansible-playbook pb.yml -l test_11

PLAY [all] ************************************************************************************

TASK [ansible.posix.patch] **********************************************************************************
changed: [test_11]

PLAY RECAP ************************************************************************************
test_11: ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
shell> ssh admin@test_11 cat /tmp/test.txt
#
# Ansible managed
#
line1
line2
line3
  • patch* 任务是幂等的。

相关问题