특정 인벤토리 그룹에 대해 실행할 작업을 설정하는 방법은 무엇입니까?

특정 인벤토리 그룹에 대해 실행할 작업을 설정하는 방법은 무엇입니까?

다음 작업:

- 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아래에 그룹 northappservers아래에 그룹을 만들 계획이라면 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에서 인벤토리가 어떻게 구성되어 있는지 다시 한 번 복습해야 할 수도 있다고 생각합니다.사용자 설명서; 또한 다양한 교육 사이트에 훨씬 더 자세히 설명할 수 있는 훌륭한 리소스도 있습니다.

여러 그룹(조합, 통합 및 제외 등)을 사용하는 보다 복잡한 타겟팅에 대한 자세한 내용을 보려면 다른 항목을 검토하시기 바랍니다.사용자 설명서.


개인적으로 처음에는 설정이 지루하고 제한적이라고 생각했지만 사용에 익숙해지면서 실제로 다른 설정보다 더 역동적이라는 것을 알게 되었습니다.

관련 정보