'Resource'에 해당되는 글 2건

  1. 2016.08.09 Puppet Part2
  2. 2014.12.20 Automation for Networker[3] - Puppet : Part 2
DevOps/Automation2016.08.09 17:01

Today key : Puppet, 퍼펫, manifest, autumation, 자동화, ruby, resource, title, attribute, value, 명세서

 

지난 번에 이은, Puppet의 2번째 포스팅입니다.

사실 이번 포스팅은 예전에 정리했던 Automation for Networker 주제의 포스팅을 다시 재가공하였습니다.

기존에 포스팅한 것보다는 조금 내용이 변경 혹은 추가 되었습니다. 

앞으로 몇 번에 걸쳐서 추가 포스팅이 되지 않을까? 싶습니다.

단지, 포스팅 전에 테스트와 무작정 정리한 걸 다시 포스팅 용으로 작성 하는 데 시간이 걸려서.

언제 올라올지는 모르겠지만.. 멀지 않은 시일 내에 또 올리도록 하겠습니다.

그리고 혹시 잘못되거나 수정해야 할 부분이 있으면 덧글 부탁드립니다! ^^

 


 

Puppet Part 2 .

 

 

Manifest

    - Puppet languatge 파일로, '.pp' 확장자를 가진다.

    - Target 시스템에 적용되어야 하는 Resource Value 지정하는 일종의 명세서 같은 역할.

    - UTF8 인코딩 사용

    

    

Manifest 기본 구성 형식

  

Node 'Node_Name'

Resource { 'TITLE':

   ATTRIBUTE => VALUE,

   ...

}

 

Node

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

   - Hostname에을 가진 Device에 대해서만 해당 Attribute가 적용

 

Resource

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

   - Defined Type Custom resource type 있음.

    

 

TITLE

  - 하나의 Resource Type에서 유일한 이름으로 사용 되어야 .

  - 중복된 TITLE 사용 시에는 Manifest 컴파일 시의 에러 발생

  - 서로 다른 Resource 간의 TITLE 중복은 가능.  (Ex. package 'ntp', service 'ntp'

  - Resource Type 따라서 Target System 특정 Resouce 뜻하기도 하며(이러한 경우의 'namevar' 속성이라고 ),

    단순히, '이름' 뜻하기도 .

  - namevar 경우에는 하나의 resource type 하나의 값을 뜻하는 경우도 있지만, 어떤 경우의 namevar 해당 이름만으로는

    명확하게 없는 경우가 있다. 예를 들어서, service mysql Target System 내에 설치된 mysql 서비스로 명확하지만,

    package mysql mysql 받아오는 방법에 따라서 다를 있다. (ex. Yum, gem .. )

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

        Package / Service : 실제 패키지나 서비스

 

Attribute

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

    - manifest에서 target system 적용하고자 하는 속성 값을 선언
    -
소문자로 쓰여지고, " " 사용하지 않음.

 

VALUE

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

 

 

지정 가능한 Resource Types

 

 

 

 

Resource 

 

File Resource

  path : 파일에 대한 경로 지정. 만약 속성을 선언하지 않으면 default Title path 값으로 갖게 .

  ensure : 지정된 파일의 생성 , 어떤 종류인지 지정. (present, absent, file, directory, link)

  contents : 실제 파일의 내용. 속성은 source  / target 속성과 함께 사용할 없음.

  source : 복사할 파일의 Source 지정. 속성은 contents / target 속성과 함께 없음.

                   puppet, file, http 지정 가능.  Ex) 'puppet:///modules/nfs/conf'

  target : link 생성 , 사용. Symlinks type 지원. (link 생성 시의 원본 경로)

                 contents, source 속성과 함께 사용 없음.

 

file { '/temp/blog':

    content => 'http://zigispace.net',

}

 

file { '/etc/inetd.conf':

  ensure => '/etc/inet/inetd.conf',

}

 

file { '/etc/inetd.conf':

  ensure => link,

  target => '/etc/inet/inetd.conf',

}

 

 

package Resource

  provider: 동일한 패키지가 다양한 Source에서 관리되는 경우에 받아올 곳을 지정.

                     apt, dpkg, gem, rpm, pip, yum windows, zypper

 name : 패키지 . 만약 속성을 선언하지 않으면 default Title 패키지 명이 .

   ensure : 패키지의 상태. (Default : installed) . 특정 버전 지정 가능

                   present(installed), absent, purged, held, latest

  install_options  : 설치 시의 추가적인 옵션 지정. 옵션은 package-specific .

  source : 패키지를 가져오게 위치. Provider에서 자동으로 패키지를 다운 받을 없는 경우에 사용.

                  예를 들어서, yum이나 apt provider 지정할 경우에는 속성은 무시.

 

 

package { 'nginxrpm':

   ensure => installed,

   provider => 'rpm',

   source => 'http://nginx.org/packages/centos/7/noarch/RPMS/nginx-releas-centos-7-0.el7.ngx.noarch.rpm',

}

 

package { 'nginx':

   ensure => installed,

   require => Package['nginxrpm'],

 }

 

package { 'mysql':

  ensure          => installed,

  source          => 'N:/packages/mysql-5.5.16-winx64.msi',

  install_options => [ '/S', { 'INSTALLDIR' => 'C:\mysql-5.5' } ],

}

 

 

 

service Resource

  name : service . 만약 속성을 선언하지 않으면 default Title service명이 .

  ensure :  servicer running 상태인지 아닌지 지정.

                    running(true), stopped(false)

  enable : 시스템이 boot 시에 service 활성화 것인지 지정.

                   true, false, manual, mask

  path :  init scripts 대한 경로

 

 

 

service { 'httpd':

  ensure => running,

  enable => true,

}

service { 'sshd':

  ensure    => running,

  enable    => true,

  subscribe => File['/etc/ssh/sshd_config'],

}

service { 'ntp':
  name      => ntpd

  ensure    => running,
  enable    => true,
}

 

 

 

 

 

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 네떡지기

티스토리 툴바