Fabric: '호슀트' μ΄μ™Έμ˜ μΆ”κ°€ μ—­ν•  μ •μ˜ ν‚€κ°€ ν™˜κ²½μ— λ‘œλ“œλ˜μ§€ μ•ŠμŒ

에 λ§Œλ“  2015λ…„ 02μ›” 13일  Β·  7μ½”λ©˜νŠΈ  Β·  좜처: fabric/fabric

λ¬Έμ„œμ˜ 이 μŠ€λ‹ˆνŽ«μ€ envλ₯Ό 톡해 μ‚¬μš©μžκ°€ 예제 ν‚€ 'foo'λ₯Ό μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•˜μ§€ μ•ŠμœΌλ©° 'hosts' ν‚€λ§Œ 이후 Fabric에 μ˜ν•΄ (env.hosts둜) λ‘œλ“œλ©λ‹ˆλ‹€.

from fabric.api import env

env.roledefs = {
    'web': {
        'hosts': ['www1', 'www2', 'www3'],
        'foo': 'bar'
    },
    'dns': {
        'hosts': ['ns1', 'ns2'],
        'foo': 'baz'
    }
}

이 stackoverlow 질문 에

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

@bitprophet νμ‡„λœ μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ? μΆ”κ°€ roledef ν‚€μ˜ λ™μž‘μ€ λ³€κ²½λ˜μ§€ μ•Šμ•˜μœΌλ―€λ‘œ "μˆ˜μ •λ˜μ§€ μ•ŠμŒ"μž…λ‹ˆκΉŒ?

λͺ¨λ“  7 λŒ“κΈ€

μ•„λž˜ 예제λ₯Ό configure file둜 μ‚¬μš©ν•œ λ‹€μŒ fabfiles.pyλ₯Ό μ²˜λ¦¬ν•˜λŠ” λ‚΄λΆ€ κΈ°λŠ₯을 μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

예: list.db
μΈν„°νŽ˜μ΄μŠ€|ip|λΉ„λ°€λ²ˆν˜Έ|μ—­ν• ....
그것이 당신을 μœ„ν•΄ μΌν•˜κΈ°λ₯Ό λ°”λžλ‹ˆλ‹€.

각 μ„Έμ…˜μ— μ—°κ²°ν•  호슀트λ₯Ό κ²°μ •ν•˜κΈ° μœ„ν•΄ νŒ¨λΈŒλ¦­μ—μ„œ μ‚¬μš©ν•˜λŠ” λͺ‡ 가지 env ν‚€κ°€ μžˆμŠ΅λ‹ˆλ‹€(예: μ—­ν• , effective_roles, 호슀트, host_string). λ¬Όλ‘  λ°μ½”λ ˆμ΄ν„°λ„ λ§ˆμ°¬κ°€μ§€μž…λ‹ˆλ‹€.

즉, roledefλŠ” 호슀트λ₯Ό κ·Έλ£Ήν™”ν•˜κΈ° μœ„ν•œ 이름 맀핑일 뿐이며 env.hosts에 병합될 ν•„μš”λŠ” μ—†μŠ΅λ‹ˆλ‹€.

roledefsλ₯Ό μ‚¬μ „μœΌλ‘œ μ •μ˜ν•˜λ©΄ 호슀트 μ˜†μ— 역할별 λ‹€λ₯Έ μ‚¬μš©μž μ •μ˜ 섀정을 κ΅¬μ„±ν•˜λŠ” 데 도움이 λ©λ‹ˆλ‹€. 전체 ν™˜κ²½ 경둜(예: env.roledefs.web.foo)λ₯Ό 톡해 μ•‘μ„ΈμŠ€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜ 당신이 λ°œν–‰ν•˜κ³  μ•„λ§ˆλ„ μ˜ˆμƒν•˜λŠ” κ²ƒμ²˜λŸΌ dict둜 μ •μ˜λœ 역할은 env λ£¨νŠΈμ— λ³‘ν•©λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.
개인적으둜 μ‚¬μš©ν•˜λŠ” μš©λ„μ΄κΈ°λ„ ν•©λ‹ˆλ‹€. νŠΉμ • μž‘μ—…μ„ μ‹€ν–‰ν•  λ•Œ "ν˜„μž¬" 역할을 μ‹€μ œλ‘œ μ„€μ •/κ°€μ Έμ˜€λŠ” λͺ¨λ“  κ°€λŠ₯ν•œ 방법과 μž‘μ—… λ‚΄μ—μ„œ ν•˜μœ„ μž‘μ—…μ„ ν˜ΈμΆœν•  λ•Œμ˜ λ³΅μž‘μ„±μœΌλ‘œ 인해 아직 κ΅¬ν˜„ν•˜κ³  μš”μ²­μ„ κ°€μ Έμ˜€λŠ” 쒋은 방법을 찾지 λͺ»ν–ˆμŠ΅λ‹ˆλ‹€. . κ°„λ‹¨νžˆ μ„€λͺ…ν•˜λ©΄ env에 λŒ€ν•œ λ³€κ²½ 사항을 κ΅¬λ…ν•˜κ³  roles κ°€ env에 섀정될 λ•Œ 역할을 λ³‘ν•©ν•˜μ—¬ μˆ˜ν–‰ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ "μ–΄λ €μš΄" 뢀뢄은 μƒνƒœλ₯Ό μœ μ§€ν•˜κ³  μ„Έμ…˜ λ‚΄μ—μ„œ μƒˆ 역할이 μ‚¬μš©λ  λ•Œ λ³‘ν•©λ˜λŠ” 역할을 μ •λ¦¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

