Fabric: 'abort_on_prompts'๊ฐ€ warn_only = True๋ณด๋‹ค ์šฐ์„ ํ•ฉ๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2012๋…„ 10์›” 22์ผ  ยท  12์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: fabric/fabric

abort_on_prompts ๋ฐ warn_only = True๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜๋ ค๊ณ ํ•˜๋ฉด abort_on_prompts๊ฐ€ warn_only๋ฅผ ์žฌ์ •์˜ํ•˜๊ณ  fabric์€ ์—ฌ์ „ํžˆ โ€‹โ€‹SystemExit๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

In [6]: from fabric.api import sudo, execute, cd, env, run, local

In [7]: with settings(warn_only = True):
    result = local("ls -ltrh")
   ...:     
[localhost] local: ls -ltrh
total 188K
In [8]: with settings(warn_only = True):
    result = local("ls -ltrh /tmp/tartratrat")
   ...:     
[localhost] local: ls -ltrh /tmp/tartratrat
ls: cannot access /tmp/tartratrat: No such file or directory

Warning: local() encountered an error (return code 2) while executing 'ls -ltrh /tmp/tartratrat'


In [9]: env['abort_on_prompts'] = True

In [10]: with settings(warn_only = True):
    result = local("ls -ltrh /tmp/tartratrat")
   ....:     
[localhost] local: ls -ltrh /tmp/tartratrat
ls: cannot access /tmp/tartratrat: No such file or directory

Warning: local() encountered an error (return code 2) while executing 'ls -ltrh /tmp/tartratrat'


In [11]: with settings(warn_only = True):
    result = run("ls -ltrh /tmp/tartratrat")
   ....:     

Fatal error: Needed to prompt for the target host connection string, but abort-on-prompts was set to True

Aborting.
An exception has occurred, use %tb to see the full traceback.

SystemExit: 1
To exit: use 'exit', 'quit', or Ctrl-D.
Bug Core

๋ชจ๋“  12 ๋Œ“๊ธ€

(Protip, ํ…์ŠคํŠธ ํ•„๋“œ ์œ„์˜ "Github Flavored Markdown"๋งํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์˜ฌ๋ฐ”๋ฅธ ํ˜•์‹์„ ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์„ค๋ช…์„ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. :))

๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž๊ฐ€ abort_on_prompts ํ† ๊ธ€ ํ•  ๋•Œ ๊ฒฝ๊ณ  ๋ฐ ๊ณ„์†์ด ์•„๋‹Œ ํ˜„์žฌ ๋™์ž‘ (์ค‘๋‹จ)์„ _ ์•„๋งˆ _ ์˜ˆ์ƒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. warn_only=True ์ผ๋ฐ˜์ ์œผ๋กœ _ ์›๊ฒฉ ํ”„๋กœ๊ทธ๋žจ _์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ˆ˜ํ–‰ ํ•  ์ž‘์—…์— ์ ์šฉ๋˜๋ฉฐ Fabric ์ž์ฒด๊ฐ€ ์ค‘๋‹จ๋˜๋Š” ๊ฒฝ์šฐ์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๋‘˜ ๋‹ค ์ฐธ์ธ ์ƒํ™ฉ์ด ์ž˜ ์ •์˜ / ๋ฌธ์„œํ™”๋˜์ง€ ์•Š์•˜ ์Œ์„ ์ธ์ •ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ abort() ์˜ ๋Œ€๋ถ€๋ถ„์˜ ๋‹ค๋ฅธ ์šฉ๋„๋Š” "abort if $$ warn_only=False "๋…ผ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” error() ํ˜ธ์ถœ๋กœ ๋Œ€์ฒด๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ผ๊ด€์„ฑ์ด ์‚ฌ์šฉ์ž๊ฐ€ ํ”„๋กฌํ”„ํŠธ์‹œ ์ค‘๋‹จ์„ ์‹œ๋„ํ•˜๊ณ  ์˜ˆ์ƒ์น˜ ๋ชปํ•œ warn_only=True ์˜ํ•ด ๋ฐฉํ•ด๋ฅผ๋ฐ›์„ ๊ฐ€๋Šฅ์„ฑ์„ ๋Šฅ๊ฐ€ํ•œ๋‹ค๋Š” ์ ์„ ์ง€๊ธˆ ๋‹น์žฅ ์š”์ฒญํ•˜๊ณ  ์š”์ฒญํ•œ ๋ณ€๊ฒฝ์„ ์ˆ˜ํ–‰ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๋ถˆํ‰ํ•˜๋ฉด ๋‚˜๋Š” ๋‹น์‹ ์„ ์•ž์— ๋‚ด๋†“์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค;)

