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 이 required 를 available 에 비교해. executor 의 envelope 이 step 을 만족하면, 돌아. 못 하면, operation 은 절뚝이며 앞으로 가며 빌지 않고 — target 을 needs_attention 으로 옮기거나, 같은 durable operation 을 호환 executor 에 위임해. 절대 안 하는 건 credential prompt loop, 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 loop 금지, 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 에 동그라미 쳐. 정해: 사람을 위해 park 할래, 필요한 걸 가진 문으로 옮길래?
Hint
대부분 job 은 자기 문이 광고 안 하는 capability 하나를 조용히 요구해 — 보통 interactive login 에서만 닿는 credential. 두 목록을 나란히 쓰면 그 안 보이는 의존성이 실제로 실패하는 걸 볼 수 있는 체크박스가 돼.

Progress

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

댓글 0

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

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