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"

Unixこれにより、この特定の.ymlファイル内のすべてのエントリがwithに置き換えられます。Linuxしかし、他のホスト(def_host、ghi_hostなど)があり、最初のホストUnixのみLinux

もしそうなら、解決する必要がある2つの問題があります。

まず、ホスト名をパスの変数として使用します。私が望むのは、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'

おすすめ記事