๋ฐ˜์„ฑ์—์„œ ๋‚˜๋Š” ์ด๊ฒƒ์— ๋Œ€ํ•ด ์ •๋ง ์ฐข์–ด์กŒ์Šต๋‹ˆ๋‹ค. ์•ž์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ํ”„๋กฌํ”„ํŠธ๋กœ ์ธํ•ด Fabric์ด ํญ๋ฐœํ•˜๊ธฐ๋ฅผ ์›ํ•˜๋Š” ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋ง๊ฐ€์ง„ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ˆจ๊ฒจ์ง„ ์˜ค๋ฅ˜๋Š” ์ถ”์ ํ•˜๊ธฐ๊ฐ€ ๋งค์šฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@pkittenis- ์ด๊ฒƒ์ด ๋‹น์‹ ์—๊ฒŒ ๋ฌธ์ œ๊ฐ€๋˜๋Š” ์‹ค์ œ ์ƒํ™ฉ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? try/except SystemExit ์„ (๋ฅผ) ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ด๋กœ ์ธํ•ด ์ฐจ๋‹จ ๋œ ๊ฒฝ์šฐ ๋” ํ•ฉ๋ฆฌ์  ์ผ ์ˆ˜์žˆ๋Š” ๊ฒƒ์€ ์ƒˆ๋กœ์šด ๊ตฌ์„ฑ ์˜ต์…˜ ( warn_trumps_abort ์™€ ๊ฐ™์€ ๋ฉ์ฒญํ•œ ์ด๋ฆ„ ํฌํ•จ)์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์‚ฌ์šฉ ์‚ฌ๋ก€์˜ ์‚ฌ๋žŒ๋“ค์ด ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๋ณ€๊ฒฝ์„ ์ผ์œผํ‚ค์ง€ ์•Š๊ณ  ๋™์ž‘์„ ์ œ์–ด ํ•  ์ˆ˜ ์žˆ๋„๋กํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•ด.

๋ฌธ์ œ๋Š” abort_on_prompts ์˜ ๋™์ž‘์œผ๋กœ ์ธํ•ด ๋ช…๋ น์— ์˜ค๋ฅ˜๊ฐ€์žˆ์„ ๋•Œ No hosts found. Please specify (single) host string for connection: ๋กœ ํด๋ฐฑ ํ•  ๋•Œ fabric์ด SystemExit๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํŒจ๋ธŒ๋ฆญ์„ API๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์ž˜๋ชป๋œ IMO์ž…๋‹ˆ๋‹ค. API ์‚ฌ์šฉ์ž๋Š” ์‹คํ–‰์‹œ SystemExit๋ฅผ ํ”ผํ•˜๊ณ  ๋Œ€์‹  ์ฝ”๋“œ ๋‚ด์—์„œ ๋ฐ˜ํ™˜ ์ฝ”๋“œ๋ฅผ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ โ€‹โ€‹์žˆ๋„๋ก warn_only ๋ฅผ ์ด๋ฏธ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ›Œ๋ฅญํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ์‚ฌ์šฉ์ž๋Š” abort_on_prompts ๋ฅผ ์„ค์ •ํ•˜๊ณ  ๋ช…๋ น์ด ์‹คํŒจ ํ•  ๋•Œ ๋ช…๋ น์— ๋Œ€ํ•œ ์˜ค๋ฅ˜ ์ฝ”๋“œ๋ฅผ๋ฐ›๋Š” ๋Œ€์‹  enter a host ๋กœ์˜ ํด๋ฐฑ ๋ฐ abort_on_prompts ์‚ฌ์šฉ์œผ๋กœ ์ธํ•ด SystemExit๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ โ€‹โ€‹์žˆ์ง€๋งŒ์ด ๊ฒฝ์šฐ ๋” ์ด์ƒ ์‹คํŒจํ•œ ๋ช…๋ น์˜ ๋ฐ˜ํ™˜ ์ฝ”๋“œ๋ฅผ ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

abort_on_prompts ๋‹ค์‹œ False๋กœ ๋‹ค์‹œ ์„ค์ •ํ•˜์—ฌ ํ˜„์žฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์‹คํŒจ ํ•  ์ˆ˜๋„ ์žˆ๊ณ  ์‹คํŒจํ•˜์ง€ ์•Š์„ ์ˆ˜๋„์žˆ๋Š” ๋ชจ๋“  ๋ช…๋ น์— ๋Œ€ํ•ด ์ˆ˜ํ–‰ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ํŒจ๋ธŒ๋ฆญ์„ API๋กœ ์‚ฌ์šฉํ•  ๋•Œ ๋ช…๋ น ์ค„์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋‚ด์žฅ ํŒจ๋ธŒ๋ฆญ ํ”„๋กฌํ”„ํŠธ, ํŠนํžˆ No hosts found.. ๋ฅผ ์™„์ „ํžˆ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ํ”Œ๋ž˜๊ทธ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด abort_on_prompts ๋Š”์ด๋ฅผ ์œ ๋ฐœํ•  ํ”„๋กฌํ”„ํŠธ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— SystemExit๋ฅผ ์œ ๋ฐœํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

