Puppet: 공통 패키지 세트를 사용하지만 예외를 허용하는 방법은 무엇입니까?

Puppet: 공통 패키지 세트를 사용하지만 예외를 허용하는 방법은 무엇입니까?

약 200개 정도의 동일한 Linux VM이 있습니다. 모든 일반적인 구성에 대한 클래스가 있습니다:

class my_packages {

    class { "::ntp":
        servers     => [ "de.pool.ntp.org" ],
    }
    ....
}

site.pp의 각 노드에 포함합니다.

이제 puppetlabs/ntp 패키지를 사용하면 간단한 로컬 시간 서버를 실행하고 싶습니다. my_packages의 서버 항목을 새 시간 서버 VM의 IP 주소로 바꾸면 됩니다. 이제 해당 VM은 이전에 my_packages에서 사용했던 것과 동일한 ntp 클래스 항목을 갖습니다.

node 'mytime' {

#    include my_packages

    class { '::ntp':
        servers => [
            'de.pool.ntp.org',
            'ptbtime1.ptb.de',
            'ptbtime2.ptb.de',
            'ptbtime3.ptb.de',
        ],
    }
    ...
}

그러나 이제 "::ntp" 클래스 항목이 노드에 정의되었으므로 이 경우 "중복 선언" 오류가 발생하므로 새 시간 서버 VM의 노드 항목에 my_packages를 포함할 수 없습니다.

로컬 네임서버를 사용할 때도 비슷한 문제가 발생했습니다. 각 VM에는 로컬 이름 서버를 가리키는 /etc/resolv.conf 파일이 있으므로 my_packages에 해당 파일 리소스가 있습니다. 그러나 로컬 이름 서버 자체에는 다른 /etc/resolv.conf 파일이 있어야 합니다. 이는 설치가 완료될 때까지 자신을 가리킬 수 없으며 설치 중에는 그렇지 않습니다.

공통 리소스 세트를 사용하되 가끔 예외를 허용하는 가장 좋은 방법은 무엇입니까?

답변1

Puppet 3 이상을 사용하는 경우 이에 접근하는 가장 좋은 방법은 hiera를 사용하여 수행하는 것입니다.자동 매개변수 조회. 간단히 말해서 리소스 스타일 구문 대신 포함 구문을 사용하여 클래스를 선언할 수 있습니다. 즉, 클래스에 대해 여러 선언을 가질 수 있습니다. 클래스에 대해 포함 및 리소스 스타일 선언을 혼합할 수 없습니다.

일반적으로 포함 구문을 사용하여 클래스를 선언하는 경우 필수 매개변수가 있으면 실패합니다. 자동 매개변수 조회를 사용하면 Puppet은 hiera를 통해 매개변수 값을 조회하려고 시도합니다.

Hiera는 데이터 소스의 계층 구조를 통해 값을 조회하려고 시도하기 때문에 그렇게 명명되었습니다. hiera.yaml에서 이 계층 구조를 지정할 수 있으며 다양한 사실(호스트 이름, 사용자 정의 사실 등)과 일치하거나 하드 코딩된 파일을 확인할 수 있습니다.

귀하의 경우에 적용할 수 있는 간단한 예는 다음과 같습니다.

클래스 정의:

class my_packages {
  include ::ntp
  ...
}

mytime.yaml:

----
ntp::servers:
  - 'de.pool.ntp.org'
  - 'ptbtime1.ptb.de'
  - 'ptbtime2.ptb.de'
  - 'ptbtime3.ptb.de'

common.yaml:

---
ntp::servers: ['de.pool.ntp.org']

hiera.yaml:

...
:hierarchy:
 - "${::fqdn}"
 - common
...

이 경우 hiera는 ntp::servers 키를 사용하여 ntp 클래스의 서버 매개변수 값을 찾으려고 합니다. 먼저 호스트 이름과 일치하는 yaml 파일에서 해당 키를 찾은 다음 common.yaml에서 찾습니다.

대부분의 경우 common.yaml의 키를 사용하지만 mytime 노드의 경우 계층 구조에서 더 높은 값을 찾고 거기에서 검색을 중지합니다.

다음은완전한 예, 부수적으로 ntp 모듈을 다루고 있습니다.

관련 정보