env.roledefs.web.fooλŠ” AttributeError: 'dict' object has no attribute 'web' 였λ₯˜λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.

λ‚΄ 말은 env.roledefs['web']['foo'] 일반 λ”•μ…”λ„ˆλ¦¬μ²˜λŸΌ μ•‘μ„ΈμŠ€ν•  수 μžˆμ§€λ§Œ 이 κΈ°λŠ₯이 Fabric에 μ „ν˜€ μ‘΄μž¬ν•˜λŠ” 이유λ₯Ό λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. κ·Έλƒ₯ ν‰λ²”ν•œ λ”•μ…”λ„ˆλ¦¬μž…λ‹ˆλ‹€. 이 κΈ°λŠ₯이 더 μœ μš©ν•œ 이유둜 κ΅¬ν˜„λœ 것 κ°™μŠ΅λ‹ˆκΉŒ?

μ£„μ†‘ν•©λ‹ˆλ‹€. λ§μ”€ν•˜μ‹  λŒ€λ‘œ μ•‘μ„ΈμŠ€ν•΄μ•Ό ν•©λ‹ˆλ‹€.

ν˜„μž¬ 호슀트 μ˜†μ— 더 λ§Žμ€ μ—­ν•  섀정을 κ·Έλ£Ήν™”ν•˜λ„λ‘ ν—ˆμš©ν•˜λŠ” 것 외에 λ‹€λ₯Έ μ΄μœ λŠ” μ—†μŠ΅λ‹ˆλ‹€.
κ·ΈλŸ¬λ‚˜ λ§ˆμΌμŠ€ν†€ 1.11이 릴리슀되고 #1092κ°€ μ‘΄μž¬ν•˜λ©΄ 더 μ˜λ―Έκ°€ μžˆμŠ΅λ‹ˆλ‹€.

λ˜ν•œ #1088은 μ„€λͺ…/κΈ°λŒ€ν•˜λŠ” 것과 μœ μ‚¬ν•œ 1.11의 μΌλΆ€μž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λ‚΄κ°€ λ§ν–ˆλ“―μ΄ 아직 μ—­ν•  μ •μ˜ 병합을 κ΅¬ν˜„ν•˜λŠ” 쒋은 방법을 찾지 λͺ»ν–ˆμŠ΅λ‹ˆλ‹€. "λͺ»μƒκΈ΄" κΉŠμ€ μ›μˆ­μ΄ 패치λ₯Ό μ‚¬μš©ν•˜λŠ” 포크의 κ°œλ… 증λͺ…λ§Œ.

μ•„, μ•Œκ² μŠ΅λ‹ˆλ‹€. μ œκ°€ λ­”κ°€λ₯Ό λ†“μΉ˜κ³  μžˆλ‹€λŠ” 생각에 벽에 머리λ₯Ό λ°•κ³  μžˆμ—ˆμŠ΅λ‹ˆλ‹€. :) 참쑰된 문제 λ²ˆν˜ΈλŠ” 둀링할 λ•Œλ§ˆλ‹€ κ½€ 도움이 될 것 κ°™μŠ΅λ‹ˆλ‹€. κ³ λ§ˆμ›Œμš” μ‘°λ‚˜μŠ€!

이것은 ν˜Όλž€μŠ€λŸ½κ³  μ΄λŸ¬ν•œ μΆ”κ°€ λ³€μˆ˜λŠ” roledef μ™ΈλΆ€μ—μ„œ μ•‘μ„ΈμŠ€ν•  수 μ—†λ‹€λŠ” 것을 λ¬Έμ„œμ—μ„œ μ–ΈκΈ‰ν•΄μ•Ό ν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

@bitprophet νμ‡„λœ μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ? μΆ”κ°€ roledef ν‚€μ˜ λ™μž‘μ€ λ³€κ²½λ˜μ§€ μ•Šμ•˜μœΌλ―€λ‘œ "μˆ˜μ •λ˜μ§€ μ•ŠμŒ"μž…λ‹ˆκΉŒ?

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