Hands-on: getting your feet wet
         with puppet
PuppetDB, Exported Resources, 3rd party open source modules,
             git submodules, inventory service



                                    June 5th, 2012
                                    Puppet Camp Southeast Asia
                                    Kuala Lumpur, Malaysia

                                    Walter Heck, OlinData
Overview

•  Introduction OlinData
•  Checkup

•  Set up puppet & puppetdb
•  Set up a 2nd node
•  Add an open source puppet module
•  Implement it and show exported resources usage

•  Future of Puppet in South East Asia
Introduction OlinData

•  OlinData
  ▫  MySQL Consulting
  ▫  Tribily Server Monitoring as a Service (http://tribily.com)
  ▫  Puppet training and consulting

•  Founded in 2008
  ▫  Setup to be run remotely and location independent

•  Started using Puppet in 2010
  ▫  Official puppetlabs partner since 02-2012
  ▫  Experience with large, medium and small
     infrastructures
Checkup

• Who is using puppet? Who's going to?
  Haven't decided yet?

• Who is using puppet in production?
  ▫ Stored configs? Open source
    modules? Exported resources?
    Inventory service?
Prerequisites

• Good mood for tinkering

• VirtualBox Debian 6.0.4 64bit VM

• Internet connection (preferrably > 28k8)
Doing the minimum prep

• Get repository .deb package and
  install it
    ▫  This should be automated into your bootstrapping of course!


#   wget http://apt.puppetlabs.com/puppetlabs-release_1.0-3_all.deb
#   dpkg -i puppetlabs-release_1.0-3_all.deb
#   aptitude update
#   aptitude install puppetmaster-passenger puppet puppetdb 
      puppetdb-terminus
Adjust puppet config files

•  /etc/puppet/puppetdb.conf
    [main]
    server = debian-puppetcamp.example.com
    port = 8081
•  /etc/puppet/puppet.conf
    [master]
    storeconfigs = true
    storeconfigs_backend = puppetdb
•  /etc/puppet/routes.yaml
    master:
      facts:
        terminus: puppetdb
        cache: yaml
Add permissions for inventory service


•  Add permissions to auth.conf
   #NOTE: refine this on a production server!
   path /facts
   auth any
   method find, search
   allow *
Set up SSL certs

•  Run the ssl generating script
   #/usr/sbin/puppetdb-ssl-setup

•  Set the generated password in jetty config file
   #cat /etc/puppetdb/ssl/puppetdb_keystore_pw.txt
   #vim /etc/puppetdb/conf.d/jetty.ini

   [..]
   key-password=tP35htAMH8PUcYVtCAmSVhYbf
   trust-password=tP35htAMH8PUcYVtCAmSVhYbf

•  Set ownership for /etc/puppetdb/ssl
   #chown -R puppetdb:puppetdb /etc/puppetdb/ssl
Check ssl certs

•  Check ssl certs for puppetdb against puppet
  # keytool -list -keystore /etc/puppetdb/ssl/
  keystore.jks
  Enter keystore password:
  Keystore type: JKS
  Keystore provider: SUN
  Your keystore contains 1 entry
  debian-puppetcamp.example.com, Jun 4, 2012,
  PrivateKeyEntry,
  Certificate fingerprint (MD5):
  D7:F1:03:5F:E0:1A:C3:DB:E1:23:C4:CE:43:FA:24:24

  # puppet cert fingerprint debian-
  puppetcamp.example.com --digest=md5
  debian-puppetcamp.example.com
  D7:F1:03:5F:E0:1A:C3:DB:E1:23:C4:CE:43:FA:24:24
Restart

•  Restart apache/passenger & puppetdb
    # /etc/init.d/puppetdb restart && apache2ctl restart

•  Sit back and watch puppetdb log
    2012-06-04 18:02:22,154 WARN [main] [bonecp.BoneCPConfig] JDBC username was not set in
    config!
    2012-06-04 18:02:22,154 WARN [main] [bonecp.BoneCPConfig] JDBC password was not set in
    config!
    2012-06-04 18:02:23,050 INFO [BoneCP-pool-watch-thread] [HSQLDB37B6BA305B.ENGINE]
    checkpointClose start
    2012-06-04 18:02:23,109 INFO [BoneCP-pool-watch-thread] [HSQLDB37B6BA305B.ENGINE]
    checkpointClose end
    2012-06-04 18:02:23,160 INFO [main] [cli.services] Starting broker
    2012-06-04 18:02:24,890 INFO [main] [journal.Journal] ignoring zero length, partially
    initialised journal data file: db-1.log number = 1 , length = 0
    2012-06-04 18:02:25,051 INFO [main] [cli.services] Starting 1 command processor threads
    2012-06-04 18:02:25,063 INFO [main] [cli.services] Starting query server
    2012-06-04 18:02:25,064 INFO [main] [cli.services] Starting database compactor (60 minute
    interval)
    2012-06-04 18:02:25,087 INFO [clojure-agent-send-off-pool-1] [mortbay.log] Logging to
    org.slf4j.impl.Log4jLoggerAdapter(org.mortbay.log) via org.mortbay.log.Slf4jLog
    2012-06-04 18:02:25,090 INFO [clojure-agent-send-off-pool-1] [mortbay.log] jetty-6.1.x
    2012-06-04 18:02:25,140 INFO [clojure-agent-send-off-pool-1] [mortbay.log] Started
    SocketConnector@debian-puppetcamp.example.com:8080
    2012-06-04 18:02:25,885 INFO [clojure-agent-send-off-pool-1] [mortbay.log] Started
    SslSocketConnector@debian-puppetcamp.example.com:8081
Test run!

•  Check for listening connections
    #netstat -ln | grep 808
    tcp6 0 0 127.0.1.1:8080    :::*   LISTEN
    tcp6 0 0 127.0.1.1:8081    :::*   LISTEN
•  Run puppet
    # puppet agent -t
    No LSB modules are available.
    info: Caching catalog for debian-
    puppetcamp.example.com
    info: Applying configuration version '1338804503'
    notice: Finished catalog run in 0.09 seconds
Create git repo/get submodule

•  Create a git repo of our puppet repository
    # git init
    Initialized empty Git repository in /etc/puppet/.git/
    # git add *
    # git commit -m 'initial commit'
    [master (root-commit) bf0eff5] initial commit
     Committer: root <root@debian-puppetcamp.example.com>
     6 files changed, 157 insertions(+), 0 deletions(-)
     create mode 100755 auth.conf
     create mode 100644 fileserver.conf
     create mode 100644 puppet.conf
     create mode 100644 puppetdb.conf
     create mode 100644 routes.yaml
The first beginnings of a new world

•  Add 2 nodes to /etc/puppet/manifests/site.pp
    node 'debian-puppetcamp.example.com' {
       file { '/tmp/puppet.txt':
           ensure => present,
           content => "This is host ${::hostname}n"
       }
    }

    node 'debian-node.example.com' {
       file { '/tmp/puppet.txt':
           ensure => present,
           content => "This is host ${::hostname}n"
       }
    }
Adding a node

•  Install puppet
    # aptitude install puppet

•  Point to puppetmaster
    # vim /etc/hosts
    <ip_of_puppetmaster> puppet
Signing the node

•  Run puppet once to generate cert request
# puppetd -t
info: Creating a new SSL key for debian-node.example.com
warning: peer certificate won't be verified in this SSL session
info: Caching certificate for ca
warning: peer certificate won't be verified in this SSL session
warning: peer certificate won't be verified in this SSL session
info: Creating a new SSL certificate request for debian-node.example.com
info: Certificate Request fingerprint (md5): 17:E0:87:45:F7:05:44:EE:F2:65:89:7B:56:62:CA:A9
warning: peer certificate won't be verified in this SSL session
warning: peer certificate won't be verified in this SSL session
warning: peer certificate won't be verified in this SSL session
Exiting; no certificate found and waitforcert is disabled

•  Sign the request on the master
# puppet cert --list --all
  debian-node.example.com       (17:E0:87:45:F7:05:44:EE:F2:65:89:7B:56:62:CA:A9)
+ debian-puppetcamp.example.com (64:A6:C8:9F:FC:50:3E:79:9D:0D:19:04:4B:29:68:D1) (alt names:
DNS:debian-puppetcamp.example.com, DNS:puppet, DNS:puppet.example.com)
# puppet cert --sign debian-node.example.com
notice: Signed certificate request for debian-node.example.com
notice: Removing file Puppet::SSL::CertificateRequest debian-node.example.com at '/var/lib/puppet/
ssl/ca/requests/debian-node.example.com.pem'
Run puppet and check result

•  Run puppet on node
  # puppetd -t
  warning: peer certificate won't be verified in this SSL session
  info: Caching certificate for debian-node.example.com
  No LSB modules are available.
  info: Caching certificate_revocation_list for ca
  info: Caching catalog for debian-node.example.com
  info: Applying configuration version '1338822174'
  notice: /Stage[main]//Node[debian-node.example.com]/File[/tmp/puppet.txt]/ensure: created
  info: Creating state file /var/lib/puppet/state/state.yaml
  notice: Finished catalog run in 0.06 seconds



•  Check result
  # cat /tmp/puppet.txt
  This is Host debian-node

•  Say “YEAH!”
Adding a git submodule

•  Clone the firewall submodule from github
   # git submodule add https://github.com/puppetlabs/puppetlabs-
   firewall.git modules/firewall
   Cloning into modules/firewall...
   remote: Counting objects: 1065, done.
   remote: Compressing objects: 100% (560/560), done.
   remote: Total 1065 (delta 384), reused 1012 (delta 341)
   Receiving objects: 100% (1065/1065), 158.69 KiB | 117 KiB/s,
   done.
   Resolving deltas: 100% (384/384), done.

•  Commit it to the main repo
   # git add * && git commit -m 'Added 2 node defs and firewall submodule'
   [master d0bab6f] Added 2 node defs and firewall submodule
    Committer: root <root@debian-puppetcamp.example.com>
    3 files changed, 17 insertions(+), 0 deletions(-)
    create mode 100644 .gitmodules
    create mode 100644 manifests/site.pp
    create mode 160000 modules/firewall
Using the new firewall submodule

•  Adjust manifests/site.pp
  node 'basenode' {
      @@firewall { "200 allow conns to the puppetmaster from ${::fqdn}":
          chain     => 'INPUT',
          action    => 'accept',
          proto     => 'tcp',
          dport     => 8140,
           source   => $::ipaddress_eth1,
           tag       => 'role:puppetmaster'
      }
  }

  #Our puppet master
  node 'debian-puppetcamp.example.com' inherits basenode {
      # Gather all Firewall rules here
      Firewall<<| tag == 'role:puppetmaster' |>>
  }

  # Our sample node
  node 'debian-node.example.com' inherits basenode {
  }
Running puppet agent

•  Execute puppet runs on both nodes
  root@debian-puppetcamp:/etc/puppet# puppetd -t
  info: Loading facts in /etc/puppet/modules/firewall/lib/facter/iptables.rb
  No LSB modules are available.
  info: Caching catalog for debian-puppetcamp.example.com
  info: Applying configuration version '1338825096'
  notice: /Firewall[200 allow conns to the puppetmaster from debian-
  puppetcamp.example.com]/ensure: created
  notice: Finished catalog run in 0.47 seconds

  root@debian-node:~# puppetd -t
  No LSB modules are available.
  info: Caching catalog for debian-node.example.com
  info: Applying configuration version '1338825096'
  notice: Finished catalog run in 0.03 seconds
  root@debian-puppetcamp:/etc/puppet# puppetd -t
  info: Loading facts in /etc/puppet/modules/firewall/lib/facter/iptables.rb
  No LSB modules are available.
  info: Caching catalog for debian-puppetcamp.example.com
  info: Applying configuration version '1338825096'
  notice: /Firewall[200 allow conns to the puppetmaster from debian-
  node.example.com]/ensure: created
  notice: Finished catalog run in 0.22 seconds
Checking results

•  Iptables on puppetmaster
  # iptables -L
  Chain INPUT (policy ACCEPT)
  target     prot opt source               destination
  ACCEPT     tcp -- 192.168.0.111          anywhere            multiport dports
  8140 /* 200 allow conns to the puppetmaster from debian-node.example.com */
  ACCEPT     tcp -- 192.168.0.109          anywhere            multiport dports
  8140 /* 200 allow conns to the puppetmaster from debian-puppetcamp.example.com */
  [..]
Inventory service

•  Query for all nodes having debian squeeze
  root@debian-puppetcamp:/etc/puppet# curl -k -H "Accept: yaml" https://puppet:
  8140/production/facts_search/search?facts.lsbdistcodename=squeeze
  &facts.operatingsystem=Debian
  ---
    - debian-puppetcamp.example.com
    - debian-node.example.com

•  Query for facts about a certain node
  root@debian-puppetcamp:/etc/puppet# curl -k -H "Accept: yaml"
  https://puppet:8140/production/facts/debian-puppetcamp.example.com
  --- !ruby/object:Puppet::Node::Facts
    expiration: 2012-06-04 18:38:21.174542 +08:00
    name: debian-puppetcamp.example.com
    values:
       productname: VirtualBox
       Kernelmajversion: "2.6"
       ipaddress_eth0: 10.0.2.15
       kernelversion: 2.6.32
  [..]
PuppetCamp SEA 1 - Use of Puppet
OlinData and Puppet

•  Training
  ▫  Upcoming trainings:
    –  Singapore – August 6-8
    –  Hyderabad – July 11-14
  ▫  Cheaper then in the West (50% or more discount!)
  ▫  Expanding to 5 countries in 5 months

•  Consulting
  ▫  Remote consulting worldwide
  ▫  Ongoing hands-on engineering
  ▫  Start from scratch or improve existing environment
Walter Heck (walterheck@olindata.com)

         @walterheck / @olindata

            #PuppetCampSEA

        http://www.olindata.com

Like us on Facebook: http://fb.me/olindata

More Related Content

PDF
PuppetCamp SEA 1 - Puppet Deployment at OnApp
PDF
PuppetCamp SEA 1 - Version Control with Puppet
PDF
Puppet at Opera Sofware - PuppetCamp Oslo 2013
PDF
DevOps(3) : Ansible - (MOSG)
PDF
DevOps(4) : Ansible(2) - (MOSG)
PDF
Configuration Surgery with Augeas
PDF
Ansible 實戰:top down 觀點
PDF
How we use and deploy Varnish at Opera
PuppetCamp SEA 1 - Puppet Deployment at OnApp
PuppetCamp SEA 1 - Version Control with Puppet
Puppet at Opera Sofware - PuppetCamp Oslo 2013
DevOps(3) : Ansible - (MOSG)
DevOps(4) : Ansible(2) - (MOSG)
Configuration Surgery with Augeas
Ansible 實戰:top down 觀點
How we use and deploy Varnish at Opera

What's hot (19)

PDF
Preparation study of_docker - (MOSG)
KEY
From Dev to DevOps - FOSDEM 2012
KEY
From Dev to DevOps - ApacheCON NA 2011
PDF
rake puppetexpert:create - Puppet Camp Silicon Valley 2014
KEY
Puppet for Java developers - JavaZone NO 2012
PDF
How to Develop Puppet Modules: From Source to the Forge With Zero Clicks
KEY
From Dev to DevOps - Apache Barcamp Spain 2011
PDF
Integrating icinga2 and the HashiCorp suite
PDF
Ansible tips & tricks
PDF
Vagrant for real codemotion (moar tips! ;-))
KEY
PyCon AU 2010 - Getting Started With Apache/mod_wsgi.
PDF
Testing your infrastructure with litmus
PDF
Puppet: Eclipsecon ALM 2013
PDF
Oliver hookins puppetcamp2011
PDF
More tips n tricks
PDF
Py conkr 20150829_docker-python
PDF
Intro to-puppet
PDF
VUG5: Varnish at Opera Software
PDF
Ansible leveraging 2.0
Preparation study of_docker - (MOSG)
From Dev to DevOps - FOSDEM 2012
From Dev to DevOps - ApacheCON NA 2011
rake puppetexpert:create - Puppet Camp Silicon Valley 2014
Puppet for Java developers - JavaZone NO 2012
How to Develop Puppet Modules: From Source to the Forge With Zero Clicks
From Dev to DevOps - Apache Barcamp Spain 2011
Integrating icinga2 and the HashiCorp suite
Ansible tips & tricks
Vagrant for real codemotion (moar tips! ;-))
PyCon AU 2010 - Getting Started With Apache/mod_wsgi.
Testing your infrastructure with litmus
Puppet: Eclipsecon ALM 2013
Oliver hookins puppetcamp2011
More tips n tricks
Py conkr 20150829_docker-python
Intro to-puppet
VUG5: Varnish at Opera Software
Ansible leveraging 2.0
Ad

