Puppi. Puppet strings to the shell

Alessandro Franceschi
Alessandro FranceschiFounder @ Lab42
PuppetCamp Europe 2011
 27/28 April Amsterdam
What’s Puppi?


A Puppet Module
A Bash Command
A tool to automate deployments
A SysAdmin friend
puppi
puppi
Usage: puppi <command> [project|topic] [options]

Available commands:
check [project] - Run puppi checks host-wide or for project
log [topic] [-i] - Show system and application specific logs
info [topic] [-i] - Show informations about the system
init <project> - First time project initialization and setup
deploy <project> - Deploy the specified project
rollback <project> - Rollback the specified project.

Available options:
-f - Force puppi commands execution flow also on CRITICAL errors
-i - Interactively ask confirmation for every step
-t - Test mode. Just show the commands that should be executed
-d <yes|full> - Debug mode. Show debug of what is done.
-o "parameter=value parameter2=value2" - Set manual options to override defaults

Available projects:
abnormalia.net   git.example42.com  openskills.info openskills.info_sql
www.example42.com www.example42.com_sql   www.lab42.it

Available info topics:
apache! disks hardware mcollective munin     mysql   network   nrpe   ntp! openssh
packages perf postfix puppi rsync! users

Available log topics:
abnormalia.net! auth git.example42.com mail mcollective munin         mysql
openskills.info rsync system www.example42.com www.lab42.it
puppi check



Instant
systems
health check
puppi check
# Run all local checks
puppi check

# Run checks related to myapp
puppi check myapp

#   Checks can be on:
#   - Running services
#   - Listening ports
#   - Pattern match on specific URLs
#   - General system’s status
#   - Remote services used by the host
#
#   - Whatever a Nagios plugin can check
puppi check
# Each check is a Puppet define

puppi::check   { "NTP_Sync":
    command    => "check_ntp -H ${puppi::params::ntp_server}" ,
    priority   => "20" ,
    hostwide   => "yes" ,
}

puppi::check { "Port_exim_$port":
    command => "check_tcp -H ${fqdn} -p ${exim::params::port}" ,
}

puppi::check { "Url_$name":
    enable   => $enable,
    hostwide => no,
    project => “myapp”,
    command => "check_http -I '${target}' -p '${port}' -u '$
{url}' -s '${pattern}'" ,
}
puppi info


Quick
and focused
info from the
system
puppi info
# Show all the info available
puppi info

# Interactive. Select the topics to show
puppi info -i

# Check local resources
puppi info network
puppi info perf

# Module based info sources
puppi info openssh
puppi info apache

