当一些域控制器维护正在进行时,我将以下几行配置添加到我们服务器上的/etc/Resolv.conf文件中,并使用Ansible作为临时措施:

# Start-Temp-NS-Flip
nameserver 172.31.6.137
nameserver 172.31.6.136
# End-Temp-NS-Flip

我特意添加了周围的 comments ,以帮助以后的删除.然而,我现在正在努力再次移除这个块.

我已经try 了许多不同的Ansible模块来实现这一点,例如,下面的所有代码(当遍历https://regex101.com/时,正则表达式下面的初始任务与块匹配):

  - name: Remove block of code (lineinfile)
    lineinfile:
      path: /etc/resolv.conf
      regexp: '^# Start-Temp-NS-Flip\n.*\n.*\n\# End-Temp-NS-Flip'
      state: absent
      backup: true

  - name: Remove block of code (blockinfile)
    blockinfile:
      path: /etc/resolv.conf
      marker_begin: '# Start-Temp-NS-Flip'
      marker_end: '# End-Temp-NS-Flip'
      state: absent
      backup: true

  - name: Remove block of code (blockinfile)
    blockinfile:
      path: /etc/resolv.conf
      block: |
        Start-Temp-NS-Flip
        nameserver 172.31.6.137
        nameserver 172.31.6.136
        # End-Temp-NS-Flip
      state: absent
      backup: true

这些都没有错误,我只是找不到匹配的.有没有人能找出我做错了什么?或者有没有人建议一个可行的移除方法?文件中的其他所有内容都需要保持不变.

谢谢.

推荐答案

这可能是最好的解决方案:

  - name: Remove block of code (blockinfile)
    blockinfile:
      path: /etc/resolv.conf
      marker_begin: '# Start-Temp-NS-Flip'
      marker_end: '# End-Temp-NS-Flip'
      state: absent
      backup: true

它不工作的原因是因为您忽略了marker设置.从the documentation人起:

  • marker:

    标记线模板.

    {mark}将替换为MARKER_BEGIN(默认值="BEGIN")和MARKER_END(默认值="END")中的值.

    使用不带{mark}变量的自定义标记可能会导致在后续 playbook 运行中重复插入块.

    不支持多行标记,这将导致在后续 playbook 运行中重复插入块.

    模块会自动将换行符追加到markegin和markend之后.

    Default:"# {mark} ANSIBLE MANAGED BLOCK".

因此,当您设置时:

marker_begin: '# Start-Temp-NS-Flip'

默认的marker模板会将其转换为:

# # Start-Temp-NS-Flip ANSIBLE MANAGED BLOCK

您需要修改marker,如下所示:

- blockinfile:
    marker_begin: Start-Temp-NS-Flip
    marker_end: End-Temp-NS-Flip
    marker: "# {mark}"
    path: filetoedit.txt
    state: absent
    backup: true

Linux相关问答推荐

IntelliJ(PyCharm)不再识别Linux中的AltGr快捷键

Flutter 构建错误:';DART:JS_interop';在此平台上不可用

Ansible-删除两个注释之间的代码块(包括注释本身)

Docker 不保留 chown 用户设置

使用 sed 命令仅打印正则表达式匹配

为什么`__vfprintf_internal`(`stdio.h`中的`printfn`)强制`$rbp`在我的x86-64机器上向前跳转6313864字节?

如何从 2 个文件中获取内容并使用 shell 脚本将该内容附加到新文件中

将文件的一部分插入到另一个文件的特定位置

在 Ansible 中使用 JSON 查询过滤数据以从 ansible_fact 中提取数据

如何将通配符参数传递给 bash 文件

使用 Bash 获取特定文件的 mtime?

diff 命令仅获取不同行的数量

仅在不存在时添加换行符

grep 时间命令输出

将参数传递给 awk 脚本文件

如何下载较旧的 google play 服务?

发出信号并中断比较

如何链接到 GCC 中特定版本的共享库

通过 linux x86-64 函数调用保留了哪些寄存器

Linux cmd 在 jar 中搜索类文件,而不考虑 jar 路径