+1-์ง€๊ธˆ ๋ฐ”๋กœ์ด ๋ฌธ์ œ์— ์ง๋ฉดํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ๊ตฌ์ฒด์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ์ตœ๊ทผ ํ”„๋กœ๋น„์ €๋‹ ๋œ ํด๋ผ์šฐ๋“œ ๋…ธ๋“œ๋ฅผ ํ™•์ธํ•˜๊ณ  ํ•ด๋‹น ๋…ธ๋“œ๊ฐ€ ์ ์ ˆํ•œ ๊ณต๊ฐœ ํ‚ค๋กœ SSH ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด Fabric์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ์‹ค์ œ๋กœ abort_on_prompts ์˜ˆ์™ธ๋ฅผ _catch_ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ๋ช…์‹œ ์ ์œผ๋กœ SystemExit๋ฅผ ์žก์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ์‹ค์ œ๋กœ ๋งค์šฐ ์ž˜๋ชป๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

+1-abort_on_prompts ์˜ˆ์™ธ๋„ ํฌ์ฐฉํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

: +1 : ์ €๋Š” SystemExit ๊ฐ€ ์ž๋ผ๋Š” ๊ฒƒ์„ ์›ํ•˜์ง€ ์•Š๋Š” ๊ฐ™์€ ์ƒํ™ฉ์— ์žˆ์Šต๋‹ˆ๋‹ค. ์…€๋Ÿฌ๋ฆฌ ์ผ๊พผ์„ ์ฃฝ์ž…๋‹ˆ๋‹ค.

์ด ๋‹จ๊ณ„์—์„œ ์ €๋Š”์ด ์ˆ˜์ค€์˜ ๋ณ€๊ฒฝ์ด API ์‚ฌ์šฉ ์‚ฌ๋ก€์™€ CLI ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๋ณด์กฐ / ๋ž˜ํผ ์‚ฌ์šฉ ์‚ฌ๋ก€๋กœ ์„ค๊ณ„์ค‘์ธ ๋ฒ„์ „ 2.0์— ๋” ์ ํ•ฉํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. 1.x์—์„œ ๋™์ž‘์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ ๋ฒ„๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ๋†€๋ž๊ฑฐ๋‚˜ / ํ˜ผ๋ž€ ์Šค๋Ÿฝ๊ฑฐ๋‚˜ / ์˜ํ•ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2.x๋กœ ํƒœ๊ทธ๋ฅผ ์ง€์ •ํ•˜๊ณ  ์—ด์–ด๋‘๋ฉด API์˜ ํ•ด๋‹น ๋ถ€๋ถ„์„ ์ž‘์„ฑํ•  ๋•Œ ๋‹ค์‹œ ๋ฐฉ๋ฌธํ•˜๊ณ  ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

+ warn_only abort_on_prompts ๋ฐ warn_only ๋ชจ๋‘ _True_์ด๋ฉด warn_only ์ด ์šฐ์„ ํ•ฉ๋‹ˆ๋‹ค.
์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋˜ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ, @reeesga : https://github.com/fabric/fabric/issues/521

+1

+1-abort_on_prompts ๋ฐ warn_only๊ฐ€ ๋ชจ๋‘ True์ด๋ฉด warn_only๊ฐ€ ์šฐ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ์œ„ํ•œ ์ƒˆ๋กœ์šด ์„ค์ •๋„ ์ข‹์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์— ๋Œ€ํ•œ ๋ชจ๋“  ์—…๋ฐ์ดํŠธ?
SystemExit์„ ์žก์•˜์ง€๋งŒ ์ถœ๋ ฅ์ด ์ถ”์•…ํ•ฉ๋‹ˆ๋‹ค ...

์ง์ ‘ ํ™•์ธ :

webapps2adm001.qa.aws.company.com : ๋ฃจํŠธ๋กœ ์—ฐ๊ฒฐ ์„ฑ๊ณต.
webapps2001.qa.aws.company.com : ๋ฃจํŠธ๋กœ ์—ฐ๊ฒฐ ์„ฑ๊ณต.

์น˜๋ช…์  ์˜ค๋ฅ˜ : ์—ฐ๊ฒฐ ๋˜๋Š” sudo ์•”ํ˜ธ (ํ˜ธ์ŠคํŠธ : webapps3001.ia.aws.company.com)๋ฅผ ์ž…๋ ฅํ•˜๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํ•„์š”ํ•˜์ง€๋งŒ ๋ณ‘๋ ฌ ๋ชจ๋“œ์—์„œ๋Š” ์ž…๋ ฅ์ด ๋ชจํ˜ธํ•ฉ๋‹ˆ๋‹ค.

์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค.
webapps3001.ia.aws.company.com : ๋ฃจํŠธ๋กœ ์—ฐ๊ฒฐ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค. SystemExit : 1
webapps3adm001.ia.aws.company.com : ๋ฃจํŠธ๋กœ ์—ฐ๊ฒฐ ์„ฑ๊ณต.

์ค‘๋‹จ ํ›„์—๋„ ์ค„์„ ์œ ์ง€ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ๋ณด๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜ํ•œ์ด ๋ฌธ์ œ์— ์ง๋ฉดํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ํ˜„์žฌ ๋™์ž‘์ด ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์„๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