특정 파일에서 특정 문자열이 처음 나타나는 부분을 바꿔야 합니다.
이를 위해 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
.
그렇다면 해결해야 할 두 가지 문제가 있습니다.
먼저 호스트 이름을 경로의 변수로 사용합니다. 내가 원하는 것은 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'