Puppet基礎編7-最初の完全テストモジュールpuppetを作成する


Puppet基礎編7-最初の完全テストモジュールpuppetを作成する


ゼロ基礎学習Puppet自動化構成管理シリーズドキュメント
Puppetを本番に導入する最初のモジュールはpuppet自体です.puppetは他のすべてのモジュールを実行してそれぞれの導入を完了できますが、puppetに問題が発生すると、すべてが停止します.もちろんpuppet自体のモジュールのほか、ネットワークのスムーズさや追加の環境などを保証する必要があります.
以前は簡単なmotdモジュールを書いたことがありますが、いくつかのモジュールの構造と簡単なpp文法を大体理解しています.次に詳しく説明します.では、完全なpuppetモジュールを作成するには、どのような要素を考慮すればいいのでしょうか.
  • puppetおよび付属依存パッケージはインストールOKですか?
  • puppetプロファイルは正しいですか?
  • puppetサービスは正常に稼働していますか?
  • puppetプロファイルを更新する場合、puppetサービスをアクティブに再起動またはreloadさせることができますか?
  • puppetインストールパッケージは、指定されたバージョンに自動的にアップグレードできますか?

  • 次にagent 1とagent 3を例に説明します

    1、puppetモジュールディレクトリ構造の作成

    [root@puppetmaster ~]# cd /etc/puppet/modules/
    [root@puppetmaster modules]# mkdir puppet
    [root@puppetmaster modules]# cd puppet/
    [root@puppetmaster puppet]# mkdir files manifests templates # 
    [root@puppetmaster puppet]# tree ../puppet
    ../puppet
    ├── files  # 
    ├── manifests  # puppet 
    └── templates  # , pp 
    3 directories, 0 files
    [root@puppetmaster puppet]#

    2、puppetプロファイルの作成

    [root@puppetmaster puppet]# cd manifests/
    [root@puppetmaster manifests]# touch init.pp config.pp install.pp service.pp params.pp
    [root@puppetmaster manifests]# tree ../
    ../
    ├── files
    ├── manifests
    │   ├── config.pp  # puppet 
    │   ├── init.pp    # pp 
    │   ├── install.pp # puppet 
    │   ├── params.pp  # 
    │   └── service.pp # puppet 
    └── templates
    3 directories, 5 files

    3、puppetモジュールプロファイルの作成


    プロセス全体は、まずpuppet(install.pp)をインストールし、puppet(config.pp)を構成し、最後にpuppetサービス(service.pp)を開始する必要があります.
    注意:次のプロセスは一歩一歩ではなく、比較的完全なモジュールが完成するまで、逐次漸進的なプロセスです.
    3.1、インストールプロファイルinstallを作成する.pp
    パッケージリソースによるパッケージの構文およびケースの詳細については、http://kisspuppet.com/2013/11/11/package/
    class名は、プロファイル全体にinitがあるため、作成されたモジュール名と一致する必要があります.puppetという名前です.ppは開始プロファイルであり、すべてがサブプロファイルであるべきであり、すべてが「classプライマリクラス名::classサブクラス名」と書くべきであり、classサブクラス名はpuppet::installのように作成されたppファイル名と一致する必要がある、作成されたサブクラス名はinstallであるべきである.pp
    3.1.1、判断条件を満たさない配置書類を作成する
    ノードインストールpuppetは主にfactorに依存する
    [root@puppetmaster manifests]# vim install.pp
    class puppet::install{  # 
      include puppet::puppet_install,puppet::facter_install
    }
    class puppet::puppet_install{
      package { 'puppet':
        ensure => installed,  # 
      }
    }
    class puppet::facter_install{
      package { 'facter':
        ensure => installed,
      }
    }

    以下の2つの書き方も可能です
    [root@puppetmaster manifests]# vim install.pp
    class puppet::install{  # 
      package { 'puppet':
        ensure => installed,
      }
      package { 'facter':
        ensure => installed,
      }
    }
    [root@puppetmaster manifests]# vim install.pp
    class puppet::install{
      package { ['puppet','facter']:  # 
        ensure => installed,
      }
    }

    3.1.2.システムのバージョンを判断する条件を備えたモジュールを作成する
    このような場合、yumソースにはpuppetバージョンがたくさんありますが、すべてのノードに指定したバージョンだけをインストールしてほしいと思っています.例えば2.7.25ですが、どのように設定しますか?次に,ノードのシステムバージョンが異なる場合,例えばRHEL 5,RHEL 6などが考えられるが,puppetモジュールを自分で判断させるにはどうすればよいのだろうか.
    以下のfactorで判断する
    [root@agent1 ~]# facter | grep operatingsystemmajrelease
    operatingsystemmajrelease => 5
    [root@agent3 ~]# facter | grep operatingsystemmajrelease
    operatingsystemmajrelease => 6

    以下のように書くのが合理的です
    [root@puppetmaster manifests]# vim install.pp
    class puppet::install{
      include puppet::puppet_install,puppet::facter_install
    }
    class puppet::puppet_install{
      package { 'puppet':
        ensure => $operatingsystemmajrelease ?{ # 
          5 => '2.7.25-1.el5',
          6 => '2.7.25-1.el6',
        }
      }
    }
    class puppet::facter_install{
      package { 'facter':
        ensure => $operatingsystemmajrelease ?{
          5 => '1.7.5-1.el5',
          6 => '1.7.5-1.el6',
        }
      }
    }

    3.1.3子をinitに追加する.pp中
    [root@puppetmaster manifests]# vim init.pp
    class puppet{
      include puppet::install
    }

    3.1.4 puppetメインプロファイルsiteに適用する.ppのノード上
    [root@puppetmaster ~]# vim /etc/puppet/manifests/site.pp
    $puppetmaster = 'puppetmaster.kisspuppet.com'
    node 'puppetmaster_cert.kisspuppet.com'{
      include  motd,puppet
    }
    node 'agent1_cert.kisspuppet.com'{
      include  motd,puppet
    }
    node 'agent2_cert.kisspuppet.com'{
      include  motd,puppet
    }
    node 'agent3_cert.kisspuppet.com'{
      include  motd,puppet
    }

    以下のような書き方も可能です
    [root@puppetmaster ~]# vim /etc/puppet/manifests/site.pp
    $puppetmaster = 'puppetmaster.kisspuppet.com'
    class environments{
      include motd,puppet
    }
    node 'puppetmaster_cert.kisspuppet.com'{
      include  environments
    }
    node 'agent1_cert.kisspuppet.com'{
      include  environments
    }
    node 'agent2_cert.kisspuppet.com'{
      include  environments
    }
    node 'agent3_cert.kisspuppet.com'{
      include  environments
    }

    すべてのノードが同じモジュールを使用する方法は、次のように書くこともできます.
    [root@puppetmaster ~]# vim /etc/puppet/manifests/site.pp
    $puppetmaster = 'puppetmaster.kisspuppet.com'
    class environments{
      include motd,puppet
    }
    node default{
       include environments
    }

    3.1.5、簡単なテストを行う
    ファクタバージョンを1.7.3に下げる
    [root@agent1 ~]# rpm -e facter --nodeps
    [root@agent1 ~]# rpm -ivh facter-1.7.3-1.el5.x86_64.rpm
    warning: facter-1.7.3-1.el5.x86_64.rpm: Header V3 RSA/SHA1 signature: NOKEY, key ID 4bd6ec30
    Preparing...                ########################################### [100%]
       1:facter                 ########################################### [100%]
    [root@agent1 ~]# facter --version
    1.7.3

    --noopで試行的なテストを行うことで、ノードの変化が見られますが、変更は行われません.これもpuppetの強みの一つです.
    [root@agent1 ~]# puppet agent -t --noop
    notice: Ignoring --listen on onetime run
    info: Caching catalog for agent1_cert.kisspuppet.com
    info: Applying configuration version '1394794815'
    notice: /Stage[main]/Puppet::Facter_install/Package[facter]/ensure: current_value 1.7.3-1.el5, should be 1.7.5-1.el5 (noop)
    notice: Class[Puppet::Facter_install]: Would have triggered 'refresh' from 1 events
    notice: Stage[main]: Would have triggered 'refresh' from 1 events
    notice: Finished catalog run in 0.23 seconds
    [root@agent1 ~]# facter --version
    1.7.3

    強制的に実行すると、管理側のfacterバージョンがpuppetモジュールで指定されたバージョン1.7.5になったことがわかります.これはrpmパッケージのアップグレード方法を説明しています.
    [root@agent1 ~]# puppet agent -t
    notice: Ignoring --listen on onetime run
    info: Caching catalog for agent1_cert.kisspuppet.com
    info: Applying configuration version '1394794815'
    notice: /Stage[main]/Puppet::Facter_install/Package[facter]/ensure: ensure changed '1.7.3-1.el5' to '1.7.5-1.el5'
    notice: Finished catalog run in 6.27 seconds
    [root@agent1 ~]# facter --version
    1.7.5

    全体のプロセスは、ノードがpuppetmasterエンドを同期した後、factorバージョン番号が間違っていることに気づき、システムタイプに応じてすぐに下位レベルのインストールツールyum(suseがzypperを呼び出すなど)を呼び出してインストールを行い、プロセス全体が透明であり、puppetが示す強力な機能の2つです.
    3.2、プロファイルconfigを作成する.pp
    fileリソースによるfileリソースの構成とケースの詳細については、http://kisspuppet.com/2013/11/14/file/
    3.2.1、私達はしばらくpuppetだけを配置する.confファイル
    [root@puppetmaster manifests]# vim config.pp
    class puppet::config{
      file { '/etc/puppet/puppet.conf':  # 
        ensure  => present,  # 
        content => template('puppet/puppet.conf.erb'),  # , (templates )
        owner   => 'root',  # root
        group   => 'root',  # root
        mode    => '0644',  # 644
        require => Class['puppet::install'],  # install.pp , puppet 
      }
    }

    3.2.2、puppetを書く.conf.erbテンプレート
    puppetのerbテンプレートの存在は、erbテンプレートがfact変数を参照することができ、変数の内容はノードシステムによって変化するため、ノードごとにファイルを個別に構成する問題を解決するためである.
    以下に、いずれかのノードの現在のpuppetを示す.confプロファイル、まず変化する内容を見つけます
    [root@agent1 ~]# vim /etc/puppet/puppet.conf
    [main]
        logdir = /var/log/puppet
        rundir = /var/run/puppet
        ssldir = $vardir/ssl
    [agent]
        classfile = $vardir/classes.txt
        localconfig = $vardir/localconfig
        server = puppetmaster.kisspuppet.com   # 
        certname = agent1_cert.kisspuppet.com  # 
        runinterval = 10
        listen = true

    次に、この2つの変数を解決します.
    paramsを作成すると言ったppは変数問題を解決するために、私たちはまずこれを使って解決します.
    hostnameなどのfact値が一意であるfactを見つけます
    [root@agent1 ~]# facter |grep hostname
    hostname => agent1
    [root@agent3 ~]# facter |grep hostname
    hostname => agent3

    作成params.ppファイル、certname変数を追加
    [root@puppetmaster manifests]# vim params.pp
    class puppet::params {
      $puppetserver = 'puppetmaster.kisspuppet.com'  # puppetserver puppetmaster 
      case $hostname{   # certname 
        agent1: {
          $certname = 'agent1_cert.kisspuppet.com'
        }
        agent3: {
          $certname = 'agent3_cert.kisspuppet.com'
        }
        default: {  # 
          fail("certname is not supported on ${::operatingsystem}")
        }
      }
    }

    注意:このような変数を作成する方法は、多くのノードの場合、明らかに最善の方法ではありません.fact変数で実現できますか.答えは可能です.以下のように書くことができます.
    [root@puppetmaster manifests]# vim params.pp
    class puppet::params {
      $puppetserver = 'puppetmaster.kisspuppet.com'
      $certname = "${::hostname}_cert.kisspuppet.com"  # fact:hostname 
      case $operatingsystemmajrelease{
        5: {
          $puppet_release = '2.7.23-1.el5'
          $facter_release = '1.7.3-1.el5'
        }
        6: {
          $puppet_release = '2.7.23-1.el6'
          $facter_release = '1.7.3-1.el6'
        }
        default: {
          fail("Module puppet is not supported on ${::operatingsystem}")
        }
      }
    }

    備考:ここではデフォルトのfactを使用していますが、システムにないfactをどのように実現するかは、後述する『Puppet拡張編1-カスタムfact結合ENC(hirea)の応用実践』でご紹介します
    思考:変数、特にhostname変数によってcertnameを決定することはhostnameが変わらない場合にのみcertnameが変わらないことを保証することができる.そうしないと、ノードが任意にhostnameを修正するとcertnameが変更され、前期の認証が失効し、再認証が必要になる.では、hostnameが変化した場合にcertnameが変わらない、つまり証明書を再申請する必要はないのではないでしょうか.後述する『Puppet拡張編1-カスタムfactとENC(hirea)の応用実践』で紹介します.
    テンプレートにcertname変数を参照するテンプレートの格納場所とconfigに注意する.ppで参照テンプレートの位置を一致させる
    [root@puppetmaster manifests]# vim ../templates/puppet.conf.erb
    ### config by  puppet ###
    [main]
        logdir = /var/log/puppet
        rundir = /var/run/puppet
        ssldir = $vardir/ssl
    [agent]
        classfile = $vardir/classes.txt
        localconfig = $vardir/localconfig
        server =   # puppetserver
        certname =   # certname
        runinterval = 10
        listen = true

    configのためppはparamsに依存する.ppの変数なのでconfig.ppにはclass puppet::paramsを適用するべきである
    3.3.3依存関係の決定
    [root@puppetmaster manifests]# vim config.pp
    class puppet::config{
      include puppet::params   # 
      file { '/etc/puppet/puppet.conf':
        ensure  => present,
        content => template('puppet/puppet.conf.erb'),
        owner   => 'root',
        group   => 'root',
        mode    => '0644',
        require => Class['puppet::install'],
      }
    }

    init.ppにはclass puppet::configを含めるべきである
    [root@puppetmaster manifests]# vim init.pp
    class puppet{
      include puppet::install,puppet::config
    }

    3.3.4更新テスト
    まずnoopテストを行います
    [root@agent1 ~]# puppet agent -t --noop
    notice: Ignoring --listen on onetime run
    info: Caching catalog for agent1_cert.kisspuppet.com
    info: Applying configuration version '1394797763'
    notice: /Stage[main]/Puppet::Config/File[/etc/puppet/puppet.conf]/content:
    --- /etc/puppet/puppet.conf    2014-03-10 08:22:33.000000000 +0800
    +++ /tmp/puppet-file20140314-7231-f50ehp-0    2014-03-14 19:49:24.000000000 +0800
    @@ -1,3 +1,4 @@
    +### config by  puppet ###  # 
     [main]
         logdir = /var/log/puppet
         rundir = /var/run/puppet
    notice: /Stage[main]/Puppet::Config/File[/etc/puppet/puppet.conf]/content: current_value {md5}fb17740fd53d8d4dfd6d291788a9bda3, should be {md5}134bae34adddbf30a3fe02ff0eb3c6a6 (noop)
    notice: Class[Puppet::Config]: Would have triggered 'refresh' from 1 events
    notice: Stage[main]: Would have triggered 'refresh' from 1 events
    notice: Finished catalog run in 0.43 seconds

    更新の強制
    [root@agent1 ~]# puppet agent -t
    notice: Ignoring --listen on onetime run
    info: Caching catalog for agent1_cert.kisspuppet.com
    info: Applying configuration version '1394797763'
    notice: /Stage[main]/Puppet::Config/File[/etc/puppet/puppet.conf]/content:
    --- /etc/puppet/puppet.conf    2014-03-10 08:22:33.000000000 +0800
    +++ /tmp/puppet-file20140314-7475-mlybgg-0    2014-03-14 19:50:16.000000000 +0800
    @@ -1,3 +1,4 @@
    +### config by  puppet ###
     [main]
         logdir = /var/log/puppet
         rundir = /var/run/puppet
    info: FileBucket adding {md5}fb17740fd53d8d4dfd6d291788a9bda3
    info: /Stage[main]/Puppet::Config/File[/etc/puppet/puppet.conf]: Filebucketed /etc/puppet/puppet.conf to puppet with sum fb17740fd53d8d4dfd6d291788a9bda3
    notice: /Stage[main]/Puppet::Config/File[/etc/puppet/puppet.conf]/content: content changed '{md5}fb17740fd53d8d4dfd6d291788a9bda3' to '{md5}134bae34adddbf30a3fe02ff0eb3c6a6'
    notice: Finished catalog run in 0.34 seconds
    [root@agent1 ~]# cat /etc/puppet/puppet.conf
    ### config by  puppet ###
    [main]
        logdir = /var/log/puppet
        rundir = /var/run/puppet
        ssldir = $vardir/ssl
    [agent]
        classfile = $vardir/classes.txt
        localconfig = $vardir/localconfig
        server = puppetmaster.kisspuppet.com   # puppetserver 
        certname = agent1_cert.kisspuppet.com  # certname 
        runinterval = 10
    [root@agent3 ~]# puppet agent -t
    info: Caching certificate for agent3_cert.kisspuppet.com
    info: Caching certificate_revocation_list for ca
    info: Caching catalog for agent3_cert.kisspuppet.com
    info: Applying configuration version '1394797763'
    notice: /Stage[main]/Motd/File[/etc/motd]/content:
    --- /etc/motd    2010-01-12 21:28:22.000000000 +0800
    +++ /tmp/puppet-file20140314-2786-1wb4mas-0    2014-03-14 19:51:27.589533699 +0800
    @@ -0,0 +1,3 @@
    +--                       --
    +--------puppet test---------
    +--                       --
    info: FileBucket adding {md5}d41d8cd98f00b204e9800998ecf8427e
    info: /Stage[main]/Motd/File[/etc/motd]: Filebucketed /etc/motd to puppet with sum d41d8cd98f00b204e9800998ecf8427e
    notice: /Stage[main]/Motd/File[/etc/motd]/content: content changed '{md5}d41d8cd98f00b204e9800998ecf8427e' to '{md5}87ea3a1af8650395038472457cc7f2b1'
    notice: /Stage[main]/Puppet::Config/File[/etc/puppet/puppet.conf]/content:
    --- /etc/puppet/puppet.conf    2014-03-09 01:50:46.112175841 +0800
    +++ /tmp/puppet-file20140314-2786-z4e844-0    2014-03-14 19:51:27.719533700 +0800
    @@ -1,3 +1,4 @@
    +### config by  puppet ###
     [main]
         logdir = /var/log/puppet
         rundir = /var/run/puppet
    @@ -8,3 +9,5 @@
         localconfig = $vardir/localconfig
         server = puppetmaster.kisspuppet.com
         certname = agent3_cert.kisspuppet.com
    +    runinterval = 10
    +    listen = true
    info: FileBucket adding {md5}03cbe6d4def560996eeacedfaef229b4
    info: /Stage[main]/Puppet::Config/File[/etc/puppet/puppet.conf]: Filebucketed /etc/puppet/puppet.conf to puppet with sum 03cbe6d4def560996eeacedfaef229b4
    notice: /Stage[main]/Puppet::Config/File[/etc/puppet/puppet.conf]/content: content changed '{md5}03cbe6d4def560996eeacedfaef229b4' to '{md5}4f57479998961563e3306b5d0e02a678'
    info: Creating state file /var/lib/puppet/state/state.yaml
    notice: Finished catalog run in 2.86 seconds
    [root@agent3 ~]# cat /etc/puppet/puppet.conf
    ### config by  puppet ###
    [main]
        logdir = /var/log/puppet
        rundir = /var/run/puppet
        ssldir = $vardir/ssl
    [agent]
        classfile = $vardir/classes.txt
        localconfig = $vardir/localconfig
        server = puppetmaster.kisspuppet.com
        certname = agent3_cert.kisspuppet.com
        runinterval = 10

    3.3、プロファイルサービスを作成する.pp
    サービスリソースによるサービスリソースおよびケースの詳細については、http://kisspuppet.com/2013/11/12/service/
    3.3.1、サービスを作成する.ppファイル
    [root@puppetmaster manifests]# vim service.pp
    class puppet::service{
      service { 'puppet':
        ensure     => running,  # puppet 
        hasstatus  => true,  # “service server_name status" 
        hasrestart => true,  # puppet restart 
        enable     => true,  # , chkconfig puppet on
      }
    }

    3.3.2、configを更新する.ppファイル、通知サービス再起動機能を追加
    この設定が完了したら、更新後にpuppetサービスの自動再起動を要求するように構成されていることを考えてみましょう.以下の設定を行う必要があります.
    [root@puppetmaster manifests]# vim config.pp
    class puppet::config{
      include puppet::params
      file { '/etc/puppet/puppet.conf':
        ensure  => present,
        content => template('puppet/puppet.conf.erb'),
        owner   => 'root',
        group   => 'root',
        mode    => '0644',
        require => Class['puppet::install'],
        notify  => Class['puppet::service'],  # puppet 
      }
    }

    3.3.3、class puppet::サービスをinitに追加する.pp中
    [root@puppetmaster manifests]# vim init.pp
    class puppet{
      include puppet::install,puppet::config,puppet::service
    }

    3.3.4、テスト
    テスト1:起動が設定されているかどうかを確認し、puppetサービスの状態を確認する
    [root@agent1 ~]# chkconfig puppet off
    [root@agent1 ~]# /etc/init.d/puppet status
    puppetd is stopped
    [root@agent1 ~]# puppet agent -t
    notice: Ignoring --listen on onetime run
    info: Caching catalog for agent1_cert.kisspuppet.com
    info: Applying configuration version '1394798692'
    notice: /Stage[main]/Puppet::Service/Service[puppet]/ensure: ensure changed 'stopped' to 'running'
    notice: Finished catalog run in 1.42 seconds
    [root@agent1 ~]# chkconfig --list | grep puppet
    puppet             0:off    1:off    2:on    3:on    4:on    5:on    6:off
    [root@agent1 ~]# /etc/init.d/puppet status
    puppetd (pid  8537) is running...

    テスト2、構成が変更されて復元された後、サービスが自動的に再起動するかどうかを確認する
    [root@agent1 ~]# echo "#add a line" >>/etc/puppet/puppet.conf
    [root@agent1 ~]# tailf  /var/log/messages
    Mar 14 21:18:52 agent1 puppet-agent[10803]: Reopening log files
    Mar 14 21:18:52 agent1 puppet-agent[10803]: Starting Puppet client version 2.7.25
    Mar 14 21:18:53 agent1 puppet-agent[10803]: Finished catalog run in 0.27 seconds
    Mar 14 21:19:05 agent1 puppet-agent[10803]: Finished catalog run in 0.35 seconds
    Mar 14 21:19:16 agent1 puppet-agent[10803]: Finished catalog run in 0.71 seconds
    Mar 14 21:19:27 agent1 puppet-agent[10803]: Finished catalog run in 0.30 seconds
    Mar 14 21:19:38 agent1 puppet-agent[10803]: Finished catalog run in 0.37 seconds
    Mar 14 21:19:50 agent1 puppet-agent[10803]: Finished catalog run in 0.42 seconds
    Mar 14 21:20:01 agent1 puppet-agent[10803]: Finished catalog run in 0.28 seconds
    Mar 14 21:20:12 agent1 puppet-agent[10803]: Finished catalog run in 0.36 seconds
    Mar 14 21:20:23 agent1 puppet-agent[10803]: Finished catalog run in 0.27 seconds
    Mar 14 21:20:34 agent1 puppet-agent[10803]: (/Stage[main]/Puppet::Config/File[/etc/puppet/puppet.conf]/content) content changed '{md5}898865b650b9af4cae1886a894ce656e' to '{md5}8c67cb8c039bb6436556b91f0c6678c4'
    Mar 14 21:20:34 agent1 puppet-agent[10803]: Caught TERM; calling stop
    Mar 14 21:20:36 agent1 puppet-agent[13068]: Reopening log files
    Mar 14 21:20:36 agent1 puppet-agent[13068]: Starting Puppet client version 2.7.25  # 

    3.3.5、サービス設定reload動作
    場合によっては、構成を変更した後、restartではなくサービスを再reloadさせるだけで、どのように設定すればいいのでしょうか.
    [root@puppetmaster manifests]# vim config.pp
        class puppet::service{
          service { 'puppet':
            ensure     => running,
            hasstatus  => true,
            hasrestart => true,
            enable     => true,
            provider   => init,
            path       => "/etc/init.d",  # 
            restart    => "/etc/init.d/sshd reload",  # restart reload
            start      => "/etc/init.d/sshd start",
            stop       => "/etc/init.d/sshd stop",
          }
        }

    テストでは、サービスが停止していないことがわかりますが、refreshです.
    [root@agent1 ~]# echo "#add a line" >>/etc/puppet/puppet.conf
    [root@agent1 ~]# tailf  /var/log/messages
    Mar 14 21:32:03 agent1 puppet-agent[13068]: Finished catalog run in 0.33 seconds
    Mar 14 21:32:13 agent1 puppet-agent[13068]: Reparsing /etc/puppet/puppet.conf
    Mar 14 21:32:14 agent1 puppet-agent[13068]: (/Stage[main]/Puppet::Config/File[/etc/puppet/puppet.conf]/content) content changed '{md5}898865b650b9af4cae1886a894ce656e' to '{md5}8c67cb8c039bb6436556b91f0c6678c4'
    Mar 14 21:32:14 agent1 puppet-agent[13068]: (/Service[puppet]) Triggered 'refresh' from 1 events
    Mar 14 21:32:14 agent1 puppet-agent[13068]: Finished catalog run in 0.32 seconds
    Mar 14 21:32:25 agent1 puppet-agent[13068]: Finished catalog run in 0.25 seconds
    Mar 14 21:32:35 agent1 puppet-agent[13068]: Reparsing /etc/puppet/puppet.conf
    Mar 14 21:32:36 agent1 puppet-agent[13068]: Finished catalog run in 0.25 seconds

    4、最適化コード
    4.1、install.ppの判定文はparamsに追加する.pp中
    [root@puppetmaster manifests]# vim params.pp
    class puppet::params {
      $puppetserver = 'puppetmaster.kisspuppet.com'
      case $hostname{
        agent1: {
          $certname = 'agent1_cert.kisspuppet.com'
        }
        agent3: {
          $certname = 'agent3_cert.kisspuppet.com'
        }
        default: {
          fail("certname is not supported on ${::operatingsystem}")
        }
      }
      case $operatingsystemmajrelease{   # 
        5: {
          $puppet_release = '2.7.23-1.el5'
          $facter_release = '1.7.3-1.el5'
        }
        6: {
          $puppet_release = '2.7.23-1.el6'
          $facter_release = '1.7.3-1.el6'
        }
        default: {
          fail("Module puppet is not supported on ${::operatingsystem}")
        }
      }
    }
    [root@puppetmaster manifests]# vim install.pp  # 
    class puppet::install{
      include puppet::puppet_install,puppet::facter_install
    }
    class puppet::puppet_install{
      package { 'puppet':
        ensure => $puppet::params::puppet_release,  #puppet “$class:: class:: ”
      }
    }
    class puppet::facter_install{
      package { 'facter':
        ensure => $puppet::params::facter_release,
      }
    }

    4.2、テスト(略)

    ホームに戻る


    コミュニケーション:


    微信公衆番号:puppet 2014、微信検索加入可能、以下のQRコードをスキャンして加入可能
    微信公衆番号
    QQ交流群:296934942
    Puppet_Learning
    puppet基礎知識、puppet学習、puppet資料、puppetモジュール