
다음 작업:
- name: Download Jfrog Artifcats
ansible.windows.win_shell: |
$ENV:JFROG_CLI_OFFER_CONFIG="false"
jfrog rt download ...
when: ???
center
그룹 아래에 있는 컴퓨터에 대해서만 실행되어야 합니다 appservers
.
---
all:
children:
root:
children:
center:
children:
appservers:
hosts:
vm1.domain.com:
qservers:
hosts:
vm2.domain.com:
dbservers:
hosts:
vm3.domain.com:
mobilefarms:
hosts:
children:
gateways:
hosts:
south:
children:
brooklyn:
hosts:
vm4.domain.com:
children:
clients:
hosts:
vm5.domain.com:
vm6.domain.com:
north:
children:
new_york:
hosts:
vm8.domain.com:
children:
clients:
hosts:
vm9.domain.com:
when
이 작업을 수행하려면 조건으로 무엇을 입력해야 합니까 ? 또한 이 구성 옵션의 기본 원리는 무엇입니까?
답변1
작업, 재생 또는 차단에 대한 조건부로 그룹 멤버십을 사용하려면 다음 형식을 사용합니다.
when: inventory_hostname in groups["<group name>"]
특히 초기 질문에 대해:
when: inventory_hostname in groups["appservers"]
아래의 모든 머신에 접근하려면 north
간단히 다음과 같이 변경하면 됩니다.
when: inventory_hostname in groups["north"]
후속 설명(특정 "위치"에 그룹 지정)과 관련하여 그룹 이름은 Ansible에서 고유해야 하므로 구별할 필요가 없습니다.어느 appservers
당신이 언급하는 그룹은 appservers
한 위치에만 있을 수 있습니다.
두 개의 그룹을 생성하려고 하면 appservers
첫 번째 그룹만 Ansible 엔진에 의해 실제로 구문 분석됩니다. 동일한 이름의 후속 그룹은 무시됩니다. 따라서 (향후) appservers
아래에 그룹 north
과 appservers
아래에 그룹을 만들 계획이라면 south
첫 번째 그룹의 구성원만 포함된다는 것을 알 수 있습니다.
Ansible에서 이를 달성하는 방법(내 가정은5월나중에 원함) 진행 가능한 방법은 호스트를 여러 그룹에 추가하고 제한이나 조건을 적절하게 조정하는 것입니다.
all:
children:
north:
hosts:
a.domain.com:
b.domain.com:
south:
hosts:
y.domain.com:
z.domain.com:
appservers:
hosts:
a.domain.com:
y.domain.com:
dbservers:
hosts:
b.domain.com:
z.domain.com:
이 예에서는 원하는 경우모두앱 서버의 경우 appservers
. appservers
해당 지역에서만 원하는 경우 north
플레이 제한을 으로 설정하거나 north:&appservers
조건부 사용
when:
- inventory_hostname in groups["appservers"]
- inventory_hostname in groups["north"]
어쨌든, Ansible에서 인벤토리가 어떻게 구성되어 있는지 다시 한 번 복습해야 할 수도 있다고 생각합니다.사용자 설명서; 또한 다양한 교육 사이트에 훨씬 더 자세히 설명할 수 있는 훌륭한 리소스도 있습니다.
여러 그룹(조합, 통합 및 제외 등)을 사용하는 보다 복잡한 타겟팅에 대한 자세한 내용을 보려면 다른 항목을 검토하시기 바랍니다.사용자 설명서.
개인적으로 처음에는 설정이 지루하고 제한적이라고 생각했지만 사용에 익숙해지면서 실제로 다른 설정보다 더 역동적이라는 것을 알게 되었습니다.