Viewers also liked (9)

PDF
PuppetCamp SEA 1 - Version Control with Puppet
PDF
PuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & Hadoop
PDF
PuppetCamp SEA 1 - The State of Puppet
PDF
PuppetCamp SEA 1 - Puppet Deployment at OnApp
PDF
On app Carlos Rego
PDF
PuppetCamp SEA 1 - Puppet & FreeBSD
PPTX
Cloud Hosting: Lessons from the trenches
PDF
PuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & Hadoop
PPTX
OnApp Customer Webinar - April 14 2011
PuppetCamp SEA 1 - Version Control with Puppet
PuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & Hadoop
PuppetCamp SEA 1 - The State of Puppet
PuppetCamp SEA 1 - Puppet Deployment at OnApp
On app Carlos Rego
PuppetCamp SEA 1 - Puppet & FreeBSD
Cloud Hosting: Lessons from the trenches
PuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & Hadoop
OnApp Customer Webinar - April 14 2011
Ad

Similar to PuppetCamp SEA 1 - Use of Puppet (20)

PDF
From SaltStack to Puppet and beyond...
PDF
One-Man Ops
PDF
OpenNebula Conf 2014 | Puppet and OpenNebula - David Lutterkort
PDF
OpenNebulaConf 2014 - Puppet and OpenNebula - David Lutterkort
PDF
Puppet getting started by Dirk Götz
PDF
Puppet Camp Düsseldorf 2014: Puppet CA Certificates Explained
PDF
Puppet Camp Duesseldorf 2014: Thomas Gelf - Puppet CA: certificates explained
PDF
JupyterHub tutorial at JupyterCon
PPTX
Virtualization and automation of library software/machines + Puppet
PPTX
k8s practice 2023.pptx
PPTX
drupal ci cd concept cornel univercity.pptx
PDF
Islands: Puppet at Bulletproof Networks
PDF
Troubleshooting the Puppet Enterprise Stack
PPTX
Webinar - Managing Files with Puppet
PDF
Our Puppet Story – Patterns and Learnings (sage@guug, March 2014)
PDF
Using Puppet in Small Infrastructures
PDF
Puppet Primer, Robbie Jerrom, Solution Architect VMware
PDF
V mware
PPTX
Puppet for Developers
From SaltStack to Puppet and beyond...
One-Man Ops
OpenNebula Conf 2014 | Puppet and OpenNebula - David Lutterkort
OpenNebulaConf 2014 - Puppet and OpenNebula - David Lutterkort
Puppet getting started by Dirk Götz
Puppet Camp Düsseldorf 2014: Puppet CA Certificates Explained
Puppet Camp Duesseldorf 2014: Thomas Gelf - Puppet CA: certificates explained
JupyterHub tutorial at JupyterCon
Virtualization and automation of library software/machines + Puppet
k8s practice 2023.pptx
drupal ci cd concept cornel univercity.pptx
Islands: Puppet at Bulletproof Networks
Troubleshooting the Puppet Enterprise Stack
Webinar - Managing Files with Puppet
Our Puppet Story – Patterns and Learnings (sage@guug, March 2014)
Using Puppet in Small Infrastructures
Puppet Primer, Robbie Jerrom, Solution Architect VMware
V mware
Puppet for Developers

