2014-09-22 1 views
1

마스터가 데이터베이스 및 일부 파일을 백업하는 미니언에게 스크립트를 보내려고합니다. 그런 다음 마스터가 백업 스크립트에서 생성 된 파일을 rsync하여 백업이 마스터에게 완료된 이벤트를 발생 시키길 원합니다. 마스터는 Reactor에서 이벤트를 처리하고 rsync를 수행하는 러너를 시작합니다.마스터 러너가 완료 될 때까지 미니언을 대기로 만듭니다.

내 부하가 '백업 완료'상태가 성공했음을보고하기 전에 러너가 완료되고 돌아 오기를 기다리는 것이 좋습니다. 현재 미니언은 국가가 러너의 반응을 기다리지 않고 성공적으로 실행되었다고보고합니다.

내 현재 설정은 다음과 같이 작동합니다

실행 백업 스크립트를 미니언에 마스터

salt 'minion' state.sls backup 

미니언 백업이 완료되었음을 이벤트를 트리거 (그리고 immedieately 반환)

에서
backup-complete: 
    module.run: 
    - name: 'event.fire_master' 
    - fun: fire_master 
    - tag: backup/complete 
    - data: {"status":"Backup complete"} 

마스터는 이벤트를 포착하고 러너를 호출하는 반응기를 가지고 있습니다.

backup_complete: 
    runner.sync-backup.sync: 
    - status: {{ data['data']['status'] }} 
러너 후 나는 미니언 대기하고 'rsync에/완전한'이벤트를 수신하는 것에 대한 생각을 해 봤는데

def sync(status): 
    command = "myrsyncscript.sh arg0 arg1" 
    result = os.system(command) >> 8 
    return result 

종료 코드를 파일과 디렉토리를 동기화하기위한 rsync를 명령을 실행하고 반환

마스터에 의해 트리거되지만 미니언에서 eventlisteners를 작성하는 방법이나 기다릴 방법을 찾을 수 없습니다. 내가 보았던 또 하나의 해결책은 'salt.modules.cp.push'이다. 보안상의 이유 때문에이 문서를 통해 경고 메시지가 다시 나왔다.

해결책이 너무 복잡해 보이므로 잘못된 방식으로 접근하고 있습니다. 모든 생각을 환영합니다.

답변

0

미니언에서 반응기를 작동시킬 수는 있지만, 나는 그것이 자신의 이벤트 버스에서만 듣고 있다고 확신합니다. 나는 사건 버스를 통해 주 (主)로부터 미니언으로 메시지를 보내는 명령이 있다고 믿지 않는다.

마스터의 주자가 솔트의 일반 실행 모듈을 통해 Minion에서 통화를 실행하는 것이 가장 좋습니다.

관련 문제