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': ensure => running, |