首页 > 解决方案 > Lineinfile 和转义特殊字符

问题描述

我的目的是在我的 hosts 文件中找到一个特定的组,然后在其后附加一个 IP 地址。我的主机文件看起来像这样

[create_new_ecarews]
    *blank*

[ecarews]
 10.10.10.100

我正在尝试在 [ecarews] 下插入一个新的 IP 10.10.10.101。但是使用以下代码,它最终会出现在 [create_new_ecarews]

lineinfile:
  path: /etc/hosts
  insertafter: "{{ item.insertafter }}"
  line: "{{ item.line }}"
with_items:
  - { line: "10.10.10.101", insertafter: '\[ecarews\]' }

这是结果:

[create_new_ecarews]
 10.10.10.101
[ecarews]
 10.10.10.100

这是想要的结果

[create_new_ecarews]
    *blank*
[ecarews]
 10.10.10.101
 10.10.10.100

如何转义/匹配 [ecarews] 以便 insertafter 将 IP 地址放在 [ecarews] 下?

标签: ansibleansible-2.x

解决方案


我发现,您不能使用 lineinfile 并使用相同的“行”,但在剧本中使用不同的 insertafter 标准。

所以我所做的是我的第 2 次和第 3 次 lineinfile 调用,我只是将“xxx”和“zzz”附加到 IP 地址的末尾,然后执行两个替换命令(搜索“xxx”和“zzz”为替换为“”)以“清理”解决方法。


推荐阅读