본문 바로가기

DevOps/Automation

Puppet Part 4

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,

   }