2016-10-06 2 views
-1

각 환경 유형 dev, qa, integration에 대해 yaml 파일을 만들었습니다. 그러나 여러 dev 환경이 있고 호스트 특정 yaml 파일을 통해 일부 변경 내용을 무시할 싶습니다.hiera_hash를 사용하여 hiera puppet의 변경 사항

Hiera 
|--host 
| |-dev1.internet.com 
| |-dev2.intranet.com 
|--servertype 
| |-dev 
| |-qa 

dev.yaml 
augeas_xml: 
    - 'set /root/node/servername/#text 'dev' 
    - 'set /root/node/serverlocation/#text 'London' 
    - 'set /root/node/ntp/#text '123.123.123.123' 

dev1.internet.com.yaml 
augeas_xml: 
    - 'set /root/node/serverlocation/#text 'New York' 
    - 'set /root/node/ntp/#text '123.123.123.125' 

dev2.intranet.com.yaml 
augeas_xml: 
    - 'set /root/node/serverlocation/#text 'Accrington' 

나는 다음과 같은

augeas_xml: 
    - 'set /root/node/servername/#text 'dev' 
    - 'set /root/node/serverlocation/#text 'New York' 
    - 'set /root/node/ntp/#text '123.123.123.125' 

hiera_array이 나에게 원하는 결과를 제공하지 않고 hiera_hash 나에게 다음과 같은 오류를주고있다 가지고 dev1.internet.com.yaml의 설정을 얻을 수있는 방법이 필요합니다 : 키 'augeas_xml'에 대한 Hiera 유형 불일치 : 예상되는 해시 및 배열 가져 오기

호스트 별 설정이 환경 별 설정보다 우선하지 않습니다. 내가 준 예제는 작은 서버 세트입니다. 수백 개의 서버를 관리하기 위해 꼭두각시를 사용하고 있습니다. hiera를 사용하고 모든 단일 호스트에 대해 yaml 파일을 만들 수 있습니다. 그러나, 나는 default.yaml을 가지고

--- 
:hierarchy: 
    - "host/%{::fqdn}" 
    - "server_type/%{server_type}" 
    - default 
:backends: 
    - yaml 
:yaml: 
    :datadir: "/puppet/hieradata/%{::environment}" 
:merge_behavior: deeper 

후자는

dev1.internet.com.yaml 
    augeas_xml: 
     - 'set /root/node/serverlocation/#text 'New York' 
     - 'set /root/node/ntp/#text '123.123.123.125' 
     - 'set /root/node/servername/#text 'dev' 
     - 'set /root/node/serverlocation/#text 'London' 
     - 'set /root/node/ntp/#text '123.123.123.123' 

을 생산하는 host.yaml의 변화를 무시할 수 있기를 원하지만 내가하고 싶은

dev1.internet.com.yaml 
    augeas_xml: 
     - 'set /root/node/servername/#text 'dev' 
     - 'set /root/node/serverlocation/#text 'London' 
     - 'set /root/node/ntp/#text '123.123.123.123' 
     - 'set /root/node/serverlocation/#text 'New York' 
     - 'set /root/node/ntp/#text '123.123.123.125' 
+0

는'hiera_hash', 여기 아무 소용이 없다 (다른 Augeas 자원 속성을 누락하고 자신의 교체해야합니다주의). 'hiera_array'의 결과는 바람직하지 않습니다. 생성되는 결과를 표시하고 이것이 왜 문제인지 확인하십시오. –

+0

호스트 특정 설정이 환경 별 설정보다 우선하지 않습니다. 내가 준 예제는 작은 서버 세트입니다. 수백 개의 서버를 관리하기 위해 꼭두각시를 사용하고 있습니다. hiera를 사용하고 모든 단일 호스트에 대해 yaml 파일을 만들 수 있습니다. 그러나 default.yaml을 갖고 host.yaml의 변경 사항을 무시할 수 있습니다. – Vash

+0

hiera.yaml을 질문에 추가하고 설명하는 파일의 위치를 ​​더 정확하게 표시하십시오. 구조 또는 맨 위에있는 논리 구조? –

답변

0

데이터 파일에서 Augeas 명령 및 경로를 유지하고 중요한 비트 인 데이터 - 이름, 위치 및 서버 주소 만 넣으면 훨씬 간단합니다. - 데이터 파일에. Augeas 명령은 데이터가 아니라 구현에 특화된 명령입니다. 예를 들어

:

dev.yaml

servername: 'dev' 
serverlocation: 'London' 
ntp: '123.123.123.123' 

dev1.internet.com.yaml

serverlocation: 'New York' 
ntp: '123.123.123.125' 

dev2.intranet.com.yaml

serverlocation: 'Accrington' 

이어서을 네 매니페스트에 뭔가있어. 이 같은 :

$servername = hiera('servername') 
$serverlocation = hiera('serverlocation') 
$ntp = hiera('ntp') 

augeas { 'node': 
    context => '/files/root/node', 
    changes => [ 
    "set servername/#text '$servername'", 
    "set serverlocation/#text '$serverlocation'", 
    "set ntp/#text '$ntp'", 
    ], 
} 

당신이 참으로 배열을 만들로