AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 950385
Accepted
guettli
guettli
Asked: 2019-01-24 06:03:19 +0800 CST2019-01-24 06:03:19 +0800 CST 2019-01-24 06:03:19 +0800 CST

Ansible:如果替换没有找到要替换的内容,则引发错误

  • 772

你如何在 Ansible 中解决这个问题?

我有一个文件/etc/foo/foo.config。我想在这个文件中将字符串“DisallowBar”替换为“AlllowBarUntilMidnight”。

Ansible 在这些情况下应该像这样:

  • Case1:DisallowBar 被找到并被替换:OK
  • 案例 2:AllowBarUntilMidnight 已经在文件中。什么都没做:好的
  • Case3:DisallowBar 和 AllowBarUntilMidnight 不在文件中:我希望 ansible 失败。

Case3 对我来说很重要,因为这种状态不应该存在。这是一个错误,不应默默地通过。

ansible
  • 2 2 个回答
  • 330 Views

2 个回答

  • Voted
  1. Best Answer
    Michael Hampton
    2019-01-24T08:03:45+08:002019-01-24T08:03:45+08:00

    您可以使用replacevalidate参数来确保将要写入的文件包含且不再包含.AllowBarUntilMidnightDisallowBar

    tasks:
    - name: replace DisallowBar 
      replace:
        path: /etc/foo/foo.config
        regexp: 'DisallowBar'
        replace: "AllowBarUntilMidnight"
        validate: 'grep "AllowBarUntilMidnight" %s'
    

    该validate命令在生成的临时文件上运行,然后在运行后将其复制到位replace。在这种情况下,如果grep失败,则意味着没有进行替换,并且您的原始文件从未包含DisallowBar过。然后播放失败并且文件没有改变。

    • 6
  2. HBruijn
    2019-01-24T07:30:17+08:002019-01-24T07:30:17+08:00

    您可以简单地依赖replace函数的默认行为来确保文件不再包含字符串DisallowBar。

    在该替换任务运行后,您只需要确认文件确实包含字符串AllowBarUntilMidnight,如果不包含则引发错误。你可以用一个简单的grep.

      tasks:
      - name: replace DisallowBar 
        replace:
          path: /etc/foo/foo.config
          regexp: 'DisallowBar'
          replace: "AllowBarUntilMidnight"
    
      - name: Check for AllowBarUntilMidnight setting
        shell: grep "AllowBarUntilMidnight"  /etc/foo/foo.config
    
    • 2

相关问题

  • 重复的 Ansible 任务

  • 无法形成站点中的文件的链接,该链接可用于使用 ansible 在远程服务器中启用的目录站点?

  • 如何执行 ansible 的特定角色?

  • Ansible 和 rbash

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve