LabHub
배우기 러닝패스 코스

FDE 캡스톤: 창고가 같은 주문을 세 번 받았다 · 설치 전에 막을 수 있던 실패 · 실습

설치는 완료됐는데 에이전트는 뜨자마자 죽었다

LabHub 에서 이어서 보기

목표

고객 호스트의 설치 요구사항을 점검해 pass·warn·fail 을 JSON 보고서와 종료 코드로 내는 사전 점검 스크립트를 만든다. 채점기가 차린 여러 환경에서 판정이 맞아야 하고, 점검은 아무것도 고치지 않아야 한다.

왜 중요한가

고객 현장의 설치 창은 한 번뿐인 경우가 많다. 지난번 설치는 "완료" 로 끝났지만 포트는 사내 프록시가 쓰고 있었고 인증서는 이미 만료돼 있었다. 사전 점검은 이런 사실을 설치 전에 근거와 함께 드러내는 도구다.
판정만이 아니라 관측값을 남겨야 고객 담당자가 다시 확인할 수 있고, 종료 코드가 일정해야 설치 자동화가 진행과 중단을 가를 수 있다.
채점기는 여러분의 문구를 믿지 않는다. 임시 디렉터리에 점유 포트·TIME_WAIT 포트·임박/만료 인증서·없는 디렉터리를 직접 만들고, 포트 번호·기준값·경로를 실행마다 바꿔 스크립트를 실행한다.

단계

1. 고객 메모를 읽고 요구사항 7종을 /root/preflight/spec.json 에 계약의 키 이름으로 적는다. 옛 문서의 값과 지원 정책을 구분한다.
2. /root/preflight/preflight.py 에 python_min 과 ports 점검, 보고서(summary·exit_code·checks), 종료 코드 0·1·2 를 구현한다. 명세에 없는 키의 점검은 하지 않는다.
3. preflight.py 의 포트 점검이 TIME_WAIT 만 남은 포트를 사용 중으로 오탐하지 않게 고친다. 듣는 포트는 여전히 fail 이어야 한다.
4. preflight.py 에 disk 점검을 넣는다. 여유 MiB 를 observed 에, 잰 경로를 measured_path 에 적고, 아직 없는 경로는 만들지 말고 가장 가까운 부모를 잰다.
5. preflight.py 에 certs 점검을 넣는다. notAfter 를 epoch 초로 observed 에, 남은 일수를 days_left 에 적고, 만료·못 읽음은 fail, warn_days 미만은 warn 이다.
6. preflight.py 에 files·hosts·writable_dirs 점검을 넣는다. observed 는 계약의 상태 이름을 쓰고, 쓰기 시험 파일은 지우며 없는 디렉터리는 만들지 않는다.
7. 정상·경고·실패 호스트 전체 명세와 깨진 명세를 구분하는지 확인한다. 종료 코드는 0·1·2, 명세를 못 읽으면 보고서 없이 3 이다.
8. spec.json 으로 이 호스트를 점검해 /root/preflight/report.json 을 남기고, /root/preflight/decision.json 에 보고서 해시·판정(go·go-with-warnings·no-go)·blockers·warnings 를 적는다.

참고

단계 8개

  1. 고객 메모를 명세로 옮기기
  2. 파이썬 판과 포트부터 판정하기
  3. 끝난 연결을 점유로 오탐하지 않기
  4. 여유 공간을 경고와 실패로 나누기
  5. 인증서 남은 날짜를 notAfter 로 재기
  6. 설정·호스트 이름·쓰기 권한 확인하기
  7. 호스트 세 대와 깨진 명세 구분하기
  8. 고객 호스트에 go / no-go 내리기