18.2. 구성된 인벤토리


입력 인벤토리 목록에서 새 인벤토리(구성된 인벤토리)를 생성할 수 있습니다.

구성된 인벤토리에는 입력 인벤토리에 있는 호스트 및 그룹의 사본이 포함되어 있어 여러 인벤토리에서 서버 그룹을 대상으로 하는 작업을 수행할 수 있습니다. 그룹 및 hostvars는 인벤토리 콘텐츠에 추가할 수 있으며 호스트를 필터링하여 구성된 인벤토리의 크기를 제한할 수 있습니다.

구성된 인벤토리는 ansible.builtin.constructed 인벤토리 모델을 사용합니다.

구성된 인벤토리의 주요 요소는 다음과 같습니다.

  • 일반 Ansible hostvars 네임스페이스를 사용할 수 있습니다.
  • 그룹 제공

구성된 인벤토리는 source_vars 입력으로 사용하고 input_inventories 를 새 인벤토리로 변환하고 그룹으로 완료합니다. 그런 다음 제한 필드에서 그룹(기존 또는 생성)을 참조하여 생성된 호스트 수를 줄일 수 있습니다.

이러한 호스트 속성을 기반으로 그룹을 구성할 수 있습니다.

  • RHEL 메이저 또는 마이너 버전
  • Windows 호스트
  • 특정 지역에 태그된 클라우드 기반 인스턴스
  • 기타

다음은 구성된 인벤토리 세부 정보 뷰의 예입니다.

Constructed inventory details

후속 섹션에 설명된 예제는 입력 인벤토리 구조로 구성됩니다.

18.2.1. 그룹 이름 및 변수 필터링

그룹 및 변수 조합을 필터링할 수 있습니다. 예를 들어 그룹 변수 값과 일치하고 호스트 변수 값과 일치하는 호스트를 필터링할 수 있습니다.

이 필터를 실행하는 방법은 다음 두 가지가 있습니다.

  • 두 개의 그룹(그룹 변수 및 호스트 변수 값과 일치하는 다른 그룹)을 정의합니다. 제한 패턴을 사용하여 두 그룹에 있는 호스트를 반환합니다. 권장되는 접근 방식입니다.
  • 하나의 그룹을 정의합니다. 정의에 그룹 및 호스트 변수가 특정 값과 일치해야 하는 조건을 포함합니다. 제한 패턴을 사용하여 새 그룹의 모든 호스트를 반환합니다.

예제:

다음 인벤토리 파일은 4개의 호스트를 정의하고 그룹 및 호스트 변수를 설정합니다. 제품 그룹, 유지 그룹을 정의하고 두 호스트를 종료 상태로 설정합니다.

목표는 종료되는 프로덕션 호스트만 반환하는 필터를 생성하는 것입니다.

[account_1234]
host1
host2 state=shutdown

[account_4321]
host3
host4 state=shutdown

[account_1234:vars]
account_alias=product_dev

[account_4321:vars]
account_alias=sustaining

여기에서 목표는 account_alias 변수가 product_dev 인 그룹에 존재하는 종료 호스트만 반환하는 것입니다. 여기에는 두 가지 방법이 있으며, 둘 다 YAML 형식으로 표시됩니다. 제안 된 첫 번째 것이 권장됩니다.

  1. 2 개의 그룹을 구성, 교집합으로 제한:

    source_vars:

    plugin: constructed
    strict: true
    groups:
      is_shutdown: state | default("running") == "shutdown"
      product_dev: account_alias == "product_dev"

    limit:is_shutdown:&product_dev

    이 구성된 인벤토리 입력은 두 카테고리 모두에 대한 그룹을 생성하고 제한 (호스트 패턴)을 사용하여 두 그룹의 교차점에 있는 호스트만 반환합니다. Patterns:targeting hosts and groups.

    변수가 정의되거나 정의되지 않은 경우(호스트에 따라) 기본값을 지정할 수 있습니다. 예를 들어 정의하지 않을 때 사용해야 하는 값을 알고 있는 경우 | default("running") 을 사용합니다. 이 방법은 디버깅 팁에 설명된 대로 디버깅 에 도움이 됩니다.

  2. 1 그룹을 구성, 그룹으로 제한:

    source_vars:

    plugin: constructed
    strict: true
    groups:
      shutdown_in_product_dev: state | default("running") == "shutdown" and account_alias == "product_dev"

    limit: shutdown_in_product_dev

    이 입력은 두 기준과 일치하는 호스트만 포함하는 하나의 그룹을 생성합니다. 제한은 자체적으로 그룹 이름일 뿐이며 host2 를 반환합니다. 이전 방식과 동일합니다.

18.2.2. 디버깅 팁

템플릿 문제를 디버깅할 수 있도록 strict 매개변수를 true 로 설정하는 것이 중요합니다. 템플릿이 렌더링되지 않으면 구성된 인벤토리에 대한 연결된 인벤토리 업데이트에서 오류가 발생합니다.

오류가 발생하면 상세 정보를 늘리십시오.

| default("running") 과 같은 기본값을 제공하는 것은 Ansible에서 Jinja2 템플릿을 일반적으로 사용합니다. 이렇게 하면 strict: true 를 설정할 때 템플릿의 오류가 발생하지 않습니다.

