Puppet Base Knowledge
Puppet: manage the status of clients. If not match, try to modify it.
Resource --> Class --> ManiFest
Example
Create a file resource:
file { '/etc/ssh/ssh_config':
ensure => file,
owner => 'root',
group => 'root',
source => 'puppet:///modules/ssh/ssh_config',
}
Check file type resource: puppet resource file
Check specific resource: puppet resource user root
2. Resources belong to one unit --> class;
Example
class ssh {
package { 'openssh-clients':
ensure => present,
}
file { '/etc/ssh/ssh_config':
ensure => file,
owner => 'root',
group => 'root',
source => 'puppet:///modules/ssh/ssh_config',
}
service { 'sshd':
ensure => running,
enable => true,
}
}
3. Manifest: to direct puppet to include or instantiate a given class
Example:
motd.pp
class motd {
file { '/etc/motd':
ensure => file,
owner => 'root',
group => 'root',
content => 'Hello world! Puppet is awesome.',
}
}
# notice that no changes are made until we include the class
include motd
Pasted from: <https://puppetlabs.com/learn/classes>
Validate script: puppet parseer validate motd.pp
Run script: puppet apply motd.pp
4. A server can be abstract as a node
Example site.pp
node 'site.example.com' {
include ssh
include apache
include mysql
include web-app
}
5. Module = Directory Tree
module-name
|-manifests/ (contains all the mainfests in the module. This directory should contain an init.pp manifest, where the class name matches the module name)
|-files/ (contains static files, which managed nodes can download)
|-templates/ (contains templates, which the module's manifests can use)
|-lib/ (contains plugins, like custom facts and custom resource types)
|-tests/ (contains examples showing how to declare the module's classes and defined types)
|-spec/ (contains spec tests for any plugins in the lib directory)
By default module path: $confdir/modules
$confdir: main puppet configuration directory
default puppet: $confdir=/etc/puppet
default puppet enterprise: $confdir=/etc/puppetlabs/puppet
Check the module path: puppet config print modulepath
Autoloading: puppet run --> complies catalog --> loads modules
6. Relationships
Relationship parameter:
A. before (->): cause a resource to be applied before the target resource
B. require (->): cause a resource to be applied after the target resource
C. notify (~>): causes a resource to be applied before the target resource. The target resource will refresh if the notifying resource changes.
D. subscribe (~>): causes a resource to be applied after the target resource. The subscribing resource will refresh if the target resource changes.
Example
package { 'openssh-server':
ensure => present,
before => File['/etc/ssh/sshd_config'],
}
file { '/etc/ssh/sshd_config':
ensure => file,
mode => 600,
source => 'puppet:///modules/sshd/sshd_config',
require => Package['openssh-server'],
}
file { '/etc/ssh/sshd_config':
ensure => file,
mode => 600,
source => 'puppet:///modules/sshd/sshd_config',
subscribe => Service['sshd'],
}
service { 'sshd':
ensure => running,
enable => true,
notify => File['/etc/ssh/sshd_config'],
}
7. Inheritance
Describe: inherits all resources from the parent class and add new resources, modify the source attribute, add relationship;
only useful for overriding resource attributes
Example:
class ssh {
package { 'openssh-clients':
ensure => present,
}
file { '/etc/ssh/ssh_config':
ensure => file,
owner => 'root',
group => 'root',
source => 'puppet:///modules/ssh/ssh_config',
}
file { '/etc/ssh/sshd_config':
ensure => file,
owner => 'root',
group => 'root',
source => 'puppet:///modules/ssh/sshd_config'
}
service { 'sshd':
ensure => running,
enable => true,
}
}
Class ssh::paranoid inherits ssh {
package { 'fail2ban':
ensure => present,
}
sshkey { 'trustedhost.example.com':
ensure => present,
key => 'puppet:///modules/ssh/trutedhost.pub',
}
file ['/etc/ssh/sshd_config'] {
source => 'puppet:///modules/ssh/sshd_config_paranoid',
}
service ['sshd'] {
require => package['fail2ban'],
subscribe => sshkey['trustedhost.example.com'],
}
}
8. Event Inspector accomplish
A. Mointoring: a summary of the infrastructure's activity
B. Analyzing: the details of import changes and failures
Event result:
A. Changed
B. Failure
C. Noop
D. Skip
9. PuppetDB
PuppetDB 1.3 store:
A. Most recent facts from every nodes;
B. Most recent catalog;
C. Optional 7 days events report
Get data out:
A. PuppetDB's query API
check status: puppet node status <node>
B. Puppet's Inventory Service
C. Exported resources
10. Hiera (used to specific the value of parameters in module)
Process:
A. Install Hiera
B. Make hiera.yaml config file
C. Make hierarchy
D. Write datasource
E. Use Hiera data in Puppet
Example: change to use hiera to control the login information
A. vi /etc/puppetlabs/puppet/modules/motd/manifests/init.pp
class motd {
file { '/etc/motd':
ensure => file,
owner => 'root',
group => 'root',
content => hiera('motd'),
}
}
B. vi /etc/puppetlabs/puppet/hiera.ymal
---
:backends:
- yaml
:yaml:
:datadir: /etc/puppetlabs/puppet/hieradata
:hierarchy:
- hosts/%{fqdn}
- env/%{environment}
- common
C. vi /etc/puppetlabs/puppet/hieradata/common.yaml
---
motd: Hello there! This machine is managed by Puppet.
D. input command to make change apply:
puppet apply -e 'notice(hiera("motd"))'
puppet apply /etc/puppetlabs/puppet/modules/motd/tests/init.pp
E. Open another session to verfiy
11. Facter (used to discover basic node information)
facts: key => value
Example
architecture => x86_64
ipaddress => 172.16.10.1
Fact location:
puppet: /etc/facter/facts.d/
puppet enterprise: /etc/puppetlab/facter/facts.d/
Check facts information:
facter: list all the information
facter fqdn: list hostname
facter interfaces: list network adapter
Using facts:
${hostname}
${ipaddress_eth0}
Example: show the hostname and ipaddress_eth0 in login message
A. vi /etc/puppetlabs/puppet/modules/motd/manifests/init.pp
class motd {
file { '/etc/motd':
ensure => file,
owner => 'root',
group => 'root',
content => "Hello to server ${hostname}! server ip is ${ipaddress_eth0}.",
}
}
B. input command to make change apply:
puppet apply /etc/puppetlabs/puppet/modules/motd/tests/init.pp
C. Open another session to verfiy
12. Forge (community of content creators)
Exampe:
A. Classes for managing applications like Apache
B. Custom facts for determining a machine's warranty status
C. Custom Types & Providers that let you manage new things as puppet resources
Puppet forge: https://forge.puppetlabs.com/
Install module from forge in puppet master server
Check help: puppet help module
Search module: puppet module search apache
Install module: puppet module install <module name>
List all installed modules: puppet module list
13. Roles & Profiles
Puppet modules -> profiles -> roles -> nodes
Using hiera to pass data to profile
Example
A. Define nodes with roles
node 'ares.example.com' {
include role::dbserver
}
node 'zeus.example.com' {
include role::webserver
}
node 'hera.example.com' {
include role::webdbserver
}
node 'hermes.example.com' {
include role::webmail
}
B. Base role
class role {
include profile::base
}
C. Define roles with profiles
class role::webserver inherits role {
include profile::web
}
class role::dbserver inherits role {
include profile::db
}
class role::webdbserver inherits role {
include profile::web
include profile::db
}
D. Define profiles with modules
class profile::web {
include apache
include php
include tomcat
include jdk
include memcache
}
class profile::base {
include network
include users
}
class profile::db {
include mysql
}
class profile::mail {
include exim
}
E. real world example

14. Puppet NTP
A. Install ntp module: puppet module install puppetlabs-ntp
B. Config ntp module by puppet enterprise console
C. Use Puppet Enterprise manage NTP
15. Puppet DNS (using puppet master to manage DNS)
Example:
#Public nameserver
ns1.google.com 8.8.8.8
ns2.google.com 8.8.4.4
#Private nameserver
ns1.example.com 192.168.33.10
ns2.example.com 192.168.33.11
A. install ntp to sync the time zone
B. default modules path: /etc/puppetlabs/puppet/modules
C. install resolve class in console
D. add resolve class in node
E. Modify the configuration as you need in console
F. Click "run once" to check
16 Puppet SSH key
A. Install SSH module: puppet module instrall saz-ssh
(saz-ssh classes: ssh / ssh::client / ssh:server / ssh::server::host_key)
B. Modify the config of SSH by Puppet Enterprise Console
C. Distribuet to nodes
D. Use Puppet Enterprise manage SSH
If you want to block root login: add parameter
{"PermitRootLogin"=>"no"}
Very nice article, This is a great way for a simple quick start with Puppet.
ReplyDeleteBest Regards,
DevOps Training in Hyderabad
DevOps Online Training in Hyderabad
DevOps Online Training
DevOps Institutes in Hyderabad
Learn DevOps Online
Best DevOps Training Institute in Hyderabad
Best DevOps Online Training Institute in Hyderabad
Best DevOps Online Training in India
DevOps Institute in Hyderabad
Best DevOps Training
DevOps Training and Certification
learn DevOps
DevOps Institutes in Ameerpet
DevOps Training
DevOps Courses
DevOps Certification Training
CourseIng