퀴즈: 위임과 직렬 실행
호스트 세 대에 serial: 2 를 걸고 플레이북을 돌렸다. 실행 로그의 PLAY [...] 머리글은 몇 번 찍히는가?
- 두 번 - serial 은 플레이를 배치마다 다시 도는 것처럼 만들고 세 대는 두 배치로 나뉜다
- 한 번 - 머리글은 플레이마다 한 번이고 serial 은 태스크 실행 순서만 바꾼다
- 세 번 - 머리글은 호스트마다 한 번씩 찍힌다
- 여섯 번 - 배치 수와 호스트 수를 곱한 만큼 찍힌다
serial: 2 인 플레이의 태스크에 run_once: true 를 붙였다. 호스트가 세 대라면 그 태스크는 몇 번 실행되는가?
- 한 번 - run_once 는 플레이 전체에서 한 번만 실행된다는 뜻이다
- 두 번 - run_once 는 배치마다 한 번이고 세 대는 두 배치로 나뉜다
- 세 번 - run_once 는 위임과 함께 쓰지 않으면 효과가 없다
- 한 번도 실행되지 않음 - run_once 와 serial 은 함께 쓸 수 없어 건너뛰어진다
delegate_to: lb1 을 붙인 태스크 안에서 inventory_hostname 을 참조하면 무엇이 나오는가?
- lb1 - 실행 위치가 바뀌었으므로 그 호스트 이름으로 바뀐다
- 빈 값 - 위임된 태스크에서는 이 변수가 정의되지 않는다
- 지금 배포 중인 원래 호스트 - 실행만 옮겨 갈 뿐 대상은 그대로다
- localhost - 위임은 내부적으로 로컬 연결로 바뀐다
serial: 1 과 max_fail_percentage: 0 을 건 플레이에서 두 번째 호스트의 상태 확인이 실패했다. 세 번째 호스트는?
- 실패한 호스트만 빠지고 세 번째 호스트는 정상적으로 배포된다
- 세 번째 호스트부터 다시 시작해 실패한 호스트를 마지막에 재시도한다
- 세 번째 호스트에는 rescue 블록만 실행된다
- 시작조차 하지 않는다 - 배치마다 판정하므로 기준을 넘긴 순간 남은 배치가 취소된다
delegate_to: lb1 에 delegate_facts: true 를 함께 준 set_fact 태스크가 있다. 그 값은 어디에서 읽을 수 있는가?
- 원래 호스트의 변수로 읽을 수 있고 hostvars['lb1'] 에는 아무것도 없다
- 두 곳 모두 - 위임 대상과 원래 호스트에 같은 값이 함께 저장된다
- hostvars['lb1'] 에서 읽을 수 있고 원래 호스트에는 남지 않는다
- 어느 쪽에도 남지 않는다 - delegate_facts 는 저장을 끄는 옵션이다
스무 대짜리 웹 티어에 배포한다. 한 대라도 실패하면 즉시 전체를 멈추고 싶다면 무엇을 쓰는가?
- any_errors_fatal: true - 어느 호스트에서든 실패가 나면 그 자리에서 플레이 전체를 멈춘다
- max_fail_percentage: 100 - 비율을 최대로 두면 첫 실패에서 멈춘다
- serial: 20 - 배치를 전체 크기로 두면 한 대의 실패가 전체 실패가 된다
- strategy: free - 호스트가 서로를 기다리지 않으므로 첫 실패가 전체에 전파된다