다음은 내 인벤토리 파일에서 구성을 정의하는 "작동"버전입니다. 인벤토리 파일 :
all:
children:
grp1:
hosts:
host1:
grp2:
children:
subgrp1:
vars:
config_vars:
name1: "value1"
name2: "value2"
hosts:
host11:
host12:
subgrp2:
vars:
config_vars:
name1: "value3"
name2: "value4"
hosts:
host21:
host22:
grp3:
hosts:
host31:
host32:
내 플레이 북은 다음과 같습니다.
---
- name: test play
hosts: grp2
connection: ssh
gather_facts: no
remote_user: ec2-user
tasks:
- debug:
msg: "inventory_hostname = {{ inventory_hostname}} and item.key = {{ item.key }} and value = {{ item.value }} "
when: "{{ item['key'] }} == config_vars "
loop: "{{ lookup('dict', hostvars[inventory_hostname]) }}"
실행하면 다음 ansible-playbook -i hosts.yml p1.yml
이 있습니다.
ok: [host22] => (item={'key': 'config_vars', 'value': {'name1': 'value3', 'name2': 'value4'}}) => {
...
ok: [host21] => (item={'key': 'config_vars', 'value': {'name1': 'value3', 'name2': 'value4'}}) => {
...
ok: [host11] => (item={'key': 'config_vars', 'value': {'name1': 'value1', 'name2': 'value2'}}) => {
...
ok: [host12] => (item={'key': 'config_vars', 'value': {'name1': 'value1', 'name2': 'value2'}}) => {
(각 그룹의 구성에 따라 name1 및 name2의 값이 어떻게 정렬되는지 참조)
내가 가지고있는 "작동하지 않는"구성은 인벤토리 파일에서 config_vars를 제거하고 대신 hosts.yml 구조와 일치하는 디렉토리 구조를 갖고 각 그룹의 디렉토리 아래에 config_vars dict를 붙여 넣습니다.
> cat group_vars/grp2/subgrp2/main.yml
config_vars:
name1: "value3"
name2: "value4"
> cat group_vars/grp2/subgrp1/main.yml
config_vars:
name1: "value1"
name2: "value2"
그런 다음 이전과 같이 명령을 다시 실행하면 다음이 표시됩니다.
ok: [host22] => (item={'key': 'config_vars', 'value': {'name1': 'value3', 'name2': 'value4'}}) => {
ok: [host12] => (item={'key': 'config_vars', 'value': {'name1': 'value3', 'name2': 'value4'}}) => {
ok: [host21] => (item={'key': 'config_vars', 'value': {'name1': 'value3', 'name2': 'value4'}}) => {
ok: [host11] => (item={'key': 'config_vars', 'value': {'name1': 'value3', 'name2': 'value4'}}) => {
(value1 및 value2가 차단됨)
왜 이런 일이 발생하는지 알고 있습니다. 이는 value3 및 value4가 나중에 읽혀 값 1과 value2를 대체하기 때문입니다. 내 질문은 다음과 같이 변수 구성을 구성 할 때 구성을 사용하여 그룹의 바인딩을 유지하는 방법입니다. 다른 방법으로해도 괜찮지 만 인벤토리 파일에서 변수를 가져 오면됩니다. 미리 감사드립니다.
Q : " 구성을 사용하여 그룹의 바인딩을 유지하려면 어떻게해야합니까?"
A : group_vars 의 경로 가 잘못되었습니다.
group_vars/grp2/subgrp1/main.yml
group_vars/grp2/subgrp2/main.yml
인벤토리에서 변수는 각각 subgrp1 및 subgrp2 그룹에 선언됩니다 . 이것은 group_vars에 해당합니다 .
$ tree group_vars
group_vars/
├── subgrp1
│ └── main.yml
└── subgrp2
└── main.yml
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다