호스트가 그룹에 속하지 않는 경우에만 작업 실행


106

현재 플레이 북의 호스트가 특정 그룹에 속하지 않는 경우에만 ansible 작업을 실행하고 싶습니다 . 반 의사 코드에서 :

- name: my command
  command: echo stuff
  when: "if {{ ansible_hostname }} not in {{ ansible_current_groups }}"

어떻게해야합니까?

답변:


198

이를 수행하는 또 다른 방법은 다음과 같습니다.

- name: my command
  command: echo stuff
  when: "'groupname' not in group_names"

group_nameshttps://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#accessing-information-about-other-hosts-with-magic-variables에 설명 된 매직 변수입니다 .

group_names는 현재 호스트가 속한 모든 그룹의 목록 (배열)입니다.


3
+1하고 주변의 견적을 포함하지 않는 경우 오류 얻을 :This one looks easy to fix. It seems that there is a value started with a quote, and the YAML parser is expecting to see the line ended with the same kind of quote.
피터 Ajtai

3
이 접근 방식은 더 읽기 쉽고 쓰기가 편리하지만 둘 다 똑같이 잘 작동합니다. when: inventory_hostname not in groups.certain_groups
Liam

4
이 방법은보다 더 강력 inventory_hostname in groups['groupname']그라우트 자체가 존재하지 않는 경우에, Ansible이 같은 오류가 발생하기 때문에 '-' '반드시 당신의 변수 이름이 같은 잘못된 문자가 포함되어 있지 않습니다 확인 : 반복 가능한 아니다'StrictUndefined '형식의 인수를 "
hamx0r

20

다음 group_vars/과 같이 호스트 파일 에있는 vars 파일에서 제어 변수를 직접 설정할 수 있습니다 .

[vagrant:vars]
test_var=true

[location-1]
192.168.33.10 hostname=apollo

[location-2]
192.168.33.20 hostname=zeus

[vagrant:children]
location-1
location-2

그리고 다음과 같은 작업을 실행하십시오.

- name: "test"
  command: "echo {{test_var}}"
  when: test_var is defined and test_var

2
허용 대답은 질문에 대한 더 정확하지만 더 나은 경로 다운이 리드를
nik.shornikov
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.