More from OlinData (20)

PDF
AWS Cost Control: Cloud Custodian
PPTX
Introduction to 2FA on AWS
PDF
AWS Data Migration case study: from tapes to Glacier
PDF
Issuing temporary credentials for my sql using hashicorp vault
PDF
Log monitoring with Logstash and Icinga
PDF
FOSDEM 2017: GitLab CI
PDF
Cfgmgmtcamp 2017 docker is the new tarball
PDF
Icinga 2 and Puppet - Automate Monitoring
PPTX
Webinar - Auto-deploy Puppet Enterprise: Vagrant and Oscar
PDF
Webinar - High Availability and Distributed Monitoring with Icinga2
PPTX
Webinar - Windows Application Management with Puppet
PDF
Webinar - Continuous Integration with GitLab
PDF
Webinar - Centralising syslogs with the new beats, logstash and elasticsearch
PDF
Icinga 2 and puppet: automate monitoring
PDF
Webinar - Project Management for DevOps
PDF
Using puppet in a traditional enterprise
PDF
Webinar - PuppetDB
PDF
Webinar - Scaling your Puppet infrastructure
PDF
Webinar - Managing your Docker containers and AWS cloud with Puppet
PDF
Webinar - Manage user, groups, packages in windows using puppet
AWS Cost Control: Cloud Custodian
Introduction to 2FA on AWS
AWS Data Migration case study: from tapes to Glacier
Issuing temporary credentials for my sql using hashicorp vault
Log monitoring with Logstash and Icinga
FOSDEM 2017: GitLab CI
Cfgmgmtcamp 2017 docker is the new tarball
Icinga 2 and Puppet - Automate Monitoring
Webinar - Auto-deploy Puppet Enterprise: Vagrant and Oscar
Webinar - High Availability and Distributed Monitoring with Icinga2
Webinar - Windows Application Management with Puppet
Webinar - Continuous Integration with GitLab
Webinar - Centralising syslogs with the new beats, logstash and elasticsearch
Icinga 2 and puppet: automate monitoring
Webinar - Project Management for DevOps
Using puppet in a traditional enterprise
Webinar - PuppetDB
Webinar - Scaling your Puppet infrastructure
Webinar - Managing your Docker containers and AWS cloud with Puppet
Webinar - Manage user, groups, packages in windows using puppet

