Today key : Puppet, 퍼펫, manifest, autumation, 자동화, class, 클래스, 상속, inherits, 매개변수
개인적으로 정리하는 Puppet의 4번째 포스팅입니다.
이번 포스팅은 Puppet의 Manifest를 모듈화 하여 작성하기 위한 방법인 class 작성 방법과 예제입니다.
기존의 OOP에서처럼, 모듈화하고, 코드의 재사용 등 기존의 OOP의 class와 동일한 쓰임새로 사용된다고 보면 될 것 같습니다.
혹시 잘못되거나 수정해야 할 부분이 있으면 덧글 부탁드립니다! ^^
Puppet Part 4
Puppet Class
•manifest에 자주 사용되는 내용들은 별도의 Class로 구성하여 사용 가능.
•별도의 Class로 구성하여 서로 다른 Environment에서 동일한 manifest를 작성하지 않아도 됨.
Puppet Class 정의
•class 키워드 사용
•class명 지정
•class의 매개변수 지정 가능.
- 매개변수 지정방법 : ( Data_Type $변수 = Default_Value)
* Datatype 선언은 필수는 아니면, Default로는 any
•다른 class를 상속하는 경우에 Inherits 와 함께 상속받을 클래스 명 입력
•하나 이상의 Resource에 대한 Puppet Code 작성
Class 사용법
•동일한 Manifest에 작성하거나, 혹은 별개의 Manifest에 작성
•사용하고자 하는 manifest에서 include class명 으로 사용 가능
Dev.pp |
mainDev.pp |
class osver { file { '/zigi/osversion': content => $osversion, } |
node 'agent1' { include osver } |
Class 작성 예제
Class 작성 예제1 |
class blog { file { '/zigi/blog': content => 'zigispace.net', } file {'/zigi/nickname': content => 'no-name', } } |
Class 작성 예제2 - 상속 |
class Info inherits Blog { file ['/zigi/nickname']{ content => 'ZIGI', } file { '/zigi/mail': content => 'zigi@zigispace.net', } } |
※ Class를 상속 받는 경우에는 상속하는 Class의 동일한 Resource의 Title이 중복이 되는 경우에는
해당 값을 Override 할 수 있음.
Class 작성 예제2-1 - 상속 (오류) |
class Info inherits Blog { file {'/zigi/nickname': content => 'ZIGI', } file { '/zigi/mail': content => 'zigi@zigispace.net', } } |
Error : Could not retrieve catalog from remote server: Error 400 on SERVER: Evaluation Error: Error while evaluating a Resource Statement, Duplicate declaration: File[/zigi/blog] is already declared in file /etc/puppetlabs/code/environments/dev/manifests/ss.pp:2; cannot redeclare at /etc/puppetlabs/code/environments/dev/manifests/ss.pp:12 at /etc/puppetlabs/code/environments/dev/manifests/ss.pp:12:3 on node agent1.puppet.local |
※ 단, 상속 시의 Overrding하는 Title을 기존 선언하는 방식과 동일하게 선언하게 되면, 중복선언으로 에러가 발생하게 됨.
※ 관련 Manifest 작성은 추후 포스팅에서 또 다뤄질 예정입니다.
Class 작성 예제3 - 상속 2 |
class apache { service {'apache': require => Package['httpd'], } }
class apache::ssl inherits apache { Service['apache'] { require +> [ File['apache.pem'], File['httpd.conf'] ], } } |
※ Class를 상속 받는 경우에는 상속하는 Class의 동일한 Resource의 Title의 특정 속성 값을
추가하고자 할 때에는 Attribute => value 대신에 Attribute +> value로 표기하면 된다. (=> → +>)
Class 작성 예제4 - 매개변수 사용 |
class nginx (String $ver = 'latest') { package { 'nginx': ensure => $ver, } |