Today key : Puppet, 퍼펫, manifest, autumation, 자동화, class, 클래스, module, 모듈
개인적으로 정리하는 Puppet의 5번째 포스팅입니다.
이번 포스팅은 지난 포스팅과 연장선상에 있는 manifest 모듈 작성과 관련한 내용입니다.
지난 포스팅이 하나의 Environment에 대한 내용이었다면,
이번 포스팅은 다양한 Environment에서 사용 가능한 모듈을 작성하는 내용입니다.
아마도 모듈에 대한 내용은 추가적인 포스팅이 있을 것 같습니다.
혹시 잘못되거나 수정해야 할 부분이 있으면 덧글 부탁드립니다! ^^
Puppet Part 5
Puppet Module 1
•manifest에서 Class를 사용하기 위해서 Class를 정의하기 위해서는 사용하고자 하는 Manifest에서 사용할 수도 있지만,
Class들을 별도의 Manifest 파일로 작성 할 수 있음.
•Class를 별도의 Manifest로 분리하여 Module로써 사용하게 되면 작성된 코드를 재사용하거나, 이력관리,
코드의 유지 보수에 유용함.
•Puppet을 이용하여 관리되는 Node를 정의하는 Manifest와 실제 관리되는 Resource에 대한 Attribute을 선언하는
Manifest로 분리하여 작성하는 편이 유용.
Class 모듈화 예제
•zigispace라는 file 내용을 갖는 blog라는 파일을 생성하는 blog.pp
•Node의 OS 종류를 file 내용으로 갖는 osver라는 파일을 생성하는 osver.pp
•blog.pp와 osver.pp의 class를 가져다가 node에 적용하는 maindev.pp
•blog.pp와 osver.pp는 다른 manifest의 다른 node에서도 동일하게 적용 가능.
Puppet Module 2
•하나의 environments에서 class를 별도의 manifest 모듈로 분리하여 선언할 수도 있지만, 다수의 environment에서
공용으로 사용할 수 있도록 구성할 수 있음.
•모듈로 사용하고자 하는 Manifest를 modules 디렉토리의 하위에 위치
•특정 기능을 하는 모듈 별로, modules 디렉토리 하위에 서브 디렉토리를 생성하고, 서브 디렉토리 하위에 manifests라는
해당 모듈에 들어가는 manifest를 위치할 디렉토리를 만들어서 manifest 파일을 관리함.
•modules 디렉토리에서 manifest 모듈을 관리할 때에는 다음과 같은 규칙으로 관리를 해야 함.
- modules 하위에 module 이름으로 모듈 디렉토리를 생성
- 모듈 디렉토리 하위에는 manifests라는 하위 디렉토리를 생성하고, 이 하위 디렉토리에서 manifest 파일을 생성
- modules 내의 manifest 파일의 class명은 위에서 선언한 모듈디렉토리를 기준으로 지정.
- 이 때, module 이름과 동일한 이름의 class의 경우에는 파일명을 init.pp 이라고 명명해야 함.
- init.pp 이외의 다른 manifest 파일의 클래스는 클래스 선언 시, module 이름을 포함하여 클래스를 선언
* module명::클래스명
* 기존의 프로그래밍에서 namespace를 지정하는 것과 유사함.
- manifest 파일명은 클래스명과 동일하게 지정.
Puppet Module 구성 에제
•zigimod라는 module에 2개의 manifest 파일을 구성하고, 사용하는 예제
•modules 하위 디렉토리의 구성과 각 manifest 파일의 예제 코드
maindev.pp |
init.pp |
node 'agent1' { include zigimod } |
class zigimod { file { '/zigi/mod1': content => "module1\n", } } |
maindev.pp |
mod2.pp |
node 'agent1' { include zigimod::mod2 } |
class zigimod::mod2 { file { '/zigi/mod2': content => "module2\n", } } |
Puppet Module 3
•기본 Puppet 속성의 ModulePath 속성 이외에 Module 디렉토리를 사용하고자 할 경우에는 ModulePath에 추가해야 함.
•modules 디렉토리에는 모듈 형태로 사용하고자 하는 manifest 뿐만 아니라 file, plug-in, template 등도 추가하여 사용.
•module에서 사용하는 자원들의 종류에 따라서 개별 디렉토리 사용.
ex> manifest는 manifests 디렉토리, file은 files 디렉토리 등..