'module'에 해당되는 글 2건

  1. 2016.08.20 Puppet Part 5
  2. 2014.12.20 Automation for Networker[3] - Puppet : Part 2
DevOps/Automation2016.08.20 16:28

 

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 디렉토리 ..

Posted by 네떡지기
DevOps/Automation2014.12.20 11:58

 


Puppet 2번째 입니다. ^^

Automation for Networker 시리즈의 3번쨰 포스팅이기도 합니다.

이번 포스팅에서는 Puppet를 설치해보고,

아주 간단하게 구조 확인 및 예제를 실행해보고, 작은 모듈로도 구성해 봅니다.


Puppet 설치하기

 

  1. 파일 Download : wget http://apt.puppetlabs.com/puppetlabs-release-precise.deb

 

 

  2. APT 설정 업데이트 : sudo apt-get update

 

  3. Install : sudo apt-get -y install puppet

                    ※ sudo yum install puppet   [ Yum 패키지 이용 시 ]

                         http://downloads.puppetlabs.com/windows  [ Windows의 설치패키지 이용 (MSI파일) ]

 

 

  4. Version 확인 : puppet --version

 


 

Manifest

    - Puppet 언어로 작성된 파일로, .pp 확장자를 가진다.

    - Resources와 Class를 선언하고, Variable, Function 등에 대한 설정을 한다.

    

 

Manifest 기본 구성 형식

  

Node 'Node_Name'

Resource { NAME:

   ATTRIBUTE => VALUE,

   ...
}

 

○ Node

    다수의 Puppet Agent 적용 시에, 각 Node를 구분하기 위한 Keyword이며 이는 Device의 Hostname을 Node 뒤에 써주면 해당

    Hostname에을 가진 Device에 대해서만 해당 Attribute가 적용된다.

 

○ Resource

     Puppet이 관리하는 Configuration의 구성요소, File, Service, Package, User등의 Type과 Attribute를 갖는다.

 

○ NAME

   Resource에서의  각 Instance와 구분용도로 쓰이는 이름

   Ex) File  : File의 절대 경로/파일명

         Package : 패키지

 

○ Attribute

    해당 Resource의 설정되어야 하는 속성   

    Ex) File : Content (File 내용 : overwirte), owner, group , mode

           Package : ensure  -  installed  : 미 설치 시 설치

                                            -  absent : 설치 시 삭제

                                            -  latest : 최신 버전 업데이트

                                            -  특정 버전 ID : 특정 버전으로 동기화

 

○ VALUE

    특정 Resource의 Attribute에 적용되는 내용, 상태 등을  나타내는 값.

   

 

 


Manifest  적용   

 

~$ puppet apply site.pp

 


Manifest 예제 보기

 - 첫 번째 Puppet의 예제는, 특정 디렉토리에 지정한 내용을 가지는 file을 생성합니다.

 - /tmp/zigi 라는 디렉토리에 'ZIGI Puppet Ex1'이라는 내용(content)을 가지는 파일을 생성하게 되는 데,

   만약 기존에 파일이 존재할 경우에는 지정한 내용(content)로 다시 쓰여지게(overwrite) 됩니다.

 

Manifest 코드)

file { '/tmp/zigi':
        content => "ZIGI Puppet Ex1\n",
}

 

Manifest 실행)

ubuntu@ip-172-31-19-29:~/Puppet$ puppet apply site.pp
Notice: Compiled catalog for ip-172-31-19-29.ap-northeast-1.compute.internal in environment production in 0.04 seconds
Notice: /Stage[main]/Main/File[/tmp/zigi]/content: content changed '{md5}e3d06af3118fbd5c185ace31184bce1d' to '{md5}bfe6ff1231792c9cb81b6a5ed9d2be75'
Notice: Finished catalog run in 0.03 seconds

 

결과 확인)

ubuntu@ip-172-31-19-29:~/Puppet$ cat /tmp/zigi
ZIGI Puppet Ex1

 

 


Puppet 모듈화 하기

 

● 모든 내용을 하나의 Manifest로 작성해도 상관없지만, 관리 및 유지보수 측면에서 역할에 따라서 Manifest를 위와 같이

    구분해서 사용하는 것이 좋다

 

Class (init.pp)

  - 모든 Element(files, settings, moduels, scripts 등)를 포함하여 선언해 놓은 Resource의 집합

 

class zigimodule {
   file {'/tmp/zigimodule':
      content => "ZIGI Module Test\n",
   }
}

 

 

Node (ziginode.pp)

  -  Class, Resource, Variabled 집합을  특정 agent에 적용하도록 만든 Manifest  

 

node 'ZIGI'{
   include zigimodule
}

 

 

Main Manifests  (site.pp)

  - 주 실행 Manifest. 

 

import 'ziginode.pp'

 

 

디렉토리 구조 

  - 위에 열거한 파일에 대한 디렉토리 구조는 아래와 같다.

  - Class로 만들어진 init.pp는 modules 디렉토리 내부의 class명과 동일한 디렉토리 안에 manifests 디렉토리 내부에 위치한다.

     ※ module에 대한 상세 디렉토리 구조는 추후에 다시 다룰 예정입니다.

 

 

 

모듈화 Puppet 실행 및 결과

   - 모듈화된 manifest를 실행하고 난, 결과내용과 결과값이다.

 

 

 

 

Posted by 네떡지기

티스토리 툴바