퀴즈: 컬렉션과 배포 단위
컬렉션을 빌드했더니 'version' 때문에 거절당했다. galaxy.yml 에 무엇이 적혀 있었을 가능성이 가장 큰가?
- version: "1.2" - 컬렉션 판은 SemVer 세 자리여야 하고 두 자리는 빌드가 받지 않는다
- version: "1.2.0" - 따옴표로 감싸면 문자열이 되어 판으로 인식되지 않는다
- version: 1.2.0-rc1 - 미리 배포판 꼬리표가 붙으면 빌드가 거절한다
- version 키 자체가 없음 - 없으면 빌드가 0.1.0 으로 채우므로 거절되지 않는다
requirements.yml 에 acme-platform-1.2.0.tar.gz 를 고정해 두었는데 소스 저장소의 galaxy.yml 은 이미 1.3.0 이다. install -r 로 설치하면 어느 판이 들어오는가?
- 1.3.0 - 설치는 언제나 소스의 가장 최근 판을 따른다
- 1.2.0 - 고정 파일이 가리키는 묶음이 설치되고 소스가 앞서 나간 것과는 무관하다
- 둘 다 - 판이 다르면 나란히 설치되고 플레이북이 고를 수 있다
- 설치 실패 - 소스와 고정 파일의 판이 다르면 충돌로 멈춘다
컬렉션 묶음(tar.gz) 안의 FILES.json 은 무엇을 담고 있는가?
- 빌드에서 제외된 파일 목록 - build_ignore 가 걸러 낸 것을 기록해 둔다
- 설치할 때 실행할 파일의 순서 - 설치기가 이 차례대로 내용물을 푼다
- 묶음에 든 파일마다의 이름과 체크섬 - 설치할 때 무결성을 확인하는 목록이다
- 의존 컬렉션의 주소 목록 - 설치기가 여기를 보고 의존성을 끌어온다
롤을 짧은 이름 대신 FQCN 으로 부르라고 권하는 가장 큰 이유는?
- FQCN 이 더 빨리 해석되어 큰 플레이북의 실행 시간이 눈에 띄게 줄어든다
- 짧은 이름은 2.9 이후 문법 오류이고 FQCN 만 문법에 맞는다
- FQCN 을 쓰면 컬렉션을 설치하지 않아도 ansible 이 자동으로 내려받아 준다
- 짧은 이름은 검색 경로의 순서에 기대는데 그 순서를 사람이 아니라 환경이 정한다
컬렉션 안의 롤에 meta/argument_specs.yml 을 두고 motd_owner 의 choices 를 platform 과 sre 로 적었다. 누군가 motd_owner=finance 로 이 롤을 부르면?
- 롤의 첫 태스크가 돌기 전에 인자 검증이 실패해 그 자리에서 멈춘다
- 경고만 나오고 롤은 기본값 platform 으로 계속 돈다
- 그대로 finance 가 쓰이고 명세는 ansible-doc 출력에만 쓰인다
- 태스크 안에서 그 변수를 처음 쓰는 순간 정의되지 않은 변수 오류가 난다
인터넷이 막힌 망에서 사내 컬렉션을 배포한다. galaxy.yml 의 dependencies 에 다른 컬렉션을 적어 두면 무슨 일이 생기는가?
- 설치기가 묶음 안에 의존 컬렉션을 함께 담아 두므로 추가 작업이 필요 없다
- 의존성은 문서용 메타데이터일 뿐이라 설치 동작에는 아무 영향이 없다
- 설치할 때 의존 컬렉션을 가져올 저장소가 없어 실패하므로 그 묶음도 함께 날라야 한다
- 설치기가 의존 컬렉션을 건너뛰고 경고 없이 설치를 끝낸다