puppet 성장 일기 4 Exec 자원 상세 소개 및 사례 분석

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

좋은 웹페이지 즐겨찾기