2017-09-23 19 views
0

배포를 위해 Fabric을 사용할 때 프로그래밍 방식으로 현재 env를 변경하는 방법이 있습니까?Fabric, Python - 프로그래밍 방식으로 enchang 변경

내가하고 싶은 일은 한 번의 통화로 모든 환경에서 작업을 수행하는 것입니다. envs를 반복하면서 동일한 작업을 호출합니다.

예를 들어

:

def live(): 
    env.host = ['123.123.123.123'] 

def dev(): 
    env.host = ['321.321.321.321'] 

environments = ['live', 'dev'] 

def backup_db(): 
    run('mysqldump etc ..' % env) 

def backup_all_dbs(): 
    for environment in environments: 
     env = new_env(environment) 
     backup_db 

및 다음

fab backup_all_dbs 

실행하지만 즉석에서 ENV를 인스턴스화하는 방법을 모른다, 실제로에서 새 현재 ENV 변경 암호.

devv() 또는 live()와 같은 env 함수를 호출하는 것만으로는 충분하지 않습니다. 현재 env dict에 검사 할 경우 다른 것들이 있기 때문입니다.

docs에서 아무것도 볼 수 없지만 아마도 env는 명령 줄에서 한 번만 만들 수 있습니까?

감사

여러 호스트에서 동일한 명령을 실행의 측면에서, 직물을 사용하는 가장 좋은 방법은 아니다

답변

0

. 더 나은 방법은 다음과 같습니다

from fabric.api import env, run, task 

env.hosts = ['123.123.123.123', '213.213.213.213'] 

@task 
def uname(): 
    run('uname -a') 
당신은 더 많은 정보를 원하시면 해당 문서의 How host lists are constructed 섹션을 참조 할 것

.

+0

안녕하세요. 이미 env마다 여러 개의 호스트가 설정되어 있습니다. 그러나 그것은 내가 달성하기를 원하는 것 (또는 내가 묻고있는 것)이 아닙니다. 또한 모든 호스트에 동일한 작업을 실행하도록 모든 환경을 요구하는 것은 부적절하다고 생각하지 않습니다. 예를 들어 현재 수행중인 작업을 원하는대로 백업 할 수 있습니다. –

+0

그런데 Fabric이 작동하는 방식이 아닙니다. 즉, "환경"에 동일한 작업을 실행하도록 "요청하지"않습니다. 환경은 하나 뿐이며 글로벌 가치입니다. 또한 모든 호스트에서 동일한 작업을 수행하는 방법을 물었습니다. 그 예가 제가 제공 한 것과 정확히 같습니다. 출력 결과를보기 위해 위의 스크립트를 실행 했습니까? – YellowShark

+0

아니요 저는 여러분의 모범을 보지 않았습니다. 왜냐하면 저는 그것이 무엇인지를 알 수 있기 때문이며 제가 구하는 것이 아니기 때문입니다. 내 질문에 대한 답을 모를 경우 완전히 좋습니다. 내가 묻는 것은 기술적으로 매우 명확합니다. 실행 중에 env의 전역 적 가치를 프로그래밍 방식으로 변경할 수 있습니까? 단지 킥킥 웃음을 위해서. –