regex - 使用 Ansible 替换 YAML 文件中的特定字符串
问题描述
我有一个使用 YAML 文件进行配置的 Web 应用程序。这是文件中的一个例外:
---
settings:
domain: 127.0.0.1
我有一个 Ansible 剧本,它使用 lineinfile 模块将上面 YAML 文件中的 IP 地址替换为服务器的公共 IP 地址。
- name: Discovering Public Internet Protocol Address
ipify_facts:
register: public_ip
- name: Configuring Application with discovered Public IP
lineinfile:
dest: /application/path/settings.yml
regexp: '^(.*)domain: (.*)$'
line: 'domain: {{ ipify_public_ip }}'
这会找到 127.0.0.1 IP 并将其替换为公共服务器的 IP,但它会破坏 YAML 缩进,如下所示:
---
settings:
domain: 54.12.33.3
问题:“域”与“设置”移动到同一行,我的 ruby 应用程序无法运行迁移,因为它识别出 YAML 语法错误。
我不介意用另一个模块替换 lineinfile,但如果可能的话,我想保留它。我已经为此苦苦挣扎了几个小时,并将感谢任何帮助。
解决方案
作为一个快速的解决方案,尝试使用 2 个空格 ( ) 以获得更好的匹配和替换:
regexp: '^.*domain: (.*)$'
line: ' domain: {{ ipify_public_ip }}'
我确信可以对正则表达式进行其他改进,以使用\s
or [:space:]
。
更新: .*
从一开始regexp
就不需要。根据请求的评论更新。
推荐阅读
- css - 做出反应。通过 prop 传递无效的 css 颜色不会影响之前声明的颜色
- mongodb - 如何为具有嵌套属性的 mongodb 文档编写 springboot 类?
- axios - 如何配置以开玩笑方式运行的 axios 在 POST 之前不发送 OPTIONS?
- excel - 合并工作簿 - Copy_Paste_Below_Last_Cell
- c# - 如何防止 Visual Studio 2019 在 using 语句之间添加空行
- python - 使用 cv2 将图像的坐标导入 Python。坐标,导入后绘制时不正确返回图像
- c# - 可空 FK 为空时的实体框架验证错误
- docker - 无法连接到正在运行的容器出现错误等到容器正在运行
- javascript - 尝试使用中的空白表
- mapbox - 如何启用单击默认 Mapbox POI 标记?