Documentation

4. 인벤토리 파일 가져오기

컨트롤러를 사용하면 처음부터 인벤토리 파일을 생성하는 대신 소스 제어에서 선택할 수 있습니다. 이 기능은 콘텐츠 브라우저를 편집하지 않고 소스 제어에서 콘텐츠를 가져온다는 점을 제외하고 사용자 지정 인벤토리 스크립트와 동일합니다. 즉, 파일은 편집할 수 없으며 인벤토리가 소스에서 업데이트되므로 연결된 group_varshost_vars 파일 또는 디렉터리를 포함하여 프로젝트 내의 인벤토리도 적절하게 업데이트됩니다. SCM 유형은 인벤토리 파일과 스크립트를 모두 사용할 수 있으며, 인벤토리 파일과 사용자 지정 유형은 둘 다 스크립트를 수행한다는 점에서 겹칩니다.

소스 제어에서 이전 인벤토리 스크립트를 사용하려면 |atu|에서 :ref:`ug_customscripts`를 참조하십시오.

4.1. 사용자 지정 동적 인벤토리 스크립트

버전 제어에 저장된 사용자 지정 동적 인벤토리 스크립트를 가져와서 실행할 수 있습니다. 이렇게 하면 인벤토리 스크립트를 훨씬 쉽게 변경할 수 있습니다. 즉, 인벤토리 스크립트를 복사하여 컨트롤러에 붙여넣을 필요 없이 소스 제어에서 직접 가져온 다음 실행합니다. 작업을 수행하는 데 필요한 인증 정보를 처리하도록 스크립트를 작성해야 하며, 스크립트에 필요한 Python 라이브러리(사용자 지정 동적 인벤토리 스크립트와 동일한 요구 사항)를 설치해야 합니다. 이 요구 사항은 플레이북과 관련된 Ansible virtualenv 요구 사항에 노출되는 사용자 정의 인벤토리 소스 스크립트와 SCM 소스에 둘 다 적용됩니다.

SCM 인벤토리 소스 자체를 편집할 때 환경 변수를 지정할 수 있습니다. 일부 스크립트의 경우 이 작업만으로도 충분하지만, 클라우드 공급자 또는 인벤토리에 대한 액세스를 제공하는 시크릿 정보를 저장하는 안전한 방법은 아닙니다.

더 나은 방법은 사용할 인벤토리 스크립트에 대한 새 인증 정보 유형을 생성하는 것입니다. 인증 정보 유형은 필요한 모든 입력 유형을 지정해야 합니다. 그런 다음, 이 유형의 인증 정보를 생성하면 시크릿이 암호화된 형식으로 저장됩니다. 인벤토리 소스에 해당 인증 정보를 적용하면 스크립트가 환경 변수 또는 파일과 같은 입력에 액세스할 수 있습니다.

자세한 내용은 :ref:`Credential types <userguide:ug_credential_types>`를 참조하십시오.

4.1.1. 프로젝트 업데이트 시 업데이트

인벤토리 소스에 정적 콘텐츠가 포함된 경우 소스 프로젝트의 SHA-1 해시가 변경될 때마다 콘텐츠를 자동으로 업데이트하는 것이 좋습니다. 인벤토리 소스를 프로젝트 업데이트 시 업데이트되도록 구성하면 됩니다.

_images/sourced-from-project-update-on-project-update.png

