puppet 성장 일기 4 Exec 자원 상세 소개 및 사례 분석
1. 시스템 환경 1. puppet 서비스 단말기
Release:RHEL6.4
HOSTNAME: puppetserver.rsyslog.org
TCP/IP: 172.16.200.100/24
Packages:
puppet-server-2.7.21-1.el6.noarch
mcollective-client-2.2.4
activemq-5.5.0
2、puppet
Release: RHEL5.8
HOSTNAME: agent1.rsyslog.org
TCP/IP: 172.16.200.101/24
Packages:
puppet-2.7.21-1.el5
mcollective-2.2.4-1.el5
3、puppet
Release: RHEL6.4
HOSTNAME: agent3.rsyslog.org
TCP/IP: 172.16.200.103/24
Packages:
puppet-2.7.21-1.el6
mcollective-2.2.4-1.el6
2. 자원 소개 1. 기능 1.1 원격 실행 시스템 명령을 실현하는데 사실은 셸의 호출 1.2이다. exec는 일회성 실행 자원이기 때문에 서로 다른 종류에서 exec의 이름은 같을 수 있다.2. 2.1 command = > "mkdir/tmp/rhel5/nginx"를 지원합니다. 실행된 명령은 실행된 명령의 절대 경로입니다.2.2 cwd = > "/tmp/rhel5/nginx", 명령이 실행되는 디렉터리를 지정합니다.디렉토리가 없으면 명령 실행이 실패합니다.2.3 environment=> "PATH=/home/puppetfans"명령을 위한 추가 환경 변수를 설정합니다.주의해야 할 것은 이걸로 PATH를 설정하면 PATH의 속성이 덮어쓰여집니다.여러 개의 환경 변수는 수조의 형식으로 설정해야 한다.2.4 그룹 = > 명령을 실행하는 사용자 그룹을 정의합니다.서로 다른 플랫폼에서 실행된 결과는 확정할 수 없다. 서로 다른 사용자가 명령을 실행할 때 변수가 변하지 않기 때문에 이것은 플랫폼의 문제이지 Ruby나 Puppet의 문제가 아니다.2.5 logoutput => on_failure|true|false가 출력을 기록할지 여부입니다.기본적으로exec자원의 로그 레벨 (log level) 에 따라 출력을 기록합니다.on 으로 정의된 경우failure, 명령이 오류를 반환할 때만 출력을 기록합니다.사용할 수 있는 값은:true,false 및 기타 합법적인 로그 등급입니다.2.6 onlyif = > "/bin/ls/usr/local/nginx/conf", 이 인자가 설정되면 exec는 onlyif가 설정한 명령이 0으로 되돌아갈 때만 실행됩니다.2.7 path => [/bin/','/sbin/','/usr/bin/','/usr/sbin/'명령이 실행되는 검색 경로입니다.path가 정의되지 않으면 명령은 절대 경로를 사용해야 합니다.경로는 세그먼트나 콜론으로 구분된 형식으로 정의할 수 있습니다.2.8 creates => "/tmp/rhel5/nginx"명령을 사용하여 생성된 파일을 지정합니다.이 인자를 제공하면 명령은 지정한 파일이 존재하지 않는 상황에서만 실행됩니다: 2.9 refresh = >true |false 명령을 업데이트하는 방법을 정의합니다.exec가 다른 자원에서 온 이벤트를 받았을 때 기본적으로 명령을 다시 실행합니다.그러나 이 매개 변수는 업데이트할 때 다른 명령을 실행할 수 있도록 정의합니다.2.10 refreshonly=>true|false 이 속성은 명령을 새로 고침만 촉발하는 것으로 바꿀 수 있다. 즉, 의존하는 대상이 바뀔 때만 명령이 실행된다는 것이다.subscribe나 notify를 동시에 사용해야만 의미 2.11returns가 지정한 반환 코드가 있습니다.실행된 명령이 다른 코드로 되돌아오면 오류 (error) 가 되돌아옵니다.기본값은 0입니다. 받아들일 수 있는 반환 코드로 구성된 그룹이나 단일 값으로 정의할 수 있습니다.2.12 timeout => 0 명령이 실행되는 최대 시간입니다.명령이 timeout에서 정의한 시간을 초과하면 이 명령은 종료되고 실행 실패로 처리됩니다.마이너스로 정의되면 실행 시간의 제한이 취소됩니다.timeout의 값은 초 단위입니다.2.13 unless=> "/bin/ls/usr/local/nginx/conf", 이 변수가 지정되면 exec는 unless가 설정한 명령이 02.14 user => "nginx"로 되돌아오지 않는 한 명령을 실행하는 사용자를 정의합니다.이 인자를 사용하면 오류 출력이 현재 포착되지 않습니다. 이것은 루비의 버그입니다.
3. 자원 예시 1, 예시 1.1 기능 실현*chkconfig 명령을 사용하여 노드의 iptables와 ip6tables 서비스를 닫고 오류 로그 1.2 설정 설명을 기록해야 한다.
class motd::exec {
include motd::exec1
}
class motd::exec1 {
exec { [ "chkconfig iptables off",
"chkconfig ip6tables off",]:
path => ["/usr/bin","/usr/sbin","/bin","/sbin"],
logoutput => on_failure,
}
}
1.3 클라이언트 에이전트 3 테스트
[root@agent3 ~]# puppet agent --test
info: Retrieving plugin
info: Loading facts in /var/lib/puppet/lib/facter/backup_date.rb
info: Loading facts in /var/lib/puppet/lib/facter/my_apply1.rb
info: Loading facts in /var/lib/puppet/lib/facter/my_apply3.rb
info: Loading facts in /var/lib/puppet/lib/facter/my_apply2.rb
info: Caching catalog for agent3.rsyslog.org
info: Applying configuration version '1378284783'
notice: /Stage[main]/Motd::Exec1/Exec[chkconfig iptables off]/returns: executed successfully
notice: /Stage[main]/Motd::Exec1/Exec[chkconfig ip6tables off]/returns: executed successfully
notice: Finished catalog run in 0.17 seconds
2. 예시 2.1 기능 실현*은 노드에 사용자와 그룹nginx를 만들어야 하고 UID와 GID는 모두 1000*이므로 서버에서nginx-0.8.42를 다운로드해야 한다.tar.gz 원본 패키지는 노드/tmp/rhel5/nginx 디렉터리에서 * 원본 패키지의 압축을 풀고 지정한 디렉터리에 2.2 설정 설명을 컴파일합니다
class source {
include source::file1,source::exec1,source::exec2,source::exec3,source::user
notify { "nstallation nginx package through the source code nginx-0.8.42.tar.gz":
withpath => true,
}
}
class source::user{
group { "nginx": # nginx
ensure => present,
gid => 1000
}
user { "nginx": # nginx
ensure => present,
uid => 1000,
gid => 1000,
groups => ["nginx"],
# membership => minimum,
shell => "/sbin/nologin",
require => Group["nginx"]
}
}
class source::file1{ # nginx
file{ "nginx":
name => "/tmp/rhel5/nginx/nginx-0.8.42.tar.gz",
owner => "root",
group => "root",
mode => 0700,
source => "puppet://$puppetserver/modules/source/nginx-0.8.42.tar.gz",
backup => 'main',
require => Class["source::exec1"],
}
}
class source::exec1{
exec {"create nginx_pag":
command => "mkdir /tmp/rhel5/nginx ",
path => ["/usr/bin","/usr/sbin","/bin","/sbin"],
creates => "/tmp/rhel5/nginx", # command
}
}
class source::exec2{
exec { "install nginx":
cwd =>"/tmp/rhel5/nginx", # command
command =>"tar -zxvf nginx-0.8.42.tar.gz && cd nginx-0.8.42 &&./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --without-http-cache && make&&make install",
path => ["/usr/bin","/usr/sbin","/bin","/sbin"],
logoutput => on_failure,
unless => "/bin/ls /usr/local/nginx/conf", # 0 commond
require => Class[source::file1,source::user]
notify => Class["source::exec3"],
}
}
class source::exec3{
exec { "updatedb":
command => "updatedb",
path => ["/usr/bin","/usr/sbin","/bin","/sbin"],
refreshonly => true, # command
subscribe => Class["source::exec2"],
}
}
[root@puppetserver manifests]#
2.3 클라이언트 에이전트 3 테스트
첫 번째 실행:
테스트 전:
[root@agent3 rhel5]# cat /etc/passwd | grep nginx
[root@agent3 rhel5]# cat /etc/group | grep nginx
[root@agent3 rhel5]# ll /tmp/rhel5/
total 0
[root@agent3 rhel5]# ll /usr/local/ | grep nginx
테스트 중:
[root@agent3 ~]# puppet agent --test
info: Retrieving plugin
info: Loading facts in /var/lib/puppet/lib/facter/backup_date.rb
info: Loading facts in /var/lib/puppet/lib/facter/my_apply1.rb
info: Loading facts in /var/lib/puppet/lib/facter/my_apply3.rb
info: Loading facts in /var/lib/puppet/lib/facter/my_apply2.rb
info: Caching catalog for agent3.rsyslog.org
info: Applying configuration version '1378366520'
notice: /Stage[main]/Source::Exec1/Exec[create nginx_pag]/returns: executed successfully
notice: /Stage[main]/Source/Notify[nstallation nginx package through the source code nginx-0.8.42.tar.gz]/message: nstallation nginx package through the source code nginx-0.8.42.tar.gz
notice: /Stage[main]/Source/Notify[nstallation nginx package through the source code nginx-0.8.42.tar.gz]/message: defined 'message' as 'nstallation nginx package through the source code nginx-0.8.42.tar.gz'
notice: /Stage[main]/Source::File1/File[nginx]/ensure: defined content as '{md5}2818e8b03512b239f1238d702703bcf3'
notice: /Stage[main]/Source::User/Group[nginx]/ensure: created
notice: /Stage[main]/Source::User/User[nginx]/ensure: created
notice: /Stage[main]/Source::Exec2/Exec[install nginx]/returns: executed successfully
info: /Stage[main]/Source::Exec2/Exec[install nginx]: Scheduling refresh of Class[Source::Exec3]
info: Class[Source::Exec2]: Scheduling refresh of Exec[updatedb]
info: Class[Source::Exec3]: Scheduling refresh of Exec[updatedb]
notice: /Stage[main]/Source::Exec3/Exec[updatedb]: Triggered 'refresh' from 2 events
notice: Finished catalog run in 18.83 seconds
테스트 후:
[root@agent3 rhel5]# cat /etc/passwd | grep nginx nginx:x:1000:1000::/home/nginx:/sbin/nologin [root@agent3 rhel5]# cat /etc/group | grep nginx nginx:x:1000:nginx [root@agent3 rhel5]# ll /tmp/rhel5/nginx/ total 632 drwxr-xr-x. 8 nginx nginx 4096 Sep 5 14:29 nginx-0.8.42 -rwx------. 1 root root 642593 Sep 5 14:29 nginx-0.8.42.tar.gz [root@agent3 rhel5]# ll /usr/local/nginx/ total 16 drwxr-xr-x. 2 root root 4096 Sep 5 14:30 conf drwxr-xr-x. 2 root root 4096 Sep 5 14:30 html drwxr-xr-x. 2 root root 4096 Sep 5 14:30 logs drwxr-xr-x. 2 root root 4096 Sep 5 14:30 sbin
두 번째 실행:
unless=> "/bin/ls/usr/local/nginx/conf"를 설정했기 때문에 명령이 0으로 되돌아올 때 exec는 실행하지 않습니다.그 다음에refreshonly=>true를 설정하여 notify와subscrive에 맞추어 변경된 상태에서만 업데이트를 터치합니다[root@agent3 ~]# puppet agent --test info: Retrieving plugin info: Loading facts in /var/lib/puppet/lib/facter/backup_date.rb info: Loading facts in /var/lib/puppet/lib/facter/my_apply1.rb info: Loading facts in /var/lib/puppet/lib/facter/my_apply3.rb info: Loading facts in /var/lib/puppet/lib/facter/my_apply2.rb info: Caching catalog for agent3.rsyslog.org info: Applying configuration version '1378366520' notice: /Stage[main]/Source/Notify[nstallation nginx package through the source code nginx-0.8.42.tar.gz]/message: nstallation nginx package through the source code nginx-0.8.42.tar.gz notice: /Stage[main]/Source/Notify[nstallation nginx package through the source code nginx-0.8.42.tar.gz]/message: defined 'message' as 'nstallation nginx package through the source code nginx-0.8.42.tar.gz' notice: Finished catalog run in 0.32 seconds
puppet 엘리트가 자동화 운영 관리군에 가입한 것을 환영합니다 296934942
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Moderne Puppet 노드 분류Innerhalb von Puppet stehen unterschiedliche Varianten für die Node Klassifizierung zur Verfügung. 외부 노드 분류 Achtung: Man...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.