strict: false 에서도 설정할 수 있으므로 템플릿이 오류를 생성하도록 활성화하여 호스트가 해당 그룹에 포함되지 않도록 할 수도 있습니다. 그러나 이 작업을 수행하면 템플릿이 계속해서 복잡성이 증가함에 따라 향후 문제를 디버깅하기가 어렵습니다.

예상 인벤토리 콘텐츠를 생성하지 않는 경우 템플릿의 의도된 기능을 디버깅해야 할 수 있습니다. 예를 들어, groups 그룹에 복잡한 필터(예: shutdown_in_product_dev)가 있지만 결과 구성된 인벤토리에 호스트가 포함되지 않은 경우 compose 매개변수를 사용하여 디버그를 지원합니다.

예를 들면 다음과 같습니다.

source_vars:

plugin: constructed
strict: true
groups:
  shutdown_in_product_dev: state | default("running") == "shutdown" and account_alias == "product_dev"
compose:
  resolved_state: state | default("running")
  is_in_product_dev: account_alias == "product_dev"

limit: ``

제한이 비어 있는 상태에서 실행하면 모든 호스트가 반환됩니다. 이를 사용하여 특정 호스트의 특정 변수를 검사하여 그룹의 문제가 있는 위치에 대한 통찰력을 제공할 수 있습니다.

18.2.3. 중첩 그룹

중첩된 그룹은 두 개의 그룹으로 구성되며, 하나는 다른 그룹의 자식입니다. 다음 예에서 하위 그룹에는 다른 호스트가 있고 상위 그룹에 변수가 정의되어 있습니다.

Ansible 코어가 작동하는 방식 때문에 상위 그룹의 변수는 플레이북이 실행 중이므로 네임스페이스에서 사용할 수 있으며 필터링에 사용할 수 있습니다.

다음 예제 인벤토리 파일 nested.yml 은 YAML 형식으로 되어 있습니다.

all:
  children:
    groupA:
      vars:
        filter_var: filter_val
      children:
        groupB:
          hosts:
            host1: {}
    ungrouped:
      hosts:
        host2: {}

host1groupB 에 있으므로 groupA 에도 있습니다.

중첩된 그룹 이름 필터링

다음 YAML 형식을 사용하여 중첩된 그룹 이름을 필터링합니다.

`source_vars`:

plugin: constructed

`limit`: `groupA`

중첩된 그룹 속성 필터링

호스트가 간접적으로 해당 그룹의 멤버가더라도 다음 YAML 형식을 사용하여 그룹 변수를 필터링합니다.

인벤토리 콘텐츠에서 host2 에는 그룹 filter가 없으므로 filter_var 이 정의되어 있지 않아야 합니다. strict: true 가 사용되므로 해당 변수가 없는 호스트가 정의되도록 기본값을 사용합니다. 이 값을 사용하면 host2 에서 오류를 생성하는 대신 표현식에서 false 를 반환합니다. host1 은 해당 그룹에서 변수를 상속하고 반환됩니다.

source_vars:

plugin: constructed
strict: true
groups:
  filter_var_is_filter_val: filter_var | default("") == "filter_val"

limit: filter_var_is_filter_val

18.2.4. Ansible 팩트

Ansible 팩트를 사용하여 인벤토리를 생성하려면 gather_facts: true 설정이 있는 인벤토리에 대해 플레이북을 실행해야 합니다. 사실은 시스템 간마다 다릅니다. 다음 예제는 알려진 모든 시나리오를 해결하기 위한 것은 아닙니다.

18.2.4.1. 환경 변수 필터링

다음 예제에서는 YAML 형식을 사용하여 환경 변수를 필터링하는 것입니다.

source_vars:

plugin: constructed
strict: true
groups:
  hosts_using_xterm: ansible_env.TERM == "xterm"

limit: hosts_using_xterm

18.2.4.2. 프로세서 유형으로 호스트 필터링

다음 예제에서는 YAML 형식을 사용하여 Intel(프로세서 유형)으로 호스트를 필터링하는 것입니다.

source_vars:

plugin: constructed
strict: true
groups:
  intel_hosts: "GenuineIntel" in ansible_processor

limit: intel_hosts
참고

구성된 인벤토리의 호스트는 원래 인벤토리 호스트를 참조하기 때문에 라이센스 할당에 대해 계산되지 않습니다. 또한 원래 인벤토리에서 비활성화된 호스트는 구성된 인벤토리에 포함되지 않습니다.

ansible-inventory 를 사용하여 실행되는 인벤토리 업데이트는 구성된 인벤토리 콘텐츠를 생성합니다.

이 값은 항상 작업보다 먼저 업데이트하도록 구성되지만 시간이 너무 오래 걸리는 경우 캐시 제한 시간 값을 계속 선택할 수 있습니다.

구성된 인벤토리를 생성할 때 API는 항상 연결된 인벤토리 소스가 하나만 있는지 확인합니다. 모든 인벤토리 업데이트에는 연결된 인벤토리 소스가 있으며 구성된 인벤토리(source_vars제한)에 필요한 필드는 인벤토리 소스 모델에 이미 존재하는 필드입니다.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.