# Company and node specific info
puppi info mycompany
puppi info
puppi::info { "network":
    description => "Network settings and stats" ,
    run         => [ "ifconfig”,“route”,“cat /etc resolv.conf”,
                     “netstat -natup|grep LISTEN" ],
}

puppi::info::module { "openssh":
    packagename => "${openssh::params::packagename}",
    servicename => "${openssh::params::servicename}",
    processname => "${openssh::params::processname}",
    configfile => "${openssh::params::configfile}",
    datadir     => "${openssh::params::datadir}",
    logdir      => "${openssh::params::logdir}",
    protocol    => "${openssh::params::protocol}",
    port        => "${openssh::params::port}",
    description => "What Puppet knows about openssh" ,
    run         => "ls -la ~/.ssh/",
}

puppi::info::readme { "mycompany": }
puppi log



All logs
in a single
command
puppi log
# tail -f of all the known logs
puppi log

# Interactive. CHoose logs to show
puppi log -i

# Tail of logs related to myapp
puppi log myapp




                              Troubleshoot in the quick way
puppi log
class puppi::logs {

    puppi::log { "auth":
        description => "Users and authentication" ,
        log => $operatingsystem ? {
            Debian,Ubuntu => [ "/var/log/user.log” ,
                               “/var/log/auth.log" ],
            RedHat,CentOS => "/var/log/secure",
        }
    }

    puppi::log { "mail":
        description => "Mail messages" ,
        log => $operatingsystem ? {
            Debian,Ubuntu => "/var/log/mail.log",
            RedHat,CentOS => "/var/log/maillog",
        }
    }

    [...]
}
puppi deploy



Automating
deployment
procedures
puppi deploy
# To make this work:

puppi deploy www.lab42.it



# You write something like:

puppi::project::builder { "www.lab42.it":
    source       => "rsync://deploy.${domain}/deploy/www.lab42.it/",
    init_source => "rsync://deploy.${domain}/init/www.lab42.it",
    source_type => "dir",
    deploy_root => "${apache::params::documentroot}/www.lab42.it/",
    user         => "root",
    disable_services => “apache”,
    run_checks   => “true”,
    backup       => “full”,
    report_email => "roots@lab42.it",
    enable       => "true",
}
puppi deploy
# Default sample deploy procedures (can be customized)
# Check puppi/manifests/project/*.pp

puppi::project::builder # General purpose scenario.
                        # Includes most of the cases below

puppi::project::war # Deploy a simple war

puppi::project::tar # Deploy a tar.gz file

puppi::project::maven # Deploy Maven artifacts published on a
                      # Nexus repository

puppi::project::mysql # Retrieve and imports a .sql file

puppi::project::files # Deploy the files defined in a list
puppi deploy
# SOME options available in puppi::project::builder
# Use them to adapt the default procedures to custom needs

define puppi::project::builder (
    $source, # URI of source files: http://, ssh://, rsync://...
    $source_type, # Type of source: tarball, zip, war, dir, maven...
    $deploy_root, # Destination directory
    $init_source="", # Source for init command
    $user="root", # User that makes the deploy
    $predeploy_customcommand="", # Optional pre-deploy command
    $postdeploy_customcommand="", # Optional post-deploy command
    $disable_services="", # Services to stop during deploy.
    $firewall_src_ip="", # Load balancer IP
    $report_email="", # Email(s) to notify at the end of the run
    $backup="full", # Backup method for archiving old data
    $run_checks="true", # If pre and post deploy checks are run
    [...] ) {
puppi deploy
# A deploy procedure contains basic puppi defines:
# puppi::deploy, init, project, rollback, report

# A sample fragment:
puppi::deploy {
    "${name}-Retrieve_SourceFile":
         priority => "20" , command => "get_file.sh" ,
         arguments => "-s $source -t $real_source_type" ,
         user => "root" , project => "$name" , enable => $enable ;
    "${name}-Deploy":
         priority => "40" , command => "deploy.sh" ,
         arguments => "$deploy_root" ,
         user => "$user" , project => "$name" , enable => $enable;
}
puppi deploy
# The commands executed can be in any language
# By default Puppi provides some native commands for general uses:

get_file.sh # Retrieve a file using different protocols:
             # http://, ssh://, file://, svn://, rsync:// ...
archive.sh # Backup and recovery data with various options
deploy.sh    # Copy files to the deploy directory
wait.sh      # Wait for events (file presence, content check, time...)
predeploy.sh     # Prepare files to deploy
get_metadata.sh # Extract metadata from various sources
database.sh      # Run database queries

# These and other scripts are placed in /etc/puppi/scripts and can
# be used during the deploy procedure

# All the native scripts use and can write to a runtime
# configuration file where are stored parameters related
# to the deployment.
puppi paths
/usr/sbin/puppi # The puppi main command
/etc/puppi/     # All puppi configs and scripts
/etc/puppi/scripts/ # Where commands are placed

/etc/puppi/checks/ # Where checks are defined (Nagios plugins)
/etc/puppi/info/   # Where are placed info topic scripts
/etc/puppi/logs/   # Where are placed log topic paths

/etc/puppi/projects/ # Where are stored deploy projects dirs
/etc/puppi/projects/<project_name>/deploy/ # Commands executed
    # when you type: puppi deploy <project_name>

/tmp/puppi/<project_name>/ # Temporary dir used during a deploy
/var/lib/puppi/<project_name>/ # Where backups are stored
/var/log/puppi/<project_name>/ # Where logs are stored
puppi
rollback


If something
can go wrong...



  One command solves
puppi rollback
[root@pg01 ~]# puppi rollback www.lab42.it
Puppi setup: 00-www.lab42.it-RuntimeConfig-Initialization    [   OK    ]


Choose deploy to rollback:
total 52
drwxr-xr-x 2 root root 4096 Mar 29 01:21   20110329-012108
drwxr-xr-x 2 root root 4096 Mar 29 02:59   20110329-025956
drwxr-xr-x 2 root root 4096 Apr 10 22:05   20110410-215942
drwxr-xr-x 2 root root 4096 Apr 19 23:55   20110419-235528
drwxr-xr-x 2 root root 4096 Apr 20 02:41   20110420-024115
drwxr-xr-x 2 root root 4096 Apr 20 02:56   20110420-025621
lrwxrwxrwx 1 root root   51 Apr 20 02:56   latest -> /var/lib/puppi/
archive/www.lab42.it/20110420-025621




            Rollback operations require user’s interaction
puppi init



Automating
first time
deployments
puppi init
[root@pg02 ~]# puppi init www.lab42.it
Puppi setup: 00-www.lab42.it-RuntimeConfig-Initialization   [   OK   ]

pg02 Init: 40-www.lab42.it-Deploy_Files                     [   OK   ]

Reporting: 20-www.lab42.it-Mail_Notification                [   OK   ]

REPORT FOR PUPPI - STATUS OK
Summary of operations is: /var/log/puppi/www.lab42.it/
20110423-005555/summary
Details are in: /var/log/puppi/www.lab42.it/20110423-005555/
Temporary workdir has been: /tmp/puppi/www.lab42.it/ (Will be
rewritten at the next puppi run)
Runtime config file is: /tmp/puppi/www.lab42.it/config
Files have been archived in: /var/lib/puppi/archive/www.lab42.it/
20110423-005555
Job done.



Notification plugins
mail notify
# Usage in a puppi::project define
    report_email => "roots@lab42.it al@lab42.it",

# The actual code that makes it
    puppi::report {
        "${name}-Mail_Notification":
             command => "report_mail.sh" ,
             arguments => "$report_email" ,
             project => "$name" ,
    }
mc-puppi



Expanding
to a wider
world
mc-puppi
# Some examples
# Distributed real time check of the whole Infrastructure
mc-puppi check

# Gather network info of all nodes
mc-puppi info network

# Deploy myapp on all the nodes of the myapp-fe role
mc-puppi -F role=myapp-fe deploy myapp

# Instant check on the nodes where you deployed
mc-puppi -F role=myapp-fe check

# Realtime info on relevant services
mc-puppi -F role=myapp-fe info apache

# Check last log entries
mc-puppi -F role=myapp-fe log apache


           Bringing puppi commands to MCollective space
mc-puppi
Puppi. Puppet strings to the shell
More notification methods
Wider OS support
Web Frontend
Orchestra
Dowload from:

www.example42.com
github.com/example42
Graphics by Tatlin
 www.tatlin.net
1 of 33

Recommended

Oliver hookins puppetcamp2011 by
Oliver hookins puppetcamp2011Oliver hookins puppetcamp2011
Oliver hookins puppetcamp2011Puppet
6.4K views42 slides
Puppet modules for Fun and Profit by
Puppet modules for Fun and ProfitPuppet modules for Fun and Profit
Puppet modules for Fun and ProfitAlessandro Franceschi
3.7K views24 slides
Puppet modules: A Holistic Approach - Geneva by
Puppet modules: A Holistic Approach - GenevaPuppet modules: A Holistic Approach - Geneva
Puppet modules: A Holistic Approach - GenevaAlessandro Franceschi
1.4K views26 slides
Puppet @ Seat by
Puppet @ SeatPuppet @ Seat
Puppet @ SeatAlessandro Franceschi
5.9K views45 slides
Can you upgrade to Puppet 4.x? by
Can you upgrade to Puppet 4.x?Can you upgrade to Puppet 4.x?
Can you upgrade to Puppet 4.x?Martin Alfke
2.3K views43 slides
Anatomy of a reusable module by
Anatomy of a reusable moduleAnatomy of a reusable module
Anatomy of a reusable moduleAlessandro Franceschi
3.3K views50 slides

More Related Content

What's hot

Essential applications management with Tiny Puppet by
Essential applications management with Tiny PuppetEssential applications management with Tiny Puppet
Essential applications management with Tiny PuppetAlessandro Franceschi
2.1K views15 slides
ReUse Your (Puppet) Modules! by
ReUse Your (Puppet) Modules!ReUse Your (Puppet) Modules!
ReUse Your (Puppet) Modules!Alessandro Franceschi
992 views45 slides
Intro to-puppet by
Intro to-puppetIntro to-puppet
Intro to-puppetF.L. Jonathan Araña Cruz
3.5K views40 slides
Puppet modules: An Holistic Approach by
Puppet modules: An Holistic ApproachPuppet modules: An Holistic Approach
Puppet modules: An Holistic ApproachAlessandro Franceschi
3.1K views23 slides
Doing It Wrong with Puppet - by
Doing It Wrong with Puppet - Doing It Wrong with Puppet -
Doing It Wrong with Puppet - Puppet
8.8K views36 slides
Puppet Systems Infrastructure Construction Kit by
Puppet Systems Infrastructure Construction KitPuppet Systems Infrastructure Construction Kit
Puppet Systems Infrastructure Construction KitAlessandro Franceschi
1.6K views22 slides

What's hot(20)

Doing It Wrong with Puppet - by Puppet
Doing It Wrong with Puppet - Doing It Wrong with Puppet -
Doing It Wrong with Puppet -
Puppet8.8K views
Puppet Camp Phoenix 2015: Managing Files via Puppet: Let Me Count The Ways (B... by Puppet
Puppet Camp Phoenix 2015: Managing Files via Puppet: Let Me Count The Ways (B...Puppet Camp Phoenix 2015: Managing Files via Puppet: Let Me Count The Ways (B...
Puppet Camp Phoenix 2015: Managing Files via Puppet: Let Me Count The Ways (B...
Puppet2.4K views
Power of Puppet 4 by Martin Alfke
Power of Puppet 4Power of Puppet 4
Power of Puppet 4
Martin Alfke9.3K views
Configuration Surgery with Augeas by Puppet
Configuration Surgery with AugeasConfiguration Surgery with Augeas
Configuration Surgery with Augeas
Puppet12.7K views
Replacing "exec" with a type and provider: Return manifests to a declarative ... by Puppet
Replacing "exec" with a type and provider: Return manifests to a declarative ...Replacing "exec" with a type and provider: Return manifests to a declarative ...
Replacing "exec" with a type and provider: Return manifests to a declarative ...
Puppet4.9K views
Enjoying the Journey from Puppet 3.x to Puppet 4.x (PuppetConf 2016) by Robert Nelson
Enjoying the Journey from Puppet 3.x to Puppet 4.x (PuppetConf 2016)Enjoying the Journey from Puppet 3.x to Puppet 4.x (PuppetConf 2016)
Enjoying the Journey from Puppet 3.x to Puppet 4.x (PuppetConf 2016)
Robert Nelson1.3K views
PECL Picks - Extensions to make your life better by ZendCon
PECL Picks - Extensions to make your life betterPECL Picks - Extensions to make your life better
PECL Picks - Extensions to make your life better
ZendCon4.1K views
PuppetCamp SEA 1 - Puppet Deployment at OnApp by Walter Heck
PuppetCamp SEA 1 - Puppet Deployment  at OnAppPuppetCamp SEA 1 - Puppet Deployment  at OnApp
PuppetCamp SEA 1 - Puppet Deployment at OnApp
Walter Heck638 views
Puppet for dummies - ZendCon 2011 Edition by Joshua Thijssen
Puppet for dummies - ZendCon 2011 EditionPuppet for dummies - ZendCon 2011 Edition
Puppet for dummies - ZendCon 2011 Edition
Joshua Thijssen13K views
PuppetCamp SEA 1 - Use of Puppet by Walter Heck
PuppetCamp SEA 1 - Use of PuppetPuppetCamp SEA 1 - Use of Puppet
PuppetCamp SEA 1 - Use of Puppet
Walter Heck1.3K views

Similar to Puppi. Puppet strings to the shell

Puppet: Eclipsecon ALM 2013 by
Puppet: Eclipsecon ALM 2013Puppet: Eclipsecon ALM 2013
Puppet: Eclipsecon ALM 2013grim_radical
1.2K views74 slides
Puppet by
PuppetPuppet
PuppetŁukasz Jagiełło
1.1K views21 slides
Virtualization and automation of library software/machines + Puppet by
Virtualization and automation of library software/machines + PuppetVirtualization and automation of library software/machines + Puppet
Virtualization and automation of library software/machines + PuppetOmar Reygaert
1.2K views38 slides
Writing and Publishing Puppet Modules - PuppetConf 2014 by
Writing and Publishing Puppet Modules - PuppetConf 2014Writing and Publishing Puppet Modules - PuppetConf 2014
Writing and Publishing Puppet Modules - PuppetConf 2014Puppet
2.5K views45 slides
Installaling Puppet Master and Agent by
Installaling Puppet Master and AgentInstallaling Puppet Master and Agent
Installaling Puppet Master and AgentRanjit Avasarala
1.2K views14 slides
Ansible - Swiss Army Knife Orchestration by
Ansible - Swiss Army Knife OrchestrationAnsible - Swiss Army Knife Orchestration
Ansible - Swiss Army Knife Orchestrationbcoca
31.7K views26 slides

Similar to Puppi. Puppet strings to the shell(20)

Puppet: Eclipsecon ALM 2013 by grim_radical
Puppet: Eclipsecon ALM 2013Puppet: Eclipsecon ALM 2013
Puppet: Eclipsecon ALM 2013
grim_radical1.2K views
Virtualization and automation of library software/machines + Puppet by Omar Reygaert
Virtualization and automation of library software/machines + PuppetVirtualization and automation of library software/machines + Puppet
Virtualization and automation of library software/machines + Puppet
Omar Reygaert1.2K views
Writing and Publishing Puppet Modules - PuppetConf 2014 by Puppet
Writing and Publishing Puppet Modules - PuppetConf 2014Writing and Publishing Puppet Modules - PuppetConf 2014
Writing and Publishing Puppet Modules - PuppetConf 2014
Puppet2.5K views
Installaling Puppet Master and Agent by Ranjit Avasarala
Installaling Puppet Master and AgentInstallaling Puppet Master and Agent
Installaling Puppet Master and Agent
Ranjit Avasarala1.2K views
Ansible - Swiss Army Knife Orchestration by bcoca
Ansible - Swiss Army Knife OrchestrationAnsible - Swiss Army Knife Orchestration
Ansible - Swiss Army Knife Orchestration
bcoca31.7K views
How to automate all your SEO projects by Vincent Terrasi
How to automate all your SEO projectsHow to automate all your SEO projects
How to automate all your SEO projects
Vincent Terrasi3.2K views
2012 coscup - Build your PHP application on Heroku by ronnywang_tw
2012 coscup - Build your PHP application on Heroku2012 coscup - Build your PHP application on Heroku
2012 coscup - Build your PHP application on Heroku
ronnywang_tw7.2K views
Node.js basics by Ben Lin
Node.js basicsNode.js basics
Node.js basics
Ben Lin1.1K views
PM : code faster by PHPPRO
PM : code fasterPM : code faster
PM : code faster
PHPPRO2.6K views
Introduction to PowerShell by Boulos Dib
Introduction to PowerShellIntroduction to PowerShell
Introduction to PowerShell
Boulos Dib2.6K views
The Grand Puppet Sub-Systems Tour - Nicholas Fagerlund, Puppet Labs by Puppet
The Grand Puppet Sub-Systems Tour - Nicholas Fagerlund, Puppet LabsThe Grand Puppet Sub-Systems Tour - Nicholas Fagerlund, Puppet Labs
The Grand Puppet Sub-Systems Tour - Nicholas Fagerlund, Puppet Labs
Puppet1.3K views
Hadoop meet Rex(How to construct hadoop cluster with rex) by Jun Hong Kim
Hadoop meet Rex(How to construct hadoop cluster with rex)Hadoop meet Rex(How to construct hadoop cluster with rex)
Hadoop meet Rex(How to construct hadoop cluster with rex)
Jun Hong Kim2.7K views
Puppet HackDay/BarCamp New Delhi Exercises by Julie Tsai
Puppet HackDay/BarCamp New Delhi ExercisesPuppet HackDay/BarCamp New Delhi Exercises
Puppet HackDay/BarCamp New Delhi Exercises
Julie Tsai1.4K views
Lean Php Presentation by Alan Pinstein
Lean Php PresentationLean Php Presentation
Lean Php Presentation
Alan Pinstein13.7K views
linux_Commads by tastedone
linux_Commadslinux_Commads
linux_Commads
tastedone511 views
Installing odoo v8 from github by Antony Gitomeh
Installing odoo v8 from githubInstalling odoo v8 from github
Installing odoo v8 from github
Antony Gitomeh5.5K views
From Dev to DevOps - Codemotion ES 2012 by Carlos Sanchez
From Dev to DevOps - Codemotion ES 2012From Dev to DevOps - Codemotion ES 2012
From Dev to DevOps - Codemotion ES 2012
Carlos Sanchez2.3K views

More from Alessandro Franceschi

DevOps - Evoluzione della specie - DevOps Heroes.pdf by
DevOps - Evoluzione della specie - DevOps Heroes.pdfDevOps - Evoluzione della specie - DevOps Heroes.pdf
DevOps - Evoluzione della specie - DevOps Heroes.pdfAlessandro Franceschi
31 views30 slides
Tiny Puppet Can Install Everything. Prove me wrong! by
Tiny Puppet Can Install Everything. Prove me wrong!Tiny Puppet Can Install Everything. Prove me wrong!
Tiny Puppet Can Install Everything. Prove me wrong!Alessandro Franceschi
43 views20 slides
Ten years of [Puppet] installations. What now? by
Ten years of [Puppet] installations. What now?Ten years of [Puppet] installations. What now?
Ten years of [Puppet] installations. What now?Alessandro Franceschi
585 views26 slides
Puppet evolutions by
Puppet evolutionsPuppet evolutions
Puppet evolutionsAlessandro Franceschi
10.3K views27 slides
Raise the bar! Reloaded by
Raise the bar! ReloadedRaise the bar! Reloaded
Raise the bar! ReloadedAlessandro Franceschi
3.2K views23 slides
Raise the bar! by
Raise the bar!Raise the bar!
Raise the bar!Alessandro Franceschi
1.4K views19 slides

Recently uploaded

Kyo - Functional Scala 2023.pdf by
Kyo - Functional Scala 2023.pdfKyo - Functional Scala 2023.pdf
Kyo - Functional Scala 2023.pdfFlavio W. Brasil
418 views92 slides
PharoJS - Zürich Smalltalk Group Meetup November 2023 by
PharoJS - Zürich Smalltalk Group Meetup November 2023PharoJS - Zürich Smalltalk Group Meetup November 2023
PharoJS - Zürich Smalltalk Group Meetup November 2023Noury Bouraqadi
139 views17 slides
STKI Israeli Market Study 2023 corrected forecast 2023_24 v3.pdf by
STKI Israeli Market Study 2023   corrected forecast 2023_24 v3.pdfSTKI Israeli Market Study 2023   corrected forecast 2023_24 v3.pdf
STKI Israeli Market Study 2023 corrected forecast 2023_24 v3.pdfDr. Jimmy Schwarzkopf
24 views29 slides
ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ... by
ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ...ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ...
ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ...Jasper Oosterveld
27 views49 slides
GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N... by
GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N...GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N...
GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N...James Anderson
126 views32 slides
Uni Systems for Power Platform.pptx by
Uni Systems for Power Platform.pptxUni Systems for Power Platform.pptx
Uni Systems for Power Platform.pptxUni Systems S.M.S.A.
58 views21 slides

Recently uploaded(20)

PharoJS - Zürich Smalltalk Group Meetup November 2023 by Noury Bouraqadi
PharoJS - Zürich Smalltalk Group Meetup November 2023PharoJS - Zürich Smalltalk Group Meetup November 2023
PharoJS - Zürich Smalltalk Group Meetup November 2023
Noury Bouraqadi139 views
STKI Israeli Market Study 2023 corrected forecast 2023_24 v3.pdf by Dr. Jimmy Schwarzkopf
STKI Israeli Market Study 2023   corrected forecast 2023_24 v3.pdfSTKI Israeli Market Study 2023   corrected forecast 2023_24 v3.pdf
STKI Israeli Market Study 2023 corrected forecast 2023_24 v3.pdf
ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ... by Jasper Oosterveld
ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ...ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ...
ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ...
GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N... by James Anderson
GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N...GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N...
GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N...
James Anderson126 views
Unit 1_Lecture 2_Physical Design of IoT.pdf by StephenTec
Unit 1_Lecture 2_Physical Design of IoT.pdfUnit 1_Lecture 2_Physical Design of IoT.pdf
Unit 1_Lecture 2_Physical Design of IoT.pdf
StephenTec15 views
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLive by Network Automation Forum
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLiveAutomating a World-Class Technology Conference; Behind the Scenes of CiscoLive
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLive
"Surviving highload with Node.js", Andrii Shumada by Fwdays
"Surviving highload with Node.js", Andrii Shumada "Surviving highload with Node.js", Andrii Shumada
"Surviving highload with Node.js", Andrii Shumada
Fwdays33 views
【USB韌體設計課程】精選講義節錄-USB的列舉過程_艾鍗學院 by IttrainingIttraining
【USB韌體設計課程】精選講義節錄-USB的列舉過程_艾鍗學院【USB韌體設計課程】精選講義節錄-USB的列舉過程_艾鍗學院
【USB韌體設計課程】精選講義節錄-USB的列舉過程_艾鍗學院
Five Things You SHOULD Know About Postman by Postman
Five Things You SHOULD Know About PostmanFive Things You SHOULD Know About Postman
Five Things You SHOULD Know About Postman
Postman38 views
HTTP headers that make your website go faster - devs.gent November 2023 by Thijs Feryn
HTTP headers that make your website go faster - devs.gent November 2023HTTP headers that make your website go faster - devs.gent November 2023
HTTP headers that make your website go faster - devs.gent November 2023
Thijs Feryn26 views
STPI OctaNE CoE Brochure.pdf by madhurjyapb
STPI OctaNE CoE Brochure.pdfSTPI OctaNE CoE Brochure.pdf
STPI OctaNE CoE Brochure.pdf
madhurjyapb14 views
Business Analyst Series 2023 - Week 3 Session 5 by DianaGray10
Business Analyst Series 2023 -  Week 3 Session 5Business Analyst Series 2023 -  Week 3 Session 5
Business Analyst Series 2023 - Week 3 Session 5
DianaGray10345 views

Puppi. Puppet strings to the shell

  • 1. PuppetCamp Europe 2011 27/28 April Amsterdam
  • 2. What’s Puppi? A Puppet Module A Bash Command A tool to automate deployments A SysAdmin friend
  • 4. puppi Usage: puppi <command> [project|topic] [options] Available commands: check [project] - Run puppi checks host-wide or for project log [topic] [-i] - Show system and application specific logs info [topic] [-i] - Show informations about the system init <project> - First time project initialization and setup deploy <project> - Deploy the specified project rollback <project> - Rollback the specified project. Available options: -f - Force puppi commands execution flow also on CRITICAL errors -i - Interactively ask confirmation for every step -t - Test mode. Just show the commands that should be executed -d <yes|full> - Debug mode. Show debug of what is done. -o "parameter=value parameter2=value2" - Set manual options to override defaults Available projects: abnormalia.net git.example42.com openskills.info openskills.info_sql www.example42.com www.example42.com_sql www.lab42.it Available info topics: apache! disks hardware mcollective munin mysql network nrpe ntp! openssh packages perf postfix puppi rsync! users Available log topics: abnormalia.net! auth git.example42.com mail mcollective munin mysql openskills.info rsync system www.example42.com www.lab42.it
  • 6. puppi check # Run all local checks puppi check # Run checks related to myapp puppi check myapp # Checks can be on: # - Running services # - Listening ports # - Pattern match on specific URLs # - General system’s status # - Remote services used by the host # # - Whatever a Nagios plugin can check
  • 7. puppi check # Each check is a Puppet define puppi::check { "NTP_Sync": command => "check_ntp -H ${puppi::params::ntp_server}" , priority => "20" , hostwide => "yes" , } puppi::check { "Port_exim_$port": command => "check_tcp -H ${fqdn} -p ${exim::params::port}" , } puppi::check { "Url_$name": enable => $enable, hostwide => no, project => “myapp”, command => "check_http -I '${target}' -p '${port}' -u '$ {url}' -s '${pattern}'" , }
  • 9. puppi info # Show all the info available puppi info # Interactive. Select the topics to show puppi info -i # Check local resources puppi info network puppi info perf # Module based info sources puppi info openssh puppi info apache # Company and node specific info puppi info mycompany
  • 10. puppi info puppi::info { "network": description => "Network settings and stats" , run => [ "ifconfig”,“route”,“cat /etc resolv.conf”, “netstat -natup|grep LISTEN" ], } puppi::info::module { "openssh": packagename => "${openssh::params::packagename}", servicename => "${openssh::params::servicename}", processname => "${openssh::params::processname}", configfile => "${openssh::params::configfile}", datadir => "${openssh::params::datadir}", logdir => "${openssh::params::logdir}", protocol => "${openssh::params::protocol}", port => "${openssh::params::port}", description => "What Puppet knows about openssh" , run => "ls -la ~/.ssh/", } puppi::info::readme { "mycompany": }
  • 11. puppi log All logs in a single command
  • 12. puppi log # tail -f of all the known logs puppi log # Interactive. CHoose logs to show puppi log -i # Tail of logs related to myapp puppi log myapp Troubleshoot in the quick way
  • 13. puppi log class puppi::logs { puppi::log { "auth": description => "Users and authentication" , log => $operatingsystem ? { Debian,Ubuntu => [ "/var/log/user.log” , “/var/log/auth.log" ], RedHat,CentOS => "/var/log/secure", } } puppi::log { "mail": description => "Mail messages" , log => $operatingsystem ? { Debian,Ubuntu => "/var/log/mail.log", RedHat,CentOS => "/var/log/maillog", } } [...] }
  • 15. puppi deploy # To make this work: puppi deploy www.lab42.it # You write something like: puppi::project::builder { "www.lab42.it": source => "rsync://deploy.${domain}/deploy/www.lab42.it/", init_source => "rsync://deploy.${domain}/init/www.lab42.it", source_type => "dir", deploy_root => "${apache::params::documentroot}/www.lab42.it/", user => "root", disable_services => “apache”, run_checks => “true”, backup => “full”, report_email => "roots@lab42.it", enable => "true", }
  • 16. puppi deploy # Default sample deploy procedures (can be customized) # Check puppi/manifests/project/*.pp puppi::project::builder # General purpose scenario. # Includes most of the cases below puppi::project::war # Deploy a simple war puppi::project::tar # Deploy a tar.gz file puppi::project::maven # Deploy Maven artifacts published on a # Nexus repository puppi::project::mysql # Retrieve and imports a .sql file puppi::project::files # Deploy the files defined in a list
  • 17. puppi deploy # SOME options available in puppi::project::builder # Use them to adapt the default procedures to custom needs define puppi::project::builder ( $source, # URI of source files: http://, ssh://, rsync://... $source_type, # Type of source: tarball, zip, war, dir, maven... $deploy_root, # Destination directory $init_source="", # Source for init command $user="root", # User that makes the deploy $predeploy_customcommand="", # Optional pre-deploy command $postdeploy_customcommand="", # Optional post-deploy command $disable_services="", # Services to stop during deploy. $firewall_src_ip="", # Load balancer IP $report_email="", # Email(s) to notify at the end of the run $backup="full", # Backup method for archiving old data $run_checks="true", # If pre and post deploy checks are run [...] ) {
  • 18. puppi deploy # A deploy procedure contains basic puppi defines: # puppi::deploy, init, project, rollback, report # A sample fragment: puppi::deploy { "${name}-Retrieve_SourceFile": priority => "20" , command => "get_file.sh" , arguments => "-s $source -t $real_source_type" , user => "root" , project => "$name" , enable => $enable ; "${name}-Deploy": priority => "40" , command => "deploy.sh" , arguments => "$deploy_root" , user => "$user" , project => "$name" , enable => $enable; }
  • 19. puppi deploy # The commands executed can be in any language # By default Puppi provides some native commands for general uses: get_file.sh # Retrieve a file using different protocols: # http://, ssh://, file://, svn://, rsync:// ... archive.sh # Backup and recovery data with various options deploy.sh # Copy files to the deploy directory wait.sh # Wait for events (file presence, content check, time...) predeploy.sh # Prepare files to deploy get_metadata.sh # Extract metadata from various sources database.sh # Run database queries # These and other scripts are placed in /etc/puppi/scripts and can # be used during the deploy procedure # All the native scripts use and can write to a runtime # configuration file where are stored parameters related # to the deployment.
  • 20. puppi paths /usr/sbin/puppi # The puppi main command /etc/puppi/ # All puppi configs and scripts /etc/puppi/scripts/ # Where commands are placed /etc/puppi/checks/ # Where checks are defined (Nagios plugins) /etc/puppi/info/ # Where are placed info topic scripts /etc/puppi/logs/ # Where are placed log topic paths /etc/puppi/projects/ # Where are stored deploy projects dirs /etc/puppi/projects/<project_name>/deploy/ # Commands executed # when you type: puppi deploy <project_name> /tmp/puppi/<project_name>/ # Temporary dir used during a deploy /var/lib/puppi/<project_name>/ # Where backups are stored /var/log/puppi/<project_name>/ # Where logs are stored
  • 21. puppi rollback If something can go wrong... One command solves
  • 22. puppi rollback [root@pg01 ~]# puppi rollback www.lab42.it Puppi setup: 00-www.lab42.it-RuntimeConfig-Initialization [ OK ] Choose deploy to rollback: total 52 drwxr-xr-x 2 root root 4096 Mar 29 01:21 20110329-012108 drwxr-xr-x 2 root root 4096 Mar 29 02:59 20110329-025956 drwxr-xr-x 2 root root 4096 Apr 10 22:05 20110410-215942 drwxr-xr-x 2 root root 4096 Apr 19 23:55 20110419-235528 drwxr-xr-x 2 root root 4096 Apr 20 02:41 20110420-024115 drwxr-xr-x 2 root root 4096 Apr 20 02:56 20110420-025621 lrwxrwxrwx 1 root root 51 Apr 20 02:56 latest -> /var/lib/puppi/ archive/www.lab42.it/20110420-025621 Rollback operations require user’s interaction
  • 24. puppi init [root@pg02 ~]# puppi init www.lab42.it Puppi setup: 00-www.lab42.it-RuntimeConfig-Initialization [ OK ] pg02 Init: 40-www.lab42.it-Deploy_Files [ OK ] Reporting: 20-www.lab42.it-Mail_Notification [ OK ] REPORT FOR PUPPI - STATUS OK Summary of operations is: /var/log/puppi/www.lab42.it/ 20110423-005555/summary Details are in: /var/log/puppi/www.lab42.it/20110423-005555/ Temporary workdir has been: /tmp/puppi/www.lab42.it/ (Will be rewritten at the next puppi run) Runtime config file is: /tmp/puppi/www.lab42.it/config Files have been archived in: /var/lib/puppi/archive/www.lab42.it/ 20110423-005555
  • 26. mail notify # Usage in a puppi::project define report_email => "roots@lab42.it al@lab42.it", # The actual code that makes it     puppi::report {         "${name}-Mail_Notification":              command => "report_mail.sh" , arguments => "$report_email" , project => "$name" ,     }
  • 28. mc-puppi # Some examples # Distributed real time check of the whole Infrastructure mc-puppi check # Gather network info of all nodes mc-puppi info network # Deploy myapp on all the nodes of the myapp-fe role mc-puppi -F role=myapp-fe deploy myapp # Instant check on the nodes where you deployed mc-puppi -F role=myapp-fe check # Realtime info on relevant services mc-puppi -F role=myapp-fe info apache # Check last log entries mc-puppi -F role=myapp-fe log apache Bringing puppi commands to MCollective space
  • 31. More notification methods Wider OS support Web Frontend Orchestra
  • 33. Graphics by Tatlin www.tatlin.net