Puppet入門:インストール構成例


このブログを見てくださった皆さん、puppetの勉強の道を皆さんと分かち合うことができて嬉しいです.次の内容が皆さんに役に立つことを願っています.
計算:a=$((1+8))=$[1+8]=$[3*3]=`expr 1+8`=`expr 3**3`=`expr 3*3`  =let 1+8
小数:a=$(3.145*10)エラー      a= `bc <<< 3.145*10`          ---- 小Q
-----------------------------------------------------------------------------------------------------
【準備作業】
まず少なくとも2台のマシンを用意して3台の仮想マシンができればいいです
192.168.1.1.1100サービス側192.168.1.1.1101クライアント2台のマシンがselinuxを閉じてiptablesルールをクリアし、設定hostnameを保存
編集/etc/sysconfig/network  hostnameの定義
100上hostname   master.teng.com
101上hostname   client.teng.com
ntpdateをインストールし、自動同期時間のタスク計画yum install-y ntpcrontabを確立します.  -e   //加入*/10  * * * * ntpdate time.windows.com          #マイクロソフトのタイムサーバ
【インストールサービス】
サービス側rpm-ivh http://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-7.noarch.rpmyum install -y    puppet-server     #サービス・エンド・サービスのインストール      puppetmaster  startchkconfig  puppetmaster  on
クライアント
rpm -ivh http://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-7.noarch.rpmyum install -y puppet          #インストールクライアントvi/etc/puppet/puppet.conf最後尾にlisten=trueserver=master.teng.comruninterval=30を追加   //アクティブ更新30 s/etc/init.d/puppet startごと    #puppetサービスを起動してssl証明書puppet agentを手動で生成  --test  --server  master.teng.com
【証明書発行】
サービス側はすべてのssl証明書を発行します
puppet cert list --all            
サービス側が指定したクライアント証明書を発行
puppet cert --sign client.teng.com
署名に成功するとclient.teng.comのkeyが表示され、行の先頭に+があります.説明がなければまだ署名されていません.
サービス側は指定したクライアント証明書を削除できます
puppet cert clean client.teng.com
すべての証明書を削除
puppet cert clean --all
サービス側自動発行プロファイルの作成
vim/etc/puppet/puppet.conf  //[main]の下にautosign=trueを1行追加
vim/etc/puppet/autosign.conf //下記の内容を追加します*.teng.com        サービス・エンドの再起動
注意クライアント証明書を削除した後もクライアントのssl関連ファイルを削除する rm -rf/var/lib/puppet/ssl/*
puppet更新方式http://www.cnphp6.com/archives/66975   
【簡易テスト】
サービス側vi/etc/puppet/manifests/site.pp  //以下の内容を加える
node default {
file {
  "/tmp/123.txt": 
 content => "test,test";
}
}

クライアント上のpuppet agent--test--server  master.teng.comは、クライアント上で/tmp/123.txtのファイルを生成し、コンテンツがtest,test
接続の構成に成功しました.
【モジュール化管理】
まず、いくつかの概念モジュール、クラス、リソースを理解します.
モジュールはpuppetの最大ユニットモジュールの中にクラスの下にリソースがあります.
puppetが管理するファイル、ユーザー、サービス、タスク計画などはすべてこれらのユニットから構成されています.次に、サービス側で次のようなモジュールを定義します.
mkdir/etc/puppet/modules/testm //モジュール名はtestmmoudulesの下にモジュールcdを格納します!$mkdir {files,manifests,templates}  
//1つのモジュールの下でこの3つのディレクトリfilesを保存する必要がありますいくつかのファイルは空のmanifestsのためにプロファイルtemplatesを保存することができますテンプレートはtouch manifests/init.ppを空にすることができます  //これは必須viです  manifests/init.pp   //内容は以下の通り
class testm{     //   testm  
file {"/tmp/2.txt":
owner => "root",
group => "root",
mode => 0400,
source => "puppet://$puppetserver/modules/testm/1.txt"
}
}

説明クラス名はtestmとも呼ばれ、クラスの下にリソースfileファイル名/tmp/2.txt ownergrooupmode定義ファイルの所有者、配列、および権限source定義というファイルがどこから取得されるかが定義されています.$puppetserverは後で定義しますここではpuppet serverサーバ上の/etc/puppet/modules/testm/files/1.txtを指します 
重要なプロファイルvimの定義を続行  /etc/puppet/manifests/site.pp   //内容は以下の通り
$puppetserver = 'master.teng.com'    //   IP
node 'client.teng.com'{
    include testm            //   
}

説明$puppetserver定義サービス側のホスト名node後はクライアントのホスト名ここで定義クライアントがロードするモジュール構成が完了したらクライアントでコマンドを実行
puppet agent --test  --server=master.aming.com  //クライアント上でpuppetサービスが起動した場合、このコマンドを実行しなくても自動的に同期します.上のモジュールはファイルを同期しただけです.ディレクトリを同期するにはどうすればいいですか.
mkdir/etc/puppet/modules/apache   ディレクトリの下にファイルまたはディレクトリを追加
vi  manifests/init.pp //以下を追加
class apache{         
file {"/usr/local/apache2":
owner => "root",
group => "root",
source => "puppet://$puppetserver/modules/apache/apache2",
recurse => true,
purge => true
}
}

vim  /etc/puppet/manifests/site.pp   //内容は以下の通り
$puppetserver = 'master.teng.com'    //   IP
node 'client.teng.com'{
    include testm 
    include apache               //   
}

注意recurse=>trueというパラメータは重要です.これはディレクトリを同期できないという意味で再帰的です.purgeパラメータは、サービス側がファイルクライアントを削除したときに削除できることを保証します.
【リモート実行コマンド】
vi  manifests/init.pp //以下を追加
class apache{         
file {"/usr/local/apache2":
owner => "root",
group => "root",
source => "puppet://$puppetserver/modules/apache/apache2",
recurse => true,
purge => true
}
exec {"123":     //exec   123     
unless => "test -f /tmp/teng.txt",
path => ["/bin", "/sbin", "/usr/bin", "/usr/sbin"],   //      
command => "/bin/touch /tmp/teng.txt"
}
}

注unlessの後のコマンドは、条件が成立した場合、次のコマンドは実行されません.条件が成立したい場合は、次のコマンドを実行するためにonlyifを使用します.注意しなければならないのは、実行するこのコマンドにunlessを使用する条件を付けなければならないことです.そうしないと、このコマンドはずっと実行するのは適切ではありません.
30秒待ってクライアントを自動的に同期させることも手動で同期させることもできます
puppet agent --test  --server=master.aming.com
クライアントはログを表示して出力を見ることができます
tail -f/var/log/messages
【cron追加】vi  manifests/init.pp //以下を追加
class apache{         
file {"/usr/local/apache2":
owner => "root",
group => "root",
source => "puppet://$puppetserver/modules/apache/apache2",
recurse => true,
purge => true
}
exec {"123":     //exec   123     
unless => "test -f /tmp/teng.txt",
path => ["/bin", "/sbin", "/usr/bin", "/usr/sbin"],   //      
command => "/bin/touch /tmp/teng.txt"
}
cron {"time":
command => "/sbin/ntpdate time.windows.com",
user => "root",
minute => "*/10",
# ensure => "absent"  //            cron   
}
}

注分時日月週間はそれぞれpuppetの中のminutehourmonthdaymonthweekdayに対応します
クライアントのログとcronを表示して、ログ出力の内容とcrontabに追加されているかどうかを確認します.
=============================================================
さて、今日はこれで終わりです.puppetに深く入り込みたいなら、以下の拡張パッケージを検討してみてください.  http://puppet.wikidot.com/packageservice http://puppet.wikidot.com/srvexec http://puppet.wikidot.com/execcron http://puppet.wikidot.com/cron
 http://blog.chinaunix.net/uid-20639775-id-3314583.html