나는 다음과 같은 정의를 가지고 있습니다 groups_vars/all.yml
.
users:
johndoe:
name: John Doe
username: john
janedoe:
name: Jane Doe
username: jane
특정 호스트의 경우 다음과 같이 다루고 싶습니다 hosts_vars
.
users.johndoe.username: johnd
다음과 같이 필터를 결합해 보면 작동하지 않습니다.
users: "{{ users | combine({'johndoe': users.johndoe | combine({'username': 'johnd'}) })}}"
Ansible에서 재귀 루프가 발생합니다.
나는 이것을 Ansible 방식으로 수행하지 않는 것 같습니다. 변수 구조를 "평면화"하고 그런 식으로 쉽게 덮어쓸 수 있지만 이렇게 하면 작업 내의 변수 구조를 쉽게 반복할 수 없습니다. 이 문제를 해결하기 위해 권장되는 방법은 무엇입니까?
답변1
놓다DEFAULT_HASH_BEHAVIOUR도착하다병합. 예를 들어, 주어진 재고
shell> cat hosts
test_11
test_12
test_13
스크립트
shell> cat pb.yml
- hosts: all
tasks:
- debug:
var: users
그리고그룹 변수
shell> cat group_vars/all.yml
users:
johndoe:
name: John Doe
username: john
janedoe:
name: Jane Doe
username: jane
호스트별 업데이트 추가사용자도착하다호스트 변수
shell> cat host_vars/test_12.yml
users:
johndoe:
username: johnd
그런 다음 다음 명령은 사전을 병합합니다.
shell> ANSIBLE_HASH_BEHAVIOUR=merge ansible-playbook -i hosts pb.yml
PLAY [all] *********************************************************
TASK [debug] *******************************************************
ok: [test_11] =>
users:
janedoe:
name: Jane Doe
username: jane
johndoe:
name: John Doe
username: john
ok: [test_12] =>
users:
janedoe:
name: Jane Doe
username: jane
johndoe:
name: John Doe
username: johnd
ok: [test_13] =>
users:
janedoe:
name: Jane Doe
username: jane
johndoe:
name: John Doe
username: john