puppet 변수, 데이터 형식 및 클래스 (03)

puppet(2)
Metaparamters:
여러 개의 서로 간 에 선후 순서 가 존재 하 는 자원 은 '- >' 을 사용 하여 순서 체인 의 형식 으로 정의 할 수 있다.
Package['nginx'] -> File['/etc/nginx/conf.d/default.conf'] -> Service['nginx']

여러 개의 서로 간 에 선후 순서 가 존재 하 는 자원 은 '~ >' 을 사용 하여 알림 체인 의 형식 으로 정의 할 수 있 습 니 다.
Package['nginx'] ~> File['/etc/nginx/conf.d/default.conf'] ~> Service['nginx']
package{'nginx':
ensure=> installed,
provider => rpm,
source=> '/tmp/nginx-1.6.2-1.el6.ngx.x86_64.rpm',
} ->
file {'/etc/nginx/conf.d/default.conf':
ensure=> file,
source=> '/tmp/default.conf',
} ~>
service{'nginx':
ensure=> running,
enable=> true,
require=> Package['nginx'],
restart=> '/etc/rc.d/init.d/nginx reload',
}

puppet 변수 및 변수 역할 영역:
변수 이름 은 모두 $로 시작 해 야 합 니 다. 할당 기 호 는 = 입 니 다.
정규 표현 식 형식 이 아 닌 데 이 터 는 변수 이름 에 직접 할당 할 수 있 습 니 다.
데이터 형식:
불 형: true 및 false;
undef: 설명 되 지 않 은 변수의 값 형식;
문자 형: 비구 조 화 된 텍스트 문자열;인용 은 있 으 나 마 나, 작은 따옴표 는 강 한 인용 이 고, 작은 따옴표 는 약 한 인용 이다.
수치 형: 정수 또는 부동 소수점;기본 값 은 문자 형 이 고 특정한 문맥 에서 만 수치 로 여 겨 집 니 다.
배열: 괄호 [] 에서 쉼표 로 구 분 된 item 목록, 예 를 들 어 [item 1, item 2,...], item 은 임의로 사용 할 수 있 는 데이터 형식 으로 배열 과 hash 등 을 포함 할 수 있 습 니 다.색인 은 0 부터 계산 하고 마이너스 도 할 수 있다.예 를 들 어 [Package ['nginx'], File ['nginx. conf'], File ['default. conf'],];
hash: {} 에서 쉼표 로 구 분 된 "key = > value" 목록 을 hash 형식 데이터 로 정의 합 니 다.그 중의 key 는 문자 형식 이 고 value 는 puppet 가 지원 하 는 임의의 데이터 형식 입 니 다.인용 할 때 색인 은 key 입 니 다.
정규 표현 식:
문법 구조:
/(?:)/
/(?-:)/

OPTION:
i: 문자 대소 문자 무시
m: 점 호 를 줄 바 꿈 문자 로 사용 합 니 다.
x: 모드 의 공백 문자 와 설명 무시
상용 용법: (? i - mx: PATTERN)
$webpackage=$operatingsystem? {
       /(?i-mx:ubuntu|debian)/ => 'apache2',
       /(?i-mx:fedora|redhat|centos)/  => 'httpd',
}

puppet 표현 식:
비교 연산 자: =,! =, > =, = ~,! ~,in
논리 연산 자: and, or,!
산술 연산 자: +, -, *, /, >, < <
역할 영역:
즉, 변수 가 적용 되 는 코드 범위 입 니 다.
puppet 에서 scope 는 변수 와 자원 의 기본 속성 을 제한 하 는 역할 범 위 를 사용 할 수 있 으 나 자원 이름과 자원 참조 의 유효 범 위 를 제한 할 수 없습니다.
역할 영역의 분류:
top scope: 최상 위 역할 영역, 유효 범 위 는 전역 입 니 다.
node scope: 노드 역할 영역, 유효 범 위 는 단일 노드 입 니 다.
class scope:
parent scope
child scope
현재 역할 영역 이 아 닌 접근 가능 한 변 수 를 참조 하려 면 FQN 형식 으로 진행 해 야 합 니 다.
$::c1::c2::webpackage
puppet 에서 사용 할 수 있 는 변수의 종류:
사용자 정의 변수: $webpackage
facter 변수: "facter - p" 명령 실행 결과 에 나타 난 변 수 는 직접 참조 할 수 있 습 니 다.
내 장 된 변수:
클 라 이언 트 내장:
$clientcert
$clientversion
서버 엔 드 내장:
$servername
$serverip
$serverversion
$module_name
변수의 추가 할당: + =
$users = ['user1','user2',]
$users += ['user3',]

메모: 추가 할당 을 지원 하 는 데이터 형식:
문자열: 문자열 연결
배열: 배열 통합
hash: hash 통합
puppet 의 조건 판단:
조건 부: if, case, selector, unless
(1) if 문장
if CONDITION {
...
}
if CONDITION {
...
} else {
...
}
if CONDITION {
...
} elsif CONDITION {
...
}
...
else {
...
}