Recently uploaded (20)

PDF
Improvisation in detection of pomegranate leaf disease using transfer learni...
PPTX
MicrosoftCybserSecurityReferenceArchitecture-April-2025.pptx
PDF
Produktkatalog für HOBO Datenlogger, Wetterstationen, Sensoren, Software und ...
PDF
Taming the Chaos: How to Turn Unstructured Data into Decisions
PDF
“A New Era of 3D Sensing: Transforming Industries and Creating Opportunities,...
PPTX
2018-HIPAA-Renewal-Training for executives
PPTX
TEXTILE technology diploma scope and career opportunities
PDF
Zenith AI: Advanced Artificial Intelligence
PDF
Consumable AI The What, Why & How for Small Teams.pdf
PDF
OpenACC and Open Hackathons Monthly Highlights July 2025
PPTX
Build Your First AI Agent with UiPath.pptx
PDF
UiPath Agentic Automation session 1: RPA to Agents
PDF
Architecture types and enterprise applications.pdf
PDF
Five Habits of High-Impact Board Members
PPTX
Benefits of Physical activity for teenagers.pptx
PPTX
Modernising the Digital Integration Hub
PDF
sustainability-14-14877-v2.pddhzftheheeeee
PDF
A review of recent deep learning applications in wood surface defect identifi...
PPTX
Custom Battery Pack Design Considerations for Performance and Safety
PDF
A contest of sentiment analysis: k-nearest neighbor versus neural network
Improvisation in detection of pomegranate leaf disease using transfer learni...
MicrosoftCybserSecurityReferenceArchitecture-April-2025.pptx
Produktkatalog für HOBO Datenlogger, Wetterstationen, Sensoren, Software und ...
Taming the Chaos: How to Turn Unstructured Data into Decisions
“A New Era of 3D Sensing: Transforming Industries and Creating Opportunities,...
2018-HIPAA-Renewal-Training for executives
TEXTILE technology diploma scope and career opportunities
Zenith AI: Advanced Artificial Intelligence
Consumable AI The What, Why & How for Small Teams.pdf
OpenACC and Open Hackathons Monthly Highlights July 2025
Build Your First AI Agent with UiPath.pptx
UiPath Agentic Automation session 1: RPA to Agents
Architecture types and enterprise applications.pdf
Five Habits of High-Impact Board Members
Benefits of Physical activity for teenagers.pptx
Modernising the Digital Integration Hub
sustainability-14-14877-v2.pddhzftheheeeee
A review of recent deep learning applications in wood surface defect identifi...
Custom Battery Pack Design Considerations for Performance and Safety
A contest of sentiment analysis: k-nearest neighbor versus neural network

