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': |
Manifest 실행)
ubuntu@ip-172-31-19-29:~/Puppet$ puppet apply site.pp |
결과 확인)
ubuntu@ip-172-31-19-29:~/Puppet$ cat /tmp/zigi |
Puppet 모듈화 하기
● 모든 내용을 하나의 Manifest로 작성해도 상관없지만, 관리 및 유지보수 측면에서 역할에 따라서 Manifest를 위와 같이
구분해서 사용하는 것이 좋다
Class (init.pp)
- 모든 Element(files, settings, moduels, scripts 등)를 포함하여 선언해 놓은 Resource의 집합
class zigimodule { |
Node (ziginode.pp)
- Class, Resource, Variabled 집합을 특정 agent에 적용하도록 만든 Manifest
node 'ZIGI'{ |
Main Manifests (site.pp)
- 주 실행 Manifest.
import 'ziginode.pp' |
디렉토리 구조
- 위에 열거한 파일에 대한 디렉토리 구조는 아래와 같다.
- Class로 만들어진 init.pp는 modules 디렉토리 내부의 class명과 동일한 디렉토리 안에 manifests 디렉토리 내부에 위치한다.
※ module에 대한 상세 디렉토리 구조는 추후에 다시 다룰 예정입니다.
모듈화 Puppet 실행 및 결과
- 모듈화된 manifest를 실행하고 난, 결과내용과 결과값이다.