사용 가능 한 CONDITION:
변량
표현 식
반환 값 이 있 는 함수
if $operatingsystem =~ /^(?i-mx:(Ubuntu|RedHat))/ {
       notice("Welcome to $1 linux distribution.")
} else {
       notice("Welcome to unkown world.")
}

(2) case
문법 구조:
case CONTROL_EXPRESSION {
case1: {}
case2, case3: {}
default: {}
}

CONTROL_EXPRESSION:
변수, 표현 식, 반환 값 이 있 는 함수
각 케이스 의 사용 가능 한 데이터 형식:
문자열 (참조), 변수, 단일 반환 값 이 있 는 함수, 정규 표현 식 모드 또는 default; 
case $operatingsystem {
'CentOS','Redhat','Fedora': { notice("Welcome to RedHat OS Family.") }
/^(i-mx:(ubuntu|debian))/: { notice("Welcome to $1 Linux distribution.") }
default: { notice("Alien.") }

(3) selector
케이스 와 유사 하지만 케이스 가 특정한 지점 에 일치 한 후에 해당 하 는 코드 세그먼트 를 실행 하 는 것 과 달리 selector 는 특정한 지점 에 일치 한 후에 하나의 값 을 되 돌려 줍 니 다.
문법 구조:
selector CONTROL_VARIABLES ? {
case1 => value1,
case2=> value2,
...
default => valueN,
}

CONTROL_VARIABLES: 변수 나 반환 값 이 있 는 함수;
각 케이스 의 사용 가능 한 데이터 형식:
문자열 (참조), 변수, 단일 반환 값 이 있 는 함수, 정규 표현 식 모드 또는 default; 
메모: selector 의 case 는 목록 을 사용 할 수 없습니다.
각 case 의 value 사용 가능 한 데이터 형식:
hash 를 제외 한 직접 값, 변수, 반환 값 을 호출 할 수 있 는 함수 또는 다른 selector;
puppet 의 class:
공공 목적 에 사용 되 는 자원, 즉 이름 을 딴 코드 블록;생 성 후 puppet 전역 에서 호출 할 수 있 습 니 다.클래스 는 계승 할 수 있다.
문법 형식:
class name {
... puppet code ...
}

정 의 된 클래스 는 호출 (성명) 되 어야 만 실 행 됩 니 다.
class nginxsrv {
   package{'nginx':
ensure=> installed,
provider => rpm,
source=> '/tmp/nginx-1.6.2-1.el6.ngx.x86_64.rpm',
   } ->
   file {'/etc/nginx/conf.d/default.conf':
ensure=> file,
source=> '/tmp/default.conf',
   } ~>
   service{'nginx':
ensure=> running,
enable=> true,
require=> Package['nginx'],
restart=> '/etc/rc.d/init.d/nginx reload',
   } 
}
include nginxsrv

메모: (1) 클래스 이름 은 소문 자, 숫자, 밑줄 을 포함 할 수 있 지만 소문 자로 만 시작 할 수 있 습 니 다.
    (2) 클래스 는 새로운 변수 역할 영역 을 도입 합 니 다.
클래스 설명 방법:
(1) include 키 워드 를 사용 합 니 다.
include base::subclass
include class1, class2, ...
(2)   require   ;
(3)            ;
(a) class {'class_name':}
(b) class {'class_name':
argu1=> value1,
argu2=> value2,
...
}

클래스 계승:
주요 목 표 는 기 존 클래스 를 계승 하고 그 기초 위 에 추가 puppet 코드 를 추가 하 는 것 이다.
자원 속성 을 덮어 쓰 고 자원 속성 값 을 추가 할 수 있 습 니 다.
class base {
...puppet code...
}
class base::subclass_name inherits base {
...puppet code...
}

주의, 계승 필드 중:
(1) 자 류 를 성명 할 때 그 부 류 는 자동 으로 먼저 성명 을 한다.
(2) 기본 클래스 는 하위 클래스 의 부모 역할 영역 이 되 고 클래스 정의 변수 와 속성 을 바탕 으로 하 는 기본 값 은 하위 클래스 에 의 해 복 사 됩 니 다.
(3) 하위 클래스 는 기본 클래스 와 같은 자원 의 같은 속성 값 을 덮어 씁 니 다.
class nginx {
       package{'nginx':
               ensure  => present,
               provider => rpm,
               source  => '/tmp/nginx-1.6.2-1.el6.ngx.x86_64.rpm',
       }
}
class nginx::websrv inherits nginx {
       file {'/etc/nginx/conf.d/default.conf':
               ensure  => file,
               source  => '/tmp/default.conf',
               require => Package['nginx'],
       }
       service {'nginx':
               ensure  => running,
               enable  => true,
               subscribe => File['/etc/nginx/conf.d/default.conf'],
       }
}
include nginx::websrv

메모: 하위 클래스 는 부모 클래스 자원 의 속성 값 을 덮어 쓸 수 있 습 니 다. 부모 클래스 에서 정 의 된 자원 을 참조 하고 특정한 속성 에 새로운 값 을 정의 합 니 다. 하위 클래스 에 서 는 다음 과 같은 형식 을 사용 합 니 다.
Type['title'] {
attribute1 => value1,
attribute2=> value2,
...
}

예시:
class nginx {
       package{'nginx':
               ensure  => present,
               provider => rpm,
               source  => '/tmp/nginx-1.6.2-1.el6.ngx.x86_64.rpm',
       }
}
class nginx::websrv inherits nginx {
       Package['nginx'] {
               provider => yum,
       }
       file {'/etc/nginx/conf.d/default.conf':
               ensure  => file,
               source  => '/tmp/default.conf',
               require => Package['nginx'],
       }
       service {'nginx':
               ensure  => running,
               enable  => true,
               subscribe => File['/etc/nginx/conf.d/default.conf'],
       }
}
include nginx::websrv

메모: 하위 클래스 는 부모 클래스 자원 의 속성 값 을 덮어 쓸 수 있 습 니 다. 부모 클래스 에서 정 의 된 자원 을 참조 하고 특정한 속성 에 새로운 값 을 정의 합 니 다. 하위 클래스 에 서 는 다음 과 같은 형식 을 사용 합 니 다.
Type['title'] {
attribute1 => value1,
attribute2=> value2,
...
}

예시:
class nginx {
       package{'nginx':
               ensure  => present,
               provider => rpm,
               source  => '/tmp/nginx-1.6.2-1.el6.ngx.x86_64.rpm',
       }
}
class nginx::websrv inherits nginx {
       Package['nginx'] {
               provider => yum,
       }
       file {'/etc/nginx/conf.d/default.conf':
               ensure  => file,
               source  => '/tmp/default.conf',
               require => Package['nginx'],
       }
       service {'nginx':
               ensure  => running,
               enable  => true,
               subscribe => File['/etc/nginx/conf.d/default.conf'],
       }
}
include nginx::websrv

메모: 하위 클래스 에서 부모 클래스 의 자원 을 참조 하여 특정한 속성 에 "+ >" 를 사용 하여 새 값 을 추가 할 수 있 습 니 다.
class nginx {
       package{'nginx':
               ensure  => present,
               provider => rpm,
               source  => '/tmp/nginx-1.6.2-1.el6.ngx.x86_64.rpm',
       }
       file {'/etc/nginx/conf.d/default.conf':
               ensure  => file,
               source  => '/tmp/default.conf',
               require => Package['nginx'],
       }
       service {'nginx':
               ensure  => running,
               enable  => true,
               subscribe => File['/etc/nginx/conf.d/default.conf'],
       }
}
class nginx::websrv inherits nginx {
       file {'/etc/nginx/nginx.conf':
               ensure  => file,
               source  => '/tmp/nginx.conf',
               require => Package['nginx'],
       }
       Service['nginx'] {
               #subscribe => [File['/etc/nginx/conf.d/default.conf'],File['/etc/nginx/nginx.conf']],
               subscribe +> File['/etc/nginx/nginx.conf'],
       }
}
include nginx::websrv

매개 변수 클래스 참조:
class class_name($argu1='value1',...) {
...puppet code...
}
class mysql($conf='/etc/my.cnf') {
       package{'mysql-server':
               ensure  => present,
       }
       file{"$conf":
               source  => '/tmp/my.cnf',
               ensure  => file,
       }
}
class {'mysql':
       conf    => '/etc/mysql/my.cnf',
}

puppet 의 template:
템 플 릿: ERB (Embedded RuBy) 템 플 릿 언어 를 기반 으로 정적 파일 에서 변수 등 프로 그래 밍 요 소 를 사용 하여 다양한 환경 에 적용 되 는 텍스트 파일 을 생 성 합 니 다.
ERB: 텍스트 파일 에 ruby 코드 를 삽입 하 는 데 사 용 됩 니 다. 원래 의 텍스트 정 보 는 변경 되 지 않 고 ruby 코드 는 실 행 됩 니 다. 또한 실행 결 과 는 ruby 코드 가 있 는 곳 에 새로운 내용 으로 대 체 됩 니 다.
: 표현 식 값 으로 바 꾸 기;
: 그 중의 코드 만 실행 하고 어떠한 교체 도 실행 하지 않 습 니 다.
: 주석 정보;
: 전의 부, 각각 입력 에 사용;
: 공백 문자 무시 하기;
: 빈 줄 무시 하기;
템 플 릿 에서 puppet 의 임의의 변 수 를 호출 할 수 있 지만 변수 이름 은 @ 으로 시작 해 야 합 니 다.
반복:

Some Text with 

메모: 템 플 릿 언어 에서 변수 산술 연산 방법:

좋은 웹페이지 즐겨찾기