2016-10-27 9 views
0

약간의 도움이 필요합니다. 최종 목표는 일반적인 것 인 상태를 유지하고 필요로하는 서버와 각 서버의 다른 dir에 pem cert 파일을 푸시 할 수있게하는 것입니다. 나는 그것이 의미가 있기를 바랍니다. 다시 말해, 각 서버가 pem 파일을 배포하기위한 별도의 상태를 원하지 않습니다. 파일의 소스의솔트 스탁 및 만들기 상태 일반

{% if 'custom_id' in pillar.get('the_custom_id') %} 
{% set theuser = 'relevantuser' %} 
{% set certpath = '/path/to/certs' %} 
{% elif 'another-custom_id' in pillar.get('the_custom_id') %} 
{% set theuser = 'relevantuser' %} 
{% set certpath = '/path/to/certs' %} 
{% else %} 
{% set theuser = 'relevantuser' %} 
{% set certpath = '/path/to/certs' %} 
{% endif %} 

{{ certpath }}: 
    file.directory: 
    - user: {{ theuser }} 
    - group: {{ theuser }} 
    - file_mode: 600 
    - dir_mode: 755 
    - makedirs: True 
    - recurse: 
    - user 
    - group 
    - mode 

{% for cert_type in pillar.get('pem_certs', {}) %} 
{{ certpath }}{{ cert_type }}.pem: 
    file.managed: 
    - context: 
     cert_type: {{ cert_type }} 
    - mode: 600 
    - source: salt://path/to/file/filename 
    - template: jinja 
{% endfor %} 

내용 : (내가 뭔가 다른 변수에 대한 특정 세부 사항을 변경 한)

홈페이지 상태가 해당 서버에 포함 할

: 내가 지금까지 가지고

.managed above :

{{ pillar['pem_certs'][cert_type] }} 

pillar.get 함수의 필라 파일에는 pem 키가 포함됩니다.

pem_certs: 
    ca-cert: 
    -----BEGIN CERTIFICATE--------- 
    etc 

소금 스택 환경이 가동되어 완전히 작동합니다. 동일한 경로가 잘 작동하는 미니언에 대한 rsa_id 개인 키를 추가 할 때 사용되었습니다. file.directory 제대로 작동하고 디렉터리를 만들고 그에 따라 올바른 사용자가 적용됩니다.

디버그에서 file.managed 상태가 렌더링되지 않고 그 이유를 알 수 없습니다. 상태를 실행 한

디버그 출력 :

[DEBUG ] Rendered data from file:  /var/cache/salt/minion/files/base/path/to/state.sls: 

/path/to/certs: 
    file.directory: 
    - user: theuser 
    - group: theuser 
    - file_mode: 600 
    - dir_mode: 755 
    - makedirs: True 
    - recurse: 
      - user 
      - group 
      - mode 

[DEBUG ] LazyLoaded config.get 

현재 나는 pillar.get가 검색되지 않거나 pem_certs를 검색 할 수 있다는 것을 가정하고있다. 이것을 구체적으로 테스트 할 수있는 방법이 있습니까?

아무도 도와 줄 수 있습니까?

답변

1

현재는 {% for cert_type in pillar.get('pem_certs', {}) %}입니다. 미니언의 기둥에없는 경우 빈 dict를 반환합니다. 처음에는 이것이 처음입니다.

디버그의 경우 salt 'minionid' pillar.get pem_certs과 같은 작업을 수행하여 미니언에 사용할 수있는 데이터가 있다면을 알고 싶습니다. 이것이 기둥 데이터를 표시하지 않으면 기둥의 상단을 확인하십시오. 귀하의 미니언에 적용된 기둥 데이터가 올바르게 있습니까?

또한 {% for cert_type, cert_data in pillar.get('pem_certs', {}).iteritems() %}을 사용하는 것이 좋습니다. 그렇게 할 경우 내용을 file.manage 템플릿의 컨텍스트에 직접 넘겨주고 더 이상 템플릿의 기둥 데이터를 쿼리 할 필요가 없습니다.

0

문제를 추적하는 데 도움을 준 dahrens에게 큰 감사를 전합니다. 필자는 pem certs를 포함하는 기둥 자료에 미니언을위한 포함을 생략했다.

모두 잘되었습니다.