21.2. 구성 옵션
정의 파일에서 다음 구성 YAML 키를 사용합니다.
Ansible Builder 3.x 실행 환경 정의 파일에는 7개의 최상위 섹션이 허용됩니다.
21.2.1. additional_build_files
빌드 파일은 빌드 컨텍스트 디렉터리에 추가할 항목을 지정합니다. 그런 다음 모든 빌드 단계에서 additional_build_steps
에서 참조하거나 복사할 수 있습니다.
형식은 사전 값 목록으로, 각각 src
및 dest
키와 value가 있습니다.
각 목록 항목은 다음 필수 키가 포함된 사전이어야 합니다.
src | 빌드 컨텍스트 디렉터리에 복사할 소스 파일을 지정합니다.
이는 절대 경로(예: |
dest |
소스 파일이 포함된 빌드 컨텍스트 디렉터리의
절대 경로이거나 경로 내에 참고
|
21.2.2. additional_build_steps
빌드 단계에서는 모든 빌드 단계에 대해 사용자 정의 빌드 명령을 지정합니다. 이러한 명령은 컨테이너 런타임의 빌드 명령 파일에 직접 삽입됩니다(예: Containerfile 또는 Dockerfile). 명령은 컨테이너화 툴에 필요한 모든 규칙을 준수해야 합니다.
이미지 생성 프로세스의 단계 전후에 빌드 단계를 추가할 수 있습니다. 예를 들어 종속 항목을 설치하기 전에 git
을 설치해야 하는 경우 기본 빌드 단계 끝에 빌드 단계를 추가할 수 있습니다.
다음은 유효한 키입니다. 각각 여러 줄 문자열 또는 문자열 목록을 지원합니다.
append_base | 기본 이미지를 빌드한 후 삽입할 명령입니다. |
append_builder | 빌더 이미지를 빌드한 후 삽입할 명령입니다. |
append_final | 최종 이미지를 빌드한 후 삽입할 명령입니다. |
append_galaxy | Galaxy 이미지를 빌드한 후 삽입할 명령입니다. |
prepend_base | 기본 이미지를 빌드하기 전에 삽입할 명령입니다. |
prepend_builder | 빌더 이미지를 빌드하기 전에 삽입할 명령입니다. |
prepend_final | 최종 이미지를 빌드하기 전에 삽입할 명령입니다. |
prepend_galaxy | Galaxy 이미지를 빌드하기 전에 삽입할 명령입니다. |
21.2.3. build_arg_defaults
빌드 인수의 기본값을 사전으로 지정합니다.
이는 --build-arg
CLI 플래그를 사용하는 대신 사용됩니다.
Ansible Builder는 다음 빌드 인수를 사용합니다.
ANSIBLE_GALAXY_CLI_COLLECTION_OPTS |
사용자가 |
ANSIBLE_GALAXY_CLI_ROLE_OPTS |
이를 통해 사용자는 |
PKGMGR_PRESERVE_CACHE | 이렇게 하면 이미지 빌드 프로세스 중에 패키지 관리자 캐시가 지워지는 빈도가 제어됩니다.
기본값인 이 값을 설정하지 않으면 캐시가 자주 지워집니다. 값이 |
Ansible Builder는 build_arg_defaults
내에서 빌드 명령 파일에 제공된 하드 코드 값을 빌드 명령 파일로 유지하므로 컨테이너 빌드를 수동으로 실행하면 지속됩니다.
CLI build-arg
플래그를 사용하여 정의 및 명령줄에서 동일한 변수를 지정하면 CLI 값이 정의의 값을 재정의합니다.
21.2.4. 종속 항목
ansible-core
,ansible-runner
, Python 패키지, 시스템 패키지 및 컬렉션을 포함하여 최종 이미지에 설치할 종속 항목을 지정합니다. Ansible Builder는 설치하는 Ansible 컬렉션에 대한 종속성을 자동으로 설치합니다.
일반적으로 표준 구문을 사용하여 패키지 버전을 제한할 수 있습니다. dnf
,pip
,ansible-galaxy
또는 기타 패키지 관리 유틸리티로 전달하는 것과 동일한 구문을 사용합니다. 별도의 파일에서 패키지 또는 컬렉션을 정의하고 정의 파일의 dependencies
섹션에서 해당 파일을 참조할 수도 있습니다.
다음 키가 유효합니다.
ansible_core |
설치할
이 값은 단일 키 ansible_core: package_pip: ansible-core ansible_core: package_pip: ansible-core==2.14.3 ansible_core: package_pip: https://github.com/example_user/ansible/archive/refs/heads/ansible.tar.gz |
ansible_runner | 설치할 Ansible Runner Python 패키지의 버전입니다.
이 값은 단일 키 ansible_runner: package_pip: ansible-runner ansible_runner: package_pip: ansible-runner==2.3.2 ansible_runner: package_pip: https://github.com/example_user/ansible-runner/archive/refs/heads/ansible-runner.tar.gz |
Galaxy | Ansible Galaxy에서 설치할 컬렉션입니다.
이는 Ansible Galaxy |
python | Python 설치 요구 사항입니다.
파일 이름 또는 요구 사항 목록일 수 있습니다. Ansible Builder는 이 라이브러리는 다른 파일에 대한 참조를 포함하여 복잡한 구문을 지원합니다. 많은 컬렉션에 동일한 패키지 이름이 필요한 경우 Ansible Builder는 이를 단일 항목에 결합하고 제약 조건을 결합합니다.
Ansible Builder는 컬렉션이 종속 항목으로 나열되는 경우에도 Python 종속 항목의 결합된 파일에서 일부 패키지를 제외합니다. 여기에는 Ansible 자체를 제공하는 패키지 및 테스트 패키지가 포함됩니다. 전체 목록은
제외된 패키지 이름 중 하나를 포함해야 하는 경우 이 방식으로 제공된 패키지는 제외된 Python 패키지 목록에 대해 처리되지 않습니다. |
python_interpreter |
dnf( |
system | bindep 형식으로 설치할 시스템 패키지입니다. 파일 이름 또는 요구 사항 목록일 수 있습니다. bindep에 대한 자세한 내용은 OpenDev 설명서 를 참조하십시오.
시스템 패키지의 경우 |
다음 예제에서는 다양한 종속성을 포함하는 파일 이름을 사용합니다.
dependencies: python: requirements.txt system: bindep.txt galaxy: requirements.yml ansible_core: package_pip: ansible-core==2.14.2 ansible_runner: package_pip: ansible-runner==2.3.1 python_interpreter: package_system: "python310" python_path: "/usr/bin/python3.10"
이 예에서는 인라인 값을 사용합니다.
dependencies: python: - pywinrm system: - iputils [platform:rpm] galaxy: collections: - name: community.windows - name: ansible.utils version: 2.10.1 ansible_core: package_pip: ansible-core==2.14.2 ansible_runner: package_pip: ansible-runner==2.3.1 python_interpreter: package_system: "python310" python_path: "/usr/bin/python3.10"
이러한 종속성 파일(requirements.txt, bindep.txt 및 requirements.yml
) 중 하나라도 컬렉션의 build_ignore
에 있으면 빌드가 실패합니다.
컬렉션 유지 관리자는 introspect
명령을 사용하여 ansible-builder에서 예상 요구 사항을 인식하는지 확인할 수 있습니다.
ansible-builder introspect --sanitize ~/.ansible/collections/
--sanitize
옵션은 모든 컬렉션 요구 사항을 검토하고 중복을 제거합니다. 또한 일반적으로 제외되는 Python 요구 사항도 제거합니다(Python 종속 항목 참조).
제외되는 요구 사항에 대한 로깅 메시지를 보려면 -v3
옵션을 사용하여 세부
검사를 수행합니다.
21.2.5. 이미지
사용할 기본 이미지를 지정합니다. 최소한 기본 이미지에 대한 소스, 이미지, 태그를 지정해야 합니다. 기본 이미지는 운영 체제를 제공하며 일부 패키지도 제공할 수 있습니다. 표준 host/namespace/container:tag
구문을 사용하여 이미지를 지정합니다. Podman 또는 Docker 바로 가기 구문을 대신 사용할 수 있지만 전체 정의는 더 안정적이고 이식 가능합니다.
이 섹션의 유효한 키는 다음과 같습니다.
base_image | 실행 환경에 대한 상위 이미지를 정의하는 사전입니다.
사용할 컨테이너 이미지와 함께 |
21.2.6. 이미지 확인
podman
컨테이너 런타임을 사용하는 경우 서명된 컨테이너 이미지를 확인할 수 있습니다.
컨테이너 이미지 서명 검증을 위해 Podman policy.json
파일과 관련하여 이 데이터를 사용하는 방법을 제어하려면 container-policy
CLI 옵션을 설정합니다.
-
ignore_all
정책: 서명 유효성 검사가 수행되지 않는 빌드컨텍스트 디렉터리 <context
>에서policy.json
파일을 생성합니다. -
시스템
정책: 서명 검증은 표준 시스템 위치의 기존policy.json
파일을 사용하여 수행됩니다.Ansible-builder
는 이러한 파일 내의 콘텐츠에 대한 책임이 없으며 사용자는 콘텐츠를 완전히 제어할 수 있습니다. -
signature_required
정책:ansible-builder
는 컨테이너 이미지 정의를 사용하여 빌드 중에 이미지를 검증하는 동안 사용되는 빌드컨텍스트 디렉터리 <context
>에policy.json
파일을 생성합니다.
21.2.7. options
런타임 기능 Ansible Builder에 영향을 줄 수 있는 키워드 또는 옵션 사전입니다.
이 섹션의 유효한 키는 다음과 같습니다.
container_init: 컨테이너
ENTRYPOINT
및CMD
지시문(및 관련 동작)을 사용자 지정할 수 있는 키가 포함된 사전입니다. 이러한 동작을 사용자 지정하는 것은 고급 작업이며 디버깅하기 어려운 오류가 발생할 수 있습니다. 제공된 기본값은 여러 상호 연결된 동작을 제어하므로 모든 값을 재정의하면 이 사전의 나머지 기본값을 모두 건너뜁니다.유효한 키는 다음과 같습니다.
-
cmd:
CMD
Containerfile 지시문의 Literal 값입니다. 기본값은["bash"]
입니다. ENTRYPOINT:
ENTRYPOINT
Containerfile 지시문의 Literal 값입니다. 기본 진입점 동작은 subprocesses에 대한 신호 전파를 처리하고 런타임에 컨테이너 사용자에게/etc/passwd
에 표시되는 쓰기 가능 홈 디렉터리가 유효한 환경이 있고HOME
환경 변수가 일치하도록 설정되어 있는지 확인하려고 시도합니다. 기본 진입점 스크립트는 사용자 런타임 환경을 적절하게 조정할 수 없는 경우stderr
에 경고를 내보낼 수 있습니다. 자세한 내용은 이 동작을 무시하거나 치명적인 오류로 승격할 수 있습니다.진입점
대상 스크립트의 소스를 참조하십시오.기본값은
["/opt/builder/bin/entrypoint", "dumb-init"]
입니다.package_pip: entrypoint 지원을 위해 pip를 사용하여 설치할 패키지입니다. 이 패키지는 최종 빌드 이미지에 설치됩니다.
기본값은
dumb-init==1.2.5
입니다.
-
cmd:
-
package_manager_path: 패키지 관리자(dnf 또는 microdnf)의 경로가 있는 문자열입니다. 기본값은
/usr/bin/dnf
입니다. 이 값은종속성
에 지정된 경우 및assemble
스크립트에서 빌드 단계에서 Python 인터프리터를 설치하는 데 사용됩니다. skip_ansible_check: 이 부울 값은 Ansible 및 Ansible Runner가 최종 이미지에서 수행되는지 여부를 제어합니다.
이 검사를 수행하지 않으려면 이 값을
True
로 설정합니다.기본값은
False
입니다.relax_passwd_permissions: 이 부울 값은
루트
그룹(GID 0)에 최종 컨테이너 이미지의/etc/passwd
에 대한 쓰기 권한이 명시적으로 부여되는지 여부를 제어합니다. 기본 진입점 스크립트는 동적으로 생성된 사용자를 사용하여 일부 컨테이너 런타임에서/etc/passwd
를 업데이트하여 완전히 작동하는 POSIX 사용자 환경 및 홈 디렉터리를 보장할 수 있습니다. 이 기능을 비활성화하면 사용자가 유효한 쓰기 가능한 홈 디렉터리(예: ansible-core의async
,~username
쉘 확장)를 사용하여/etc/passwd
에 나열해야 하는 소프트웨어 기능이 실패할 수 있습니다.기본값은
True
입니다.WORKDIR: 최종 컨테이너 이미지에서 시작된 새 프로세스의 현재 작업 디렉터리입니다. 일부 컨테이너 런타임에서는
root
(GID 0) 그룹에서 동적으로 생성된 사용자의 경우 이 값을HOME
으로 사용합니다. 이 값을 지정하면 디렉터리가 없는 경우 디렉터리가 생성되어루트
그룹 소유권으로 설정되고rwx
그룹 권한이 재귀적으로 적용됩니다.기본값은
/runner
입니다.user: 최종 컨테이너 이미지의 기본 사용자로 사용할 사용자 이름 또는 UID를 설정합니다.
기본값은
1000
입니다.
예제 옵션:
options: container_init: package_pip: dumb-init>=1.2.5 entrypoint: '["dumb-init"]' cmd: '["csh"]' package_manager_path: /usr/bin/microdnf relax_password_permissions: false skip_ansible_check: true workdir: /myworkdir user: bob
21.2.8. version
실행 환경 정의 파일의 스키마 버전을 설정하는 정수 값입니다.
기본값은 1
입니다.
Ansible Builder 3.x를 사용하는 경우 값은 3
이어야 합니다.