enveroment:
iptables:off selinux:disabled date:sync
server:172.25.254.1 www.puppet.server.com puppet master rhel6.5
client1:172.25.254.2 www.puppet.client1.com puppet agent rhel6.5
client2:172.25.254.3 www.puppet.client2.com puppet agent rhel6.5
packages need:
puppet-3.8.1-1.el6.noarch.rpm
facter-2.4.4-1.el6.x86_64.rpm
hiera-1.3.4-1.el6.noarch.rpm
rubygem-json-1.5.5-3.el6.x86_64.rpm
ruby-shadow-2.2.0-2.el6.x86_64.rpm
ruby-augeas-0.4.1-3.el6.x86_64.rpm
rubygems-1.3.7-5.el6.noarch.rpm
Install the packages on server:
yum install -y puppet-server-3.8.1-1.el6.noarch.rpm \
puppet-3.8.1-1.el6.noarch.rpm \
facter-2.4.4-1.el6.x86_64.rpm \
hiera-1.3.4-1.el6.noarch.rpm \
rubygem-json-1.5.5-3.el6.x86_64.rpm \
ruby-shadow-2.2.0-2.el6.x86_64.rpm \
ruby-augeas-0.4.1-3.el6.x86_64.rpm \
rubygems-1.3.7-5.el6.noarch.rpm
install the packages on client:
yum install -y puppet-3.8.1-1.el6.noarch.rpm \
facter-2.4.4-1.el6.x86_64.rpm \
hiera-1.3.4-1.el6.noarch.rpm \
rubygem-json-1.5.5-3.el6.x86_64.rpm \
ruby-shadow-2.2.0-2.el6.x86_64.rpm \
ruby-augeas-0.4.1-3.el6.x86_64.rpm \
rubygems-1.3.7-5.el6.noarch.rpm
start service on server and client:
/etc/init.d/puppetmaster start ##on server
/etc/init.d/puppet start ##on client
connect puppet master from client1:
puppet agent --server www.puppet.server.com --no-daemonize -v
##clinet send a request to master and wait master signed and return a certificate.
puppet cert list
##use this command on master in order to list whitch host is waiting for certificate.
puppet cert sign www.example.com
##use this command on master to sign and send certificate to the client who is waiting for.
##if this 3 commands is testing ok ,means puppet is ok.
configuration puppet master:
cd /etc/puppet/manifests
vim site.pp ##this file is important,it concern about whether puppet can work ok or not.
file{
"/tmp/testfile":
content => "hellow world"
}
##this means if client connect to master,puppet will touch a file named "testfile" in /tmp,and it conent "hellow world".
puppet agent --server www.puppet.server.com --no-daemonize -v -t
##use this command on client you will see ""Notice: /Stage[main]/Main/File[/tmp/testfile]/ensure: defined content as '{md5}40de8907e2a86f00a25332be5eaf69c5',and it true touch a file "testfile" in /tmp.
another example of site.pp:
vim site.pp
file{
"/tmp/testfile": ##file name and file path
content => "hellow world", ##file contents
mode => 600, ##file mode
owner => nobody ##file owner
}
puppet agent --server www.puppet.server.com --no-daemonize -v -t
##use this command on client,after client connect to the master,puppet will touch a file named testfile in /tmp,content "hellow world",it's mod is 600 and it's owner is nobody.
puppet autosign:
vim /etc/puppet/puppet.conf ##edit the main config file of puppet master
autosign = ture ##add this line on the top.this means allow any clients' connect.
cd /etc/puppet
touch autosign.conf ##create autosign file
vim autosign.conf ##add autosign clients
www.puppet.client1.com
www.piuppet.client2.com
/etc/init.d/puppetmaster restart
some example of puppet grammer(all edit in site.pp):
##touch file
file{
"/tmp/testfile":
content => "hellow world",
mode => 600,
owner => nobody
}
##creat dir
file{
"/public":
ensure => directory
}
##package install:
package {
"vsftpd":
ensure => present
}
##service status:
service {
"httpd":
ensure => running
}
##package remove:
package {
"vsftpd":
ensure => absent
}
##file transform:
vim fileserver.conf
[files]
path /etc/puppet/files
allow *
cd /etc/puppet
mkdir files ##it include vsftpd.conf(as it an example)
vim manifests/site.pp
file{
"/etc/vsftpd/vsftpd.conf":
source => "puppet:///files/vsftpd.conf",
mode => 600
}