Ansible - 替换文件中某些表达式的第一次出现 - 路径包括主机名

Ansible - 替换文件中某些表达式的第一次出现 - 路径包括主机名

我需要替换特定文件中第一次出现的某个字符串。

我想为此使用 Ansible 的替换模块。

- hosts: abc
  tasks:
  - name: Replace first occurence of specific string
    replace:
      path: /etc/config/abc_host/application.yml
      regexp: 'Unix'
      replace: "Linux"

这将替换此特定 .yml 文件中所有出现的Unixwith 。Linux但我还有一些其他主机(def_host、ghi_host 等),我想仅将第一次出现的 替换UnixLinux.

那么,有两个问题需要解决:

首先,使用主机名作为路径中的变量。我想要的不是硬编码 abc_host.yml 之类的东西path: /etc/config/($host)_host/application.yml

其次,我只想替换第一次出现的特定字符串(而不是任何其他后续出现的字符串)。

答案1

对于主机变量,您可以使用 inventory_hostname 或 inventory_hostname_short,具体取决于您需要多少名称。 inventory_hostname 具有全名,短名称具有第一个句点的名称。

我没有在 Ansible 中尝试过,但这可能有效

replace:
  regexp: '^(.*?\.)Unix([.\n]*)$'
  replace: '\1Linux\2'

相关内容