Puppet 코드 작성 사양(19)
8136 단어 코드쓰기 규범PuppetAnsible/Puppet
ppet의 에이전트에 대한 설정 목록은 주로 manfests와modules 두 디렉터리에 집중되고 manfests와modules 디렉터리에서 목록 코드 파일의 기호 간격, 축소와 공백의 사용 규범에 집중된다.
*.pp 파일
두 칸의 소프트 라벨을 사용하는 것을 권장합니다.
탭을 사용하는 것을 추천하지 않습니다.
끝에는 공백을 포함하지 마십시오.
한 줄의 폭이 80자를 넘지 않도록 권장합니다.
리소스의 속성 에서 => 기호를 사용하여 속성 정렬을 수행합니다.
메모
puppet의 주석은 현재 두 가지 스타일을 지원합니다.
셸 스크립트 스타일"#"
#this is test
package {"httpd":
ensure=> present,
}
다른 C 언어 스타일은/*로 시작하고 */로 끝나는 여러 줄 주석입니다.//주석은 지원되지 않습니다.
/*
this is test
*/
package {"httpd":
ensure=> present,
}
변수 사양:
변수에는 문자 [a-z] [A-Z], 숫자 [0-9] 및 밑줄()만 포함됩니다.
정확:
$conten_test=lisi
오류:
$conten-test=lisi
',', {} 등 기호는 변수를 포함하지 않는 문자열에서 모두 '' 를 사용하여 인용해야 한다.문자열에 변수가 포함되어 있으면 ""를 통해 참조합니다.만약 문자열에 변수와 문자열이 있다면 {}을 통해 인용할 수 있습니다.
정확:
/etc/${file}.conf
"${::operatingssytem} is not supported by ${module_name}"
추천하지 않음: (이렇게 써도 정확하고 공식적으로 추천하지 않음)
/etc/${file}.conf
"$::operatingssytem is not supported by $module_name"
변수가 참조될 때 ""을(를) 추가하지 않습니다.(제가 전에 코드를 다 넣었는데 공식적으로 추천하지 않습니다.)
정확:
mode => $mode
권장하지 않음:
mode => "$mode"
mode => "${mode}"
리소스 사양:
리소스의 제목은 공백과 하이픈을 포함하지 않고 단일 따옴표 '또는 더블 따옴표' 로 지정해야 합니다.
자원 제목:
권장 사항:
package {"httpd":
ensure=> present,
}
package {'httpd':
ensure=> present,
}
권장하지 않음:
package {httpd:
ensure=> present,
}
리소스 기호 정렬:
권장 사항:
package {"httpd":
ensure=> present,
owner=> root,
}
권장하지 않음:
package {"httpd":
ensure=> present,
owner=> root,
}
리소스 속성 순서:
권장 사항:
package {"httpd":
ensure=> present,#ensure .
owner=> root,
}
권장하지 않음:
package {"httpd":
owner=> root,
ensure=> present,
}
리소스 관계:
자원은 자원 유형을 통해 나누는 것이 아니라 논리적 관계로 한 조로 나누어져야 한다.
권장 사항:
class nginx {
package {"nginx":
ensure => present,
}
service {"nginx":
ensure => true,
enable => true,
require => Package['nginx'], #
}
}
class httpd {
package {"httpd":
ensure => present,
}
service {"httpd":
ensure => true,
enable => true,
require => Package['httpd'], #
}
}
권장하지 않음:
class package {
package {"nginx":
ensure => present,
}
package {"httpd":
ensure => present,
}
}
class service {
service {"nginx":
ensure => true,
enable => true,
require => Package['nginx'], #
}
service {"httpd":
ensure => true,
enable => true,
require => Package['httpd'], #
}
}
소프트 연결
file 자원을 통해 소프트 연결을 만들 때, ensure=>link를 설정하고 target 속성을 통해 대상 파일을 지정해야 합니다.
file {"/tmp/3.pp":# .( )
ensure=> link,
target=> '/root/3.pp',# .
}
주석:/root/3.pp 파일입니다./tmp에 소프트 연결하고 싶습니다.
올바른 쓰기:
[root@sh-web1 ~]# cat link.pp
file {"/tmp/3.pp":
ensure=> link,
target=> '/root/3.pp',
}
잘못된 쓰기:
file {"/tmp/3.pp":
target=> '/root/3.pp',
}
agent 로컬 응용*.pp 파일:
[root@sh-web1 ~]# puppet apply link.pp
Notice: Compiled catalog for sh-web1.localdomain in environment production in 0.07 seconds
Notice: /Stage[main]/Main/File[/tmp/3.pp]/ensure: created
Notice: Finished catalog run in 0.02 seconds
[root@sh-web1 ~]# ls /tmp/
3.pp yum_save_tx-2017-09-22-17-52B5ZM81.yumtx yum_save_tx-2017-09-26-02-00w5fKzh.yumtx
text.txt yum_save_tx-2017-09-22-17-52b9CPEA.yumtx yum_save_tx-2017-09-26-18-03lhfm3k.yumtx
소프트 연결 파일의 내용을 보려면 다음과 같이 하십시오.
[root@sh-web1 ~]# cat /tmp/3.pp
$package = ['php','php-devel']
class nginx {
$packages += ['php-pecl-geoip']
package {[packages]:
ensure=> present,
}
}
class apache {
$packages += ['httpd']
package {[packages]:
ensure => present,
}
}
include nginx
# 소스 파일의 컨텐트를 보려면 다음과 같이 하십시오.
[root@sh-web1 ~]# cat 3.pp
$package = ['php','php-devel']
class nginx {
$packages += ['php-pecl-geoip']
package {[packages]:
ensure=> present,
}
}
class apache {
$packages += ['httpd']
package {[packages]:
ensure => present,
}
}
include nginx
파일 모드:
file 리소스를 통해 파일 권한을 설정할 때는 다음 사항을 고려해야 합니다.
1. 파일 권한은 3자리가 아니라 4자리 숫자로 구성되어야 한다.(전 글은 모두 세 분, 홈페이지 추천 네 분)
2. 권한 숫자는''로 만들어야 한다.(이전 문장은 인용이 좀 없었다)
권장 사항:
file {"/tmp/test.txt":
ensure =>file,
mode =>'0644',
}
권장하지 않음:
file {"/tmp/test.txt":
ensure =>file,
mode =>644,
}
if 조건문 사양
보통 selector 문장과 자원을 혼용하는 것을 권장하지 않습니다.
권장 쓰기 방법:
$file_mode= $::operatingssytem ? {
debian=> '0700',
redhat=> '0644',
Centos=> '0644',
}
file {'/tmp/test.txt':
conten => "hello world
",
mode => $file_mode,
}
쓰기 권장 안 함:
file {'/tmp/test.txt':
mode => $::operatingssytem ? {
debian=> '0700',
redhat=> '0644',
Centos=> '0644',
conten => "hello world
",
mode => $file_mode,
}
}
class 사양:
기호 연관 관계식:
-> 기호를 사용하여 리소스 간의 연관 관계를 설정하는 순서는 왼쪽에서 오른쪽입니다.
올바른 쓰기:
Package["httpd"] -> Service["httpd"]
잘못된 쓰기:
Service["httpd"] -> Package["httpd"]
모듈의 상속:
계승은 모듈에서 사용할 수 있지만, 크로스 모듈의 명칭 공간에서는 사용하지 않습니다.
class ssh{}
class ssh::client inherits {}
class ss::service inherits {}
모듈 간 상속(권장되지 않음):
class ssh{}
class ssh::client work {}
class ss::service apache {}
표시자 명명 사양:
1) 변수 명명 규칙
정규 표현식 사양 준수(\A\$[a-zA-Z0-9]+\Z), 특수 문자가 없습니다.%@^ 등.
변수 이름은 $foo와 $FOO와 같은 대소문자를 구분합니다.
class 클래스의 이름 지정 사양:
정규 표현식 사양 준수(\A\$[a-zA-Z0-9]+\Z), 특수 문자가 없습니다.%@^ 등.
클래스 이름에 이름공간이 사용되면 "::"으로 구분하고 정규 표현식 규범(\A([a-z][a-z0-9]*)에 부합해야 합니까?(::[a-z][a-zA-Z0-9]*)*\Z)
modules 명명 규칙:
정규 표현식 규범에 부합하다.
모듈 이름의 자모는 대문자로 쓸 수 없습니다.
tag 명명 규칙: 정규 표현식 사양(/\A[a-z0-9. -]+\Z)을 준수합니다.
nodes 노드 명명 규칙: 정규 표현식 사양(/\A[a-z0-9. -]+\Z)을 준수합니다.
puppet 파일의 가져오기와 클래스 설명
manfests 디렉터리에서 파일과 파일 사이의 가져오기 기능은 보통 import 함수를 사용합니다.
예 1:
site.pp
import nodes
예2:
site.pp
import 'nodes/*.pp'
주석: import 함수는 manfests 디렉터리에 있는 파일을 가져올 수도 있고 여러 파일을 가져올 수도 있으며, 여러 파일은 '*' 와일드카드 문자로 표시할 수도 있습니다.
클래스 선언:
node base {
include ntp
include apache
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
vue 단일 페이지에 여러 개의 echarts 도표가 있을 때의 공용 코드 쓰기html에서: 데이터 처리는 말할 필요가 없다.응, 직접 그림을 그려: 공통 섹션: 이 페이지를 떠날 때 파괴: 추가 정보: Vue + Echarts 차트 표시 및 동적 렌더링 준비 작업 echarts 의존 설치 n...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.