본문 바로가기
C.W.K.
Stream
Lesson 03 of 04 · published

선언하고 맞춰라

~9 min · declare-and-match, preflight, capabilities

Level 0Lone Machine
0 XP0/37 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"runtime 에 틀린 문을 발견하지 마. 양쪽에 물어. 뭐가 필요해, 뭘 할 수 있어. 뭐가 움직이기 전에."

runtime 의 놀람을 preflight 의 결정으로

Keychain 이야기는 작업 도중에 실패했어. envelope 이 일을 못 한다는 걸 알아내기 제일 나쁜 자리지. 시스템 레벨 fix 는 그 mismatch 를 operation 도중에 발견하는 게 불가능하게 만드는 거야. mutation 전에 확인해. 도중이 아니라.

executor 는 뭘 할 수 있는지 선언해

모든 executor 는 자기 capability 를 명시적 목록으로 알려. interactive_gui_session, login_keychain, ssh_credentials, sudo_noninteractive, user_approval_available, reboot_survivable, watchfire_callback. 이 executor 가 실제로 어떤 문인지 스스로 밝히는 거야. 짐작이 아니라 선언.

step 은 뭐가 필요한지 선언해

모든 operation step 은 성공에 필요한 capability 를 선언해. 이 OS 업데이트 적용reboot_survivable 이 필요해. 어떤 session 밑에서든 기계를 재시작하니까. 이 토큰 읽기login_keychain 이 필요하고. 요구사항은 step 정의의 일부야. step 이 뭘 하는지 바로 옆에 붙어 있어.

preflight 이 둘을 맞춰

mutation 전에 preflight 이 필요한 걸 가진 것에 대봐. executor 의 envelope 이 step 을 만족하면 돌아. 못 하면, operation 은 어떻게든 밀고 나가며 잘되길 빌지 않아. target 을 needs_attention 으로 옮기거나, 같은 durable operation 을 호환되는 executor 에 위임해. 절대 안 하는 건 credential prompt 반복, secret 을 operation 에 복사, host 에 닿은 게 일할 수 있다는 뜻인 척.

mutate 하기 전에 capability 를 맞춰. step 이랑 executor 는 이 문이 이 일을 할 수 있다는 데 미리 합의해야 해. 아니면 기계가 이미 반쯤 바뀐 채로 mismatch 를 발견하는 거야.

Code

양쪽에 선언, mutate 전에 맞추기·python
# executor 는 자기가 뭔지 선언:
executor.capabilities = {"ssh_credentials", "sudo_noninteractive", "reboot_survivable"}

# step 은 뭐가 필요한지 선언:
step.requires = {"reboot_survivable"}   # OS 업데이트는 어떤 session 밑에서든 재부팅

# preflight 이 맞춰. 뭐 건드리기 전에:
missing = step.requires - executor.capabilities
if missing:
    # prompt 반복 금지, secret 복사 금지, 가정 금지:
    target.state = "needs_attention"     # or: 되는 executor 에 위임
else:
    executor.run(step)

# 'reachable' 은 이 계산에 없었어. host 에 닿는다고 이 envelope 이
# step 이 필요로 하는 reboot 를 버티는지 아무것도 안 알려줘.

External links

Exercise

자동화된 job 하나 잡아서 required-capabilities 목록을 명시적으로 써. credential? sudo? GUI? reboot-survival? 그다음 실제로 돌리는 문의 capability 를 써. mismatch 에 동그라미 쳐. 정해봐. 사람을 위해 세워둘래, 필요한 걸 가진 문으로 옮길래?
Hint
대부분 job 은 자기 문이 내세우지 않는 capability 하나를 조용히 요구해. 보통 interactive login 에서만 닿는 credential 이지. 두 목록을 나란히 써두면, 그동안 안 보이던 그 의존성이 눈에 보이는 체크 항목이 돼.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.