Puppet 코드 작성 사양(19)

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
    }

좋은 웹페이지 즐겨찾기