Puppet-모듈
Puppet에서 모듈은 리소스, 클래스, 파일, 정의 및 템플릿 모음으로 정의 할 수 있습니다. Puppet은 모듈의 손쉬운 재배포를 지원합니다. 이는 지정된 일반 모듈을 작성할 수 있고 간단한 코드 변경없이 여러 번 사용할 수 있으므로 코드 모듈화에 매우 유용합니다. 예를 들어, Puppet에서 / etc / share / puppet에 적절한 모듈을 제공하여 / etc / puppet에서 기본 사이트 구성을 활성화합니다.
모듈 구성
모든 Puppet 모듈에는 코드 구조를 정의하고 명칭을 제어하는 데 도움이되는 두 개의 파티션이 있습니다.
모듈의 검색 경로는 콜론으로 구분 된 디렉토리 목록을 사용하여 구성됩니다. puppetmasterd 또는 masterd, Puppet 마스터 구성 파일의 후반 섹션 modulepath 매개 변수.
[puppetmasterd]
...
modulepath = /var/lib/puppet/modules:/data/puppet/modules
fileserver.conf의 파일 서버 모듈에 대한 액세스 제어 설정, 해당 모듈의 경로 구성은 항상 무시되며 경로를 지정하면 경고가 생성됩니다.
검색 경로는 콜론으로 구분 된 변수 목록이어야하는 PUPPETLAB 환경 변수를 설정하여 런타임에 추가 할 수 있습니다.
모듈 소스
Puppet은 모듈 저장을 위해 다른 위치를 지원합니다. 모든 모듈은 특정 시스템의 다른 파일 시스템에 저장할 수 있습니다. 그러나 모듈이 저장되는 모든 경로는 다음과 같은 구성 변수에 지정되어야합니다.modulepath 일반적으로 Puppet이 모든 모듈 디렉토리를 검색하고 부팅 할 때로드하는 경로 변수입니다.
합리적인 기본 경로는 다음과 같이 구성 할 수 있습니다.
/etc/puppet/modules:/usr/share/puppet:/var/lib/modules.
또는 / etc / puppet 디렉토리는 항상 먼저 검색되는 특수 익명 모듈로 설정 될 수 있습니다.
모듈 이름 지정
Puppet은 특정 모듈의 동일한 이름 지정 표준을 따릅니다. 여기서 모듈 이름은 [-\\ w +] (문자, 단어, 숫자, 밑줄 및 대시)와 일치하고 네임 스페이스 구분 기호 : 또는 /를 포함하지 않는 일반 단어 여야합니다. 모듈 계층 구조와 관련하여 허용 될 수 있지만 새 모듈의 경우 중첩 될 수 없습니다.
모듈 내부 조직
사용자가 Puppet에서 새 모듈을 생성하면 동일한 구조를 따르며 다음 코드와 같이 특정 디렉토리 구조에 배열 된 매니페스트, 분산 파일, 플러그인 및 템플릿을 포함합니다.
MODULE_PATH/
downcased_module_name/
files/
manifests/
init.pp
lib/
puppet/
parser/
functions
provider/
type/
facter/
templates/
README
모듈이 생성 될 때마다 init.pp매니페스트 디렉터리 내의 지정된 수정 위치에있는 매니페스트 파일. 이 매니페스트 파일은 특정 모듈에서 먼저 실행되고 해당 특정 모듈과 관련된 모든 클래스의 컬렉션을 포함하는 기본 파일입니다. 추가.pp파일은 매니페스트 폴더 아래에 직접 추가 할 수 있습니다. 추가 .pp 파일을 추가하는 경우 클래스 이름을 따라야합니다.
모듈을 사용하여 얻을 수있는 주요 기능 중 하나는 코드 공유입니다. 본질적으로 모듈은 독립적이어야합니다. 즉, 어느 곳에서나 모듈을 포함하고 Puppet이 부팅 될 때로드되는 모듈 경로에 놓을 수 있어야합니다. 모듈의 도움으로 Puppet 인프라 코딩에서 모듈화를 얻을 수 있습니다.
예
고정 된 auto.homes 맵을 설치하고 템플릿에서 auto.master를 생성하는 autofs 모듈을 고려하십시오.
class autofs {
package { autofs: ensure => latest }
service { autofs: ensure => running }
file { "/etc/auto.homes":
source => "puppet://$servername/modules/autofs/auto.homes"
}
file { "/etc/auto.master":
content => template("autofs/auto.master.erb")
}
}
파일 시스템에는 다음 파일이 있습니다.
MODULE_PATH/
autofs/
manifests/
init.pp
files/
auto.homes
templates/
auto.master.erb
모듈 조회
Puppet은 미리 정의 된 구조를 따르며 정의 된 구조에 여러 디렉터리와 하위 디렉터리를 포함합니다. 이러한 디렉토리에는 모듈에서 특정 작업을 수행하는 데 필요한 여러 종류의 파일이 포함되어 있습니다. 약간의 비하인드 스토리 마법은 올바른 파일이 올바른 컨텍스트와 연결되어 있는지 확인합니다. 모든 모듈 검색은 콜론으로 구분 된 디렉토리 목록 인 modulepath 내에 있습니다.
파일 서버에 대한 파일 참조의 경우 puppet : //$servername/modules/autofs/auto.homes에 대한 참조가 모듈 경로의 autofs / files / auto.homes 파일로 확인되도록 유사한 참조가 사용됩니다.
명령 줄 클라이언트와 puppet 마스터 모두에서 모듈을 사용할 수 있도록하려면 from puppet : /// path의 URL을 사용할 수 있습니다. 즉, 명시적인 서버 이름이없는 URL입니다. 이러한 URL은Puppet 과 puppetd. Puppet은 로컬 파일 시스템에서 서버리스 URL을 검색합니다.
템플릿 파일은 매니페스트 및 파일과 유사한 방식으로 검색됩니다. 템플릿 ( "autofs / auto.master.erb")이 언급되면 puppetmaster가 먼저 파일을 찾게됩니다. $templatedir/autofs/auto.master.erb 그리고 autofs/templates/auto.master.erb모듈 경로에. Puppet 아래에있는 모든 항목의 Puppet 버전을 사용하여 사용할 수 있습니다. 이를 모듈 자동 로딩이라고합니다. Puppet은 모듈에서 클래스와 정의를 자동로드하려고합니다.