PuppetCamp SEA 1 - Use of Puppet

  • 1. Hands-on: getting your feet wet with puppet PuppetDB, Exported Resources, 3rd party open source modules, git submodules, inventory service June 5th, 2012 Puppet Camp Southeast Asia Kuala Lumpur, Malaysia Walter Heck, OlinData
  • 2. Overview •  Introduction OlinData •  Checkup •  Set up puppet & puppetdb •  Set up a 2nd node •  Add an open source puppet module •  Implement it and show exported resources usage •  Future of Puppet in South East Asia
  • 3. Introduction OlinData •  OlinData ▫  MySQL Consulting ▫  Tribily Server Monitoring as a Service (http://tribily.com) ▫  Puppet training and consulting •  Founded in 2008 ▫  Setup to be run remotely and location independent •  Started using Puppet in 2010 ▫  Official puppetlabs partner since 02-2012 ▫  Experience with large, medium and small infrastructures
  • 4. Checkup • Who is using puppet? Who's going to? Haven't decided yet? • Who is using puppet in production? ▫ Stored configs? Open source modules? Exported resources? Inventory service?
  • 5. Prerequisites • Good mood for tinkering • VirtualBox Debian 6.0.4 64bit VM • Internet connection (preferrably > 28k8)
  • 6. Doing the minimum prep • Get repository .deb package and install it ▫  This should be automated into your bootstrapping of course! # wget http://apt.puppetlabs.com/puppetlabs-release_1.0-3_all.deb # dpkg -i puppetlabs-release_1.0-3_all.deb # aptitude update # aptitude install puppetmaster-passenger puppet puppetdb puppetdb-terminus
  • 7. Adjust puppet config files •  /etc/puppet/puppetdb.conf [main] server = debian-puppetcamp.example.com port = 8081 •  /etc/puppet/puppet.conf [master] storeconfigs = true storeconfigs_backend = puppetdb •  /etc/puppet/routes.yaml master: facts: terminus: puppetdb cache: yaml
  • 8. Add permissions for inventory service •  Add permissions to auth.conf #NOTE: refine this on a production server! path /facts auth any method find, search allow *
  • 9. Set up SSL certs •  Run the ssl generating script #/usr/sbin/puppetdb-ssl-setup •  Set the generated password in jetty config file #cat /etc/puppetdb/ssl/puppetdb_keystore_pw.txt #vim /etc/puppetdb/conf.d/jetty.ini [..] key-password=tP35htAMH8PUcYVtCAmSVhYbf trust-password=tP35htAMH8PUcYVtCAmSVhYbf •  Set ownership for /etc/puppetdb/ssl #chown -R puppetdb:puppetdb /etc/puppetdb/ssl
  • 10. Check ssl certs •  Check ssl certs for puppetdb against puppet # keytool -list -keystore /etc/puppetdb/ssl/ keystore.jks Enter keystore password: Keystore type: JKS Keystore provider: SUN Your keystore contains 1 entry debian-puppetcamp.example.com, Jun 4, 2012, PrivateKeyEntry, Certificate fingerprint (MD5): D7:F1:03:5F:E0:1A:C3:DB:E1:23:C4:CE:43:FA:24:24 # puppet cert fingerprint debian- puppetcamp.example.com --digest=md5 debian-puppetcamp.example.com D7:F1:03:5F:E0:1A:C3:DB:E1:23:C4:CE:43:FA:24:24
  • 11. Restart •  Restart apache/passenger & puppetdb # /etc/init.d/puppetdb restart && apache2ctl restart •  Sit back and watch puppetdb log 2012-06-04 18:02:22,154 WARN [main] [bonecp.BoneCPConfig] JDBC username was not set in config! 2012-06-04 18:02:22,154 WARN [main] [bonecp.BoneCPConfig] JDBC password was not set in config! 2012-06-04 18:02:23,050 INFO [BoneCP-pool-watch-thread] [HSQLDB37B6BA305B.ENGINE] checkpointClose start 2012-06-04 18:02:23,109 INFO [BoneCP-pool-watch-thread] [HSQLDB37B6BA305B.ENGINE] checkpointClose end 2012-06-04 18:02:23,160 INFO [main] [cli.services] Starting broker 2012-06-04 18:02:24,890 INFO [main] [journal.Journal] ignoring zero length, partially initialised journal data file: db-1.log number = 1 , length = 0 2012-06-04 18:02:25,051 INFO [main] [cli.services] Starting 1 command processor threads 2012-06-04 18:02:25,063 INFO [main] [cli.services] Starting query server 2012-06-04 18:02:25,064 INFO [main] [cli.services] Starting database compactor (60 minute interval) 2012-06-04 18:02:25,087 INFO [clojure-agent-send-off-pool-1] [mortbay.log] Logging to org.slf4j.impl.Log4jLoggerAdapter(org.mortbay.log) via org.mortbay.log.Slf4jLog 2012-06-04 18:02:25,090 INFO [clojure-agent-send-off-pool-1] [mortbay.log] jetty-6.1.x 2012-06-04 18:02:25,140 INFO [clojure-agent-send-off-pool-1] [mortbay.log] Started SocketConnector@debian-puppetcamp.example.com:8080 2012-06-04 18:02:25,885 INFO [clojure-agent-send-off-pool-1] [mortbay.log] Started SslSocketConnector@debian-puppetcamp.example.com:8081
  • 12. Test run! •  Check for listening connections #netstat -ln | grep 808 tcp6 0 0 127.0.1.1:8080 :::* LISTEN tcp6 0 0 127.0.1.1:8081 :::* LISTEN •  Run puppet # puppet agent -t No LSB modules are available. info: Caching catalog for debian- puppetcamp.example.com info: Applying configuration version '1338804503' notice: Finished catalog run in 0.09 seconds
  • 13. Create git repo/get submodule •  Create a git repo of our puppet repository # git init Initialized empty Git repository in /etc/puppet/.git/ # git add * # git commit -m 'initial commit' [master (root-commit) bf0eff5] initial commit Committer: root <root@debian-puppetcamp.example.com> 6 files changed, 157 insertions(+), 0 deletions(-) create mode 100755 auth.conf create mode 100644 fileserver.conf create mode 100644 puppet.conf create mode 100644 puppetdb.conf create mode 100644 routes.yaml
  • 14. The first beginnings of a new world •  Add 2 nodes to /etc/puppet/manifests/site.pp node 'debian-puppetcamp.example.com' { file { '/tmp/puppet.txt': ensure => present, content => "This is host ${::hostname}n" } } node 'debian-node.example.com' { file { '/tmp/puppet.txt': ensure => present, content => "This is host ${::hostname}n" } }
  • 15. Adding a node •  Install puppet # aptitude install puppet •  Point to puppetmaster # vim /etc/hosts <ip_of_puppetmaster> puppet
  • 16. Signing the node •  Run puppet once to generate cert request # puppetd -t info: Creating a new SSL key for debian-node.example.com warning: peer certificate won't be verified in this SSL session info: Caching certificate for ca warning: peer certificate won't be verified in this SSL session warning: peer certificate won't be verified in this SSL session info: Creating a new SSL certificate request for debian-node.example.com info: Certificate Request fingerprint (md5): 17:E0:87:45:F7:05:44:EE:F2:65:89:7B:56:62:CA:A9 warning: peer certificate won't be verified in this SSL session warning: peer certificate won't be verified in this SSL session warning: peer certificate won't be verified in this SSL session Exiting; no certificate found and waitforcert is disabled •  Sign the request on the master # puppet cert --list --all debian-node.example.com (17:E0:87:45:F7:05:44:EE:F2:65:89:7B:56:62:CA:A9) + debian-puppetcamp.example.com (64:A6:C8:9F:FC:50:3E:79:9D:0D:19:04:4B:29:68:D1) (alt names: DNS:debian-puppetcamp.example.com, DNS:puppet, DNS:puppet.example.com) # puppet cert --sign debian-node.example.com notice: Signed certificate request for debian-node.example.com notice: Removing file Puppet::SSL::CertificateRequest debian-node.example.com at '/var/lib/puppet/ ssl/ca/requests/debian-node.example.com.pem'
  • 17. Run puppet and check result •  Run puppet on node # puppetd -t warning: peer certificate won't be verified in this SSL session info: Caching certificate for debian-node.example.com No LSB modules are available. info: Caching certificate_revocation_list for ca info: Caching catalog for debian-node.example.com info: Applying configuration version '1338822174' notice: /Stage[main]//Node[debian-node.example.com]/File[/tmp/puppet.txt]/ensure: created info: Creating state file /var/lib/puppet/state/state.yaml notice: Finished catalog run in 0.06 seconds •  Check result # cat /tmp/puppet.txt This is Host debian-node •  Say “YEAH!”
  • 18. Adding a git submodule •  Clone the firewall submodule from github # git submodule add https://github.com/puppetlabs/puppetlabs- firewall.git modules/firewall Cloning into modules/firewall... remote: Counting objects: 1065, done. remote: Compressing objects: 100% (560/560), done. remote: Total 1065 (delta 384), reused 1012 (delta 341) Receiving objects: 100% (1065/1065), 158.69 KiB | 117 KiB/s, done. Resolving deltas: 100% (384/384), done. •  Commit it to the main repo # git add * && git commit -m 'Added 2 node defs and firewall submodule' [master d0bab6f] Added 2 node defs and firewall submodule Committer: root <root@debian-puppetcamp.example.com> 3 files changed, 17 insertions(+), 0 deletions(-) create mode 100644 .gitmodules create mode 100644 manifests/site.pp create mode 160000 modules/firewall
  • 19. Using the new firewall submodule •  Adjust manifests/site.pp node 'basenode' { @@firewall { "200 allow conns to the puppetmaster from ${::fqdn}": chain => 'INPUT', action => 'accept', proto => 'tcp', dport => 8140, source => $::ipaddress_eth1, tag => 'role:puppetmaster' } } #Our puppet master node 'debian-puppetcamp.example.com' inherits basenode { # Gather all Firewall rules here Firewall<<| tag == 'role:puppetmaster' |>> } # Our sample node node 'debian-node.example.com' inherits basenode { }
  • 20. Running puppet agent •  Execute puppet runs on both nodes root@debian-puppetcamp:/etc/puppet# puppetd -t info: Loading facts in /etc/puppet/modules/firewall/lib/facter/iptables.rb No LSB modules are available. info: Caching catalog for debian-puppetcamp.example.com info: Applying configuration version '1338825096' notice: /Firewall[200 allow conns to the puppetmaster from debian- puppetcamp.example.com]/ensure: created notice: Finished catalog run in 0.47 seconds root@debian-node:~# puppetd -t No LSB modules are available. info: Caching catalog for debian-node.example.com info: Applying configuration version '1338825096' notice: Finished catalog run in 0.03 seconds root@debian-puppetcamp:/etc/puppet# puppetd -t info: Loading facts in /etc/puppet/modules/firewall/lib/facter/iptables.rb No LSB modules are available. info: Caching catalog for debian-puppetcamp.example.com info: Applying configuration version '1338825096' notice: /Firewall[200 allow conns to the puppetmaster from debian- node.example.com]/ensure: created notice: Finished catalog run in 0.22 seconds
  • 21. Checking results •  Iptables on puppetmaster # iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT tcp -- 192.168.0.111 anywhere multiport dports 8140 /* 200 allow conns to the puppetmaster from debian-node.example.com */ ACCEPT tcp -- 192.168.0.109 anywhere multiport dports 8140 /* 200 allow conns to the puppetmaster from debian-puppetcamp.example.com */ [..]
  • 22. Inventory service •  Query for all nodes having debian squeeze root@debian-puppetcamp:/etc/puppet# curl -k -H "Accept: yaml" https://puppet: 8140/production/facts_search/search?facts.lsbdistcodename=squeeze &facts.operatingsystem=Debian --- - debian-puppetcamp.example.com - debian-node.example.com •  Query for facts about a certain node root@debian-puppetcamp:/etc/puppet# curl -k -H "Accept: yaml" https://puppet:8140/production/facts/debian-puppetcamp.example.com --- !ruby/object:Puppet::Node::Facts expiration: 2012-06-04 18:38:21.174542 +08:00 name: debian-puppetcamp.example.com values: productname: VirtualBox Kernelmajversion: "2.6" ipaddress_eth0: 10.0.2.15 kernelversion: 2.6.32 [..]
  • 24. OlinData and Puppet •  Training ▫  Upcoming trainings: –  Singapore – August 6-8 –  Hyderabad – July 11-14 ▫  Cheaper then in the West (50% or more discount!) ▫  Expanding to 5 countries in 5 months •  Consulting ▫  Remote consulting worldwide ▫  Ongoing hands-on engineering ▫  Start from scratch or improve existing environment
  • 25. Walter Heck (walterheck@olindata.com) @walterheck / @olindata #PuppetCampSEA http://www.olindata.com Like us on Facebook: http://fb.me/olindata