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 등)가 있고 첫 번째 호스트 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'

관련 정보