이 박스를 선택하면 인벤토리 소스에서 시작 시 업데이트를 허용하지 않습니다. 시작 시 업데이트는 일부 구성에 필요하므로 중요합니다. 예를 들어 인벤토리에서 참조하는 프로젝트가 작업 템플릿이 실행되기 전에 연속으로 업데이트되도록 설정하여 작업 템플릿이 실행하는 인벤토리에 해당 인벤토리의 업데이트된 형식이 포함되도록 하는 경우입니다. 그러나 이 작업을 수행하는 두 가지 다른 방법이 있습니다.

  • 프로젝트를 사용하는 작업 템플릿과 동일한 프로젝트에서 업데이트되는 인벤토리를 만들 수 있습니다. 이 경우 프로젝트를 ``update_on_launch``로 설정할 수 있습니다. 그러면 필요한 경우 인벤토리 업데이트가 트리거됩니다.

  • 인벤토리 소스 이외의 플레이북에 다른 프로젝트를 사용해야 하는 경우 프로젝트를 워크플로우에 배치한 다음, 작업 템플릿이 프로젝트 업데이트 성공 시 실행되도록 할 수 있습니다.

이렇게 하면 인벤토리 업데이트가 완료될 때까지 프로젝트가 완료 상태로 전환되지 않으므로 인벤토리가 《제시간》에 업데이트됩니다(즉, 작업 템플릿이 시작되기 전에 인벤토리 변경이 완료됨).

참고

인벤토리 업데이트에 실패해도 프로젝트가 실패로 표시되지는 않습니다. 또한 프로젝트가 업데이트될 때마다 해당 인벤토리 업데이트가 트리거되는 것은 아닙니다. 프로젝트 버전이 변경되지 않았으며 인벤토리가 편집되지 않은 경우에는 인벤토리 업데이트가 실행되지 않습니다.

또한 관련 작업이 실행되는 동안 프로젝트 업데이트가 차단되지 않습니다. 큰 프로젝트(약 10GB)가 있는 경우 ``/tmp``의 디스크 공간이 문제가 될 수 있습니다.

4.2. SCM 인벤토리 소스 필드

사용되는 소스 필드는 다음과 같습니다.

  • source_project: 사용할 프로젝트입니다.

  • source_path: 디렉터리 또는 파일을 나타내는 프로젝트 내부 상대 경로입니다. 비어 있는 경우 《》도 프로젝트의 루트 디렉터리를 나타내는 상대 경로입니다.

  • source_vars: 《파일》 유형 인벤토리 소스에 설정된 경우 실행 시 환경 변수에 전달됩니다.

프로젝트 업데이트 시 사용된 위치에서 인벤토리 업데이트가 자동으로 트리거됩니다. 인벤토리 소스가 생성된 후 즉시 실행되도록 프로젝트 업데이트가 스케줄링됩니다. 관련 작업이 실행되는 동안 인벤토리 또는 프로젝트 업데이트가 차단되지 않습니다. 큰 프로젝트(약 10GB)가 있는 경우 ``/tmp``의 디스크 공간이 문제가 될 수 있습니다.

컨트롤러 사용자 인터페이스의 인벤토리 소스 생성 페이지에서 수동으로 위치를 지정할 수 있습니다. 인벤토리 소스 생성 방법에 대한 지침은 |atu|의 인벤토리 섹션을 참조하십시오.

이 목록을 프로젝트 업데이트에 대한 최신 SCM 정보로 새로 고쳐야 합니다. 프로젝트를 SCM 인벤토리 소스로 사용하는 인벤토리 소스가 없는 경우에는 인벤토리 목록이 업데이트 시 새로 고쳐지지 않을 수 있습니다.

SCM 소스를 사용하는 인벤토리의 경우 인벤토리 업데이트의 작업 세부 정보 페이지에 프로젝트 업데이트 상태 표시와 프로젝트 이름이 표시됩니다. 상태 표시는 프로젝트 업데이트 작업에 연결됩니다. 프로젝트 이름은 프로젝트에 연결됩니다.

_images/jobs-details-scm-sourced-inventories.png

관련 작업이 실행되는 동안 인벤토리 업데이트를 수행할 수 있습니다.

4.2.1. 지원되는 파일 구문

|at|에서는 Ansible의 ansible-inventory 모듈을 사용하여 인벤토리 파일을 처리하고, 컨트롤러에 필요한 모든 유효한 인벤토리 구문을 지원합니다.