2014-05-14 2 views
12

(이것은 내가 소금 사용자 그룹 인 FWIW에 질문 한 내용입니다)소금 상태의 중간에 재부팅하는 방법?

일부 Windows 서버 기능을 설치하고 미니언을 재부팅 한 다음 더 많은 소프트웨어를 설치하는 상태로 작성해야합니다. 모든 조각 (cmd.wait, system.reboot)이있는 것 같지만 점을 연결하는 데 문제가 있습니다.

예를 들어 컴퓨터에 IIS를 설치해야하는 "웹 서버"상태가 있습니다. 일부 서버 기능을 활성화하고 재부팅해야 (Windows), 계속 진행해야합니다. 우리는 웹 사이트와 앱 풀을 설치하기위한 또 다른 모듈을 설치할 수있는 "웹 사이트"라는 맞춤 모듈로이 작업을 수행합니다. 우리의 상태 파일은 다음과 같은 :

my_website: 
    website.installed: 
    - name: example.com 
    - version: alpha-1.0.0 
     - type: Website 
     - bindings: 
      - hostheader: localhost 
      - port: 1234 
     - installdir: c:\\wwwroot\\example.com 
     - apppool: static 
    - require: 
      - sls: serverstate.webserver 
      - sls: apppool.static 

큰 위의 작품을 우리는 "serverstate.webserver"와 "apppool.static"요구 사항 사이에 재부팅을 할 필요는 사실을 제외하고. 상태가 지속되면 상태가 실패하고 수동으로 다시 부팅 한 다음 상태를 다시 실행하면 작동합니다. 당연히 수동 재부팅 단계를 생략하고 싶습니다.

이러한 유형의 문제를 해결할 수있는 공통 패턴이 있습니까?

+0

아마도 도움이 될까요? http://salt.readthedocs.org/en/latest/ref/modules/all/salt.modules.system.html#salt.modules.system.reboot – nmadhok

+0

@nmadhok : 아니오, 외부에서 재부팅하는 방법을 알려줍니다. 상태가 아닌 상태. –

답변

14

나는 과거에이 문제에 봉착했습니다. 필요한 동작을 얻기 위해 수행 한 작업은 sls 파일의 섹션을 실행해야하는 경우 실행시 결정할 수있는 jinja입니다. 일단 재부팅이 필요한 각 섹션에 성공하면 사용자 정의 곡물을 설정하여이 작업을 수행합니다. 다음 실행에서 이미 완료된 섹션을 건너 뜁니다.

다음은 sls 파일의 예입니다.

{% if grains.get('myapp_done') != 'completed' %} 

myapp: 
    pkg.installed: 
    - source: salt:/windows/myapp.exe 

myapp_done: 
    module.run: 
    - name: grains.setval 
    - key: myapp 
    - val: complete 

system.reboot: 
    module.run: 
    - watch: 
     - pkg: myapp 

{% endif %} 

{% if grains.get('myotherapp_done') != 'completed' %} 

myotherapp: 
    pkg.installed: 
    - source: salt:/windows/myotherapp.exe 

myotherapp_done: 
    module.run: 
    - name: grains.setval 
    - key: myotherapp 
    - val: complete 


system.reboot: 
    module.run: 
    - watch: 
     - pkg: myotherapp 

{% endif %} 

그런 다음 하이퍼 스테이션을 여러 번 실행하거나 미니언의 구성에서 다음을 설정하여 시작시 하이퍼 시트를 실행하십시오.

startup_states: highstate 
+3

나는 구글로부터이 질문을 받았다. 나는 대답을 좋아한다. 이것을 찾는 다른 사람들은 module.run 상태에서 'requires'지시문을 사용하여 pkg.install이 성공하지 않으면 그레인이 설정되지 않도록 제안합니다. (편집을 시도했지만 "의도 변경"으로 인해 거부되었습니다.) –

+0

John Hazen의 제안에 따르면 module.run 상태에서 pkg.install이 필요하다는 것은 매우 좋은 생각입니다. 간결함을 위해 예제를 업데이트하지는 않았지만 누군가가 관심을 가지면 그렇게 할 것입니다. –

관련 문제