1) '์์
์คํ ์ค ...'๊ณผ ๊ฐ์ ํญ๋ชฉ์ ์จ๊ธฐ์ง ์์ต๋๋ค.
2) ๋ง์ง๋ง ์ถ๋ ฅ์์ โโ์ค ๋ฐ๊ฟ์ ์ ๊ฑฐํ์ฌ ๋ค์ ์ถ๋ ฅ ์ค์ ๊ฒฐํฉํฉ๋๋ค.
fabfile์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
@์ง๋ฌด
def show_hostname () :
์ค์ (hide ( 'running')) :
์คํ ( 'ํธ์คํธ ์ด๋ฆ')
์คํ ( '๋ ์ง')
% /opt/python-2.7/bin/fab -f output.py -H x1, x2 show_hostname
[x1] 'show_hostname'์์
์คํ ์ค
[x1] ์ถ๋ ฅ : x1mydomain.de
[x1] ์ถ๋ ฅ : [x1] ์ถ๋ ฅ : Thu Aug 25 10:34:10 CEST 2011
[x1] out : [x2] 'show_hostname'์์
์คํ ์ค
[x2] ์ถ๋ ฅ : x2.mydomain.de
[x2] ์ถ๋ ฅ : [x2] ์ถ๋ ฅ : Thu Aug 25 10:34:11 CEST 2011
[x2] ์ถ๋ ฅ :
๋๋.
๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๊ฐ ๊ทธ๊ฒ์์๋ ๋์ :
3) ์๋ฅผ ๋ค์ด run ( 'hostname')์ ํญ์ ๋ค์๊ณผ ๊ฐ์ด ๋น ์ค์ ์ถ๋ ฅํฉ๋๋ค.
[h1] 'show_hostname'์์
์คํ ์ค
[h1] ์ถ๋ ฅ : h1.mydomain.de
[h1] ์ถ๋ ฅ :
3) ๋ชฉ์ ์ ๋ฐ๋ผ ๋น ์ค์์ 1,2 ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๊น?
๊ฐ์ฌ,
์ค๋ฒค
์ง๋ฌผ์ ๋ณด๋ฉด. main : main , '์คํ'์ด _outside_ ์์ ์ ์ํํ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ์จ๊ฒจ์ ธ ์์ง ์์ ์ด์ ์ ๋๋ค. ํด๊ฒฐ ๋ฐฉ๋ฒ (๊ธ๋ก๋ฒ!)์ผ๋ก fabric.state.output [ 'running'] = False๋ฅผ ์ค์ ํ๊ฑฐ๋ --hide = running์ ์ ๋ฌํ ์ ์์ต๋๋ค.
Gregg๋ ๋ค์ ์คํํฉ๋๋ค. "Executing"์ค์ด ์ธ์ ๋ ๋ ๊ธ๋ก๋ฒ ์ค์ ์ด๋์ด์ผํฉ๋๋ค. ๋น๋ก ์ด๊ฒ์ด ๋์ฐํ๊ฒ ์ง๊ด์ ์ด์ง ์๊ณ ๋ ๋์ ๋ฐฉ๋ฒ์ด ์์์ผ๋ฉดํฉ๋๋ค. (์๋ก์ด ์คํ์ผ์ ์์ ์ ๋ํด ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์๊ฐํ ์ ์์ง๋ง ํ์ฌ ๋ ์ ํ ๊ฐ์ ๋์ ์ฐจ์ด๋ฅผ ๋๋ฆด ๊ฐ์น๊ฐ ์๋์ง ํ์คํ์ง ์์ต๋๋ค ...)
stdout
๋ธ๋ก ๋์์๋ ์ค ๋ฐ๊ฟ์ ์๋์ ์ผ๋ก IIRC์
๋๋ค.ํ์ง๋ง ๋ช
์ ์ ์ผ๋ก ์ฝ์
ํ๋์ง ๋๋ ์ค์ ๋ก ์๊ฒฉ ๋์์ ์๋์ง ๊ธฐ์ตํ ์ ์์ต๋๋ค (์ ์ค ์ ๋์ฌ๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ ๊ฒ๋ฟ์
๋๋ค). ๋๋ ๊ทธ๊ฒ์ด ๋ฒ๊ทธ๋ผ๊ณ ์๊ฐํ์ง ์๋๋ค.
"๋๋ฝ ๋"์ค ๋ฐ๊ฟ์ ๊ด๋ จ์ด์์ ์ ์์ต๋๋ค. ๋ค์ ํ์ธํด์ผํฉ๋๋ค. ์ด๋ค ์ ์ผ๋ก๋ ์ถ์ ํ๊ฒ ๋ณด์ผ ๊ฒ์ด๊ณ ์ถ์ ํจ์ ๋ ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ๋ก ์ฎ๊ฒจ์ผํ๋ ์ํฉ ์ผ ์ ์์ต๋๋ค.
์ด ๋ฒ๊ทธ / UI ๋ถ์ผ์น์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น? ํจ๋ธ๋ฆญ์ ํตํด ํ์ผ์ ์ถ์ ํ๋ ค๊ณ ํ๋๋ฐ "[hostname]"์ถ๋ ฅ์ ๋ง์คํนํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
fabric.state.output['running'] = False
์๋ํ์ง๋ง ๋ณ๊ฒฝ ์ฌํญ์ด ์์ต๋๋ค.
@charlax fab --hide=running
์ฌ์ฉํ ์ ์์ผ๋ฉฐ ์คํ ์์์ ์ถ๋ ฅ ๋ ๋ฒจ์ด ํด์ ๋๋ฏ๋ก ์์
๋ด๋ถ์์ ์จ๊ธธ ์์๋ ๋ชจ๋ '์คํ์ค์ธ ์์
x'ํญ๋ชฉ์ ์จ๊ฒจ์ผํฉ๋๋ค. ์ด์ ์๊ฒฌ์์ ์ ์ด๊ฒ์ ์ธ๊ธํ์ง ์์๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
๋ํ fabfile์ ๋ชจ๋ (์ต์์) ์์ค์์ ์ธ๊ธ ํ fabric.state.output
๋ณ๊ฒฝ์ ์ํ ํ ์ ์์ด์ผํฉ๋๋ค. ์๋ํ์ ๋ ์ ํํ ์ด๋์ ๋ฃ์์ต๋๊น? ์์
๋ด๋ถ์ ์์ผ๋ฉด ์ฌ์ ํ ์๋ํ์ง ์์ต๋๋ค.
์ ๋ง๋ค, ์ฌ์ค ๋ด๊ฐํ๋ ค๋ ๊ฒ์ [host.com] out:
๋ถ๋ถ์ โโ์จ๊ธฐ๋ ๊ฒ์
๋๋ค. ์คํด๋ฅผํด์ ์ฃ์กํฉ๋๋ค.
๊ทธ ์ค์ ๊ทธ ๋ถ๋ถ์ ์๋ฏธํฉ๋๊น? ์ด์ ๋ํ ๊ฐ์ธ ๊ตฌ์ฑ ์ค์ ์ด ์์ง๋ง fab 2.0์ด ๋์ค๊ธฐ ์ ์ ๋ณ๊ฒฝ๋๋ ๊ฒ์ ๋ณด์ง ๋ชปํ๋ฏ๋ก ๋น๋ฐ์ ์๋ ค ๋๋ฆฌ๊ฒ ์ต๋๋ค. env.output_prefix
์ด๊ณ False๋ก ์ค์ ํ๋ฉด๋ฉ๋๋ค. ์ค ์ ๋์ฌ์์ด ๋ฆฌํฐ๋ด stdout / stderr์ ์ธ์ํฉ๋๋ค.
๊ฐ์ฌ!
@hosts () ๋ฐ์ฝ๋ ์ดํฐ๋ ๊ฐ์ ๋ก ๋นํ์ฑํํ์ง ์๊ณ ์คํ์ค์ธ ์ถ๋ ฅ์ 'ํธ์คํธ'๋ถ๋ถ์ ์จ๊ธธ ์ ์์ด์ผํฉ๋๋ค.
fabric.state.output['running']
์ ์ธ๊ณ์ ์ผ๋ก. ์ด๊ฒ์ ๊ทธ๊ฒ์ด ์๋ฏธํ๋ ์ผ์ธ ๋จ์ผ ๋ฉ์๋์ ๋ํด env.hosts๋ฅผ ์ฌ์ ์ํ๋ ๊ฒ์ ํ์ฉํฉ๋๋ค. ๋น ๋ฐ๋ณต์ (๋๋ None)๋ก ์ค์ ํ๋ฉด ํธ์คํธ๋ฅผ ์ธ์ํ์ง ์๋ local_only ์คํ์ ํธ๋ฆฌ๊ฑฐํด์ผํ๋ค๋ ์ ์์ env.hosts์ฒ๋ผ ๋์ํด์ผํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ํ์ฌ @hosts ์ ๋น ๋ฐ๋ณต๊ธฐ๋ ๋ฌด์๋๊ณ env.hosts ์ฌ์ฉ์ผ๋ก ๋์ฒด๋ฉ๋๋ค. ํ๋ฆฌ๋ฉด ํจ์น๋ฅผ ์์ฑํ๊ฒ ์ต๋๋ค.
๋ฌธ์ ๊ฐ์์ ๋๋ฅผ ์ ์ธํ๊ณ ๋ ๋ด๊ฐ ๋ช ์ ์ ์ผ๋ก ์ถ๋ ฅํ๋ ๊ฒ์ ์ ์ธํ๊ณ ๋ชจ๋ (์ ๋ง ๋ง ๊ทธ๋๋ก ๋ชจ๋ ) ์ถ๋ ฅ์ ๋นํ์ฑํ ํ ์ ์๋ค๋ฉด ์ ์ฉ ํ ๊ฒ์ ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ฌธ์ ๊ฐ์์ ๋๋ฅผ ์ ์ธํ๊ณ ๋ ๋ด๊ฐ ๋ช ์ ์ ์ผ๋ก ์ถ๋ ฅํ๋ ๊ฒ์ ์ ์ธํ๊ณ ๋ชจ๋ (์ ๋ง ๋ง ๊ทธ๋๋ก ๋ชจ๋ ) ์ถ๋ ฅ์ ๋นํ์ฑํ ํ ์ ์๋ค๋ฉด ์ ์ฉ ํ ๊ฒ์ ๋๋ค.