SlideShare ist ein Scribd-Unternehmen logo
1 von 52
R.I.Pienaar
San Francisco - 29 May 2013
Introduction
to MCollective
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Who am I?
• Puppet user since 0.22.x
• Architect of MCollective
• Author of Extlookup and Hiera
• Developer at Puppet Labs London
• Blog at http://devco.net
• Tweets at @ripienaar
• Volcane on IRC
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
What is MCollective?
Framework for building server
orchestration and parallel job execution
systems
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Framework provides
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
• Server Addressing
Framework provides
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
• Server Addressing
• Logging
Framework provides
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
• Server Addressing
• Logging
• Connectivity
Framework provides
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
• Server Addressing
• Logging
• Connectivity
• Authentication,Authorization and Auditing
Framework provides
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
• Server Addressing
• Logging
• Connectivity
• Authentication,Authorization and Auditing
• Data Structures andValidation
Framework provides
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
• Server Addressing
• Logging
• Connectivity
• Authentication,Authorization and Auditing
• Data Structures andValidation
• Generated or Custom User Interface
Framework provides
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
• Server Addressing
• Logging
• Connectivity
• Authentication,Authorization and Auditing
• Data Structures andValidation
• Generated or Custom User Interface
• Shell Completion
Framework provides
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
• Server Addressing
• Logging
• Connectivity
• Authentication,Authorization and Auditing
• Data Structures andValidation
• Generated or Custom User Interface
• Shell Completion
• Ruby based with debuggers and unit/integration testing
Framework provides
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
• Server Addressing
• Logging
• Connectivity
• Authentication,Authorization and Auditing
• Data Structures andValidation
• Generated or Custom User Interface
• Shell Completion
• Ruby based with debuggers and unit/integration testing
• Synchronous, Asynchronous and Hybrid comms modes
Framework provides
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
• Server Addressing
• Logging
• Connectivity
• Authentication,Authorization and Auditing
• Data Structures andValidation
• Generated or Custom User Interface
• Shell Completion
• Ruby based with debuggers and unit/integration testing
• Synchronous, Asynchronous and Hybrid comms modes
• ...everything is pluggable
Framework provides
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
CLI Overview
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Default CLI
$ mco rpc puppet status
Discovering hosts using the mongo method .... 28
*
[
==========================================================
==> ] 28 / 28
devco.net
Applying: false
Daemon Running: false
Enabled: true
Idling: false
Status: stopped
.
.
Summary of Daemon Running:
stopped = 28
Summary of Enabled:
enabled = 28
Summary of Idling:
false = 28
Summary of Status:
stopped = 28
Finished processing 28 / 28 hosts in 270.99 ms
Pluggable source of
truth
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Default CLI
$ mco rpc puppet status
Discovering hosts using the mongo method .... 28
*
[
==========================================================
==> ] 28 / 28
devco.net
Applying: false
Daemon Running: false
Enabled: true
Idling: false
Status: stopped
.
.
Summary of Daemon Running:
stopped = 28
Summary of Enabled:
enabled = 28
Summary of Idling:
false = 28
Summary of Status:
stopped = 28
Finished processing 28 / 28 hosts in 270.99 ms
Completion Progress
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Default CLI
$ mco rpc puppet status
Discovering hosts using the mongo method .... 28
*
[
==========================================================
==> ] 28 / 28
devco.net
Applying: false
Daemon Running: false
Enabled: true
Idling: false
Status: stopped
.
.
Summary of Daemon Running:
stopped = 28
Summary of Enabled:
enabled = 28
Summary of Idling:
false = 28
Summary of Status:
stopped = 28
Finished processing 28 / 28 hosts in 270.99 ms
Results in a Human
friendly format
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Default CLI
$ mco rpc puppet status
Discovering hosts using the mongo method .... 28
*
[
==========================================================
==> ] 28 / 28
devco.net
Applying: false
Daemon Running: false
Enabled: true
Idling: false
Status: stopped
.
.
Summary of Daemon Running:
stopped = 28
Summary of Enabled:
enabled = 28
Summary of Idling:
false = 28
Summary of Status:
stopped = 28
Finished processing 28 / 28 hosts in 270.99 ms
Summary for the
entire result set
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Default CLI
$ mco rpc puppet status
Discovering hosts using the mongo method .... 28
*
[
==========================================================
==> ] 28 / 28
devco.net
Applying: false
Daemon Running: false
Enabled: true
Idling: false
Status: stopped
.
.
Summary of Daemon Running:
stopped = 28
Summary of Enabled:
enabled = 28
Summary of Idling:
false = 28
Summary of Status:
stopped = 28
Finished processing 28 / 28 hosts in 270.99 ms
28 RPC results
across 3 countries
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Default CLI
$ mco rpc libvirt domaininfo domain=devco_net
Discovering hosts using the mongo method .... 4
*
[
==========================================================
==> ] 4 / 4
kvm1.devco.net
Autostart: true
CPU Time: 1652031000000000
Current Snapshot: false
Managed Save: false
Max Memory: 2097152
Memory: 2097152
Number of Snapshots: 0
Persistent: true
Snapshots: []
State Code: 1
State: Running
UUID: a6e10d5b-fa5a-8d0c-cbc2-d63b1043970a
VCPUs: 2
Finished processing 4 / 4 hosts in 340.09 ms
4 results, only
shows most
appropriate 1
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Default CLI
$ mco rpc libvirt domaininfo domain=devco_net -j -I kvm1.devco.net
[
{
"statusmsg": "OK",
"data": {
"max_memory": 2097152,
"num_of_snapshots": 0,
"state": 1,
"memory": 2097152,
"cputime": 1652082980000000,
"has_current_snapshot": false,
"state_description": "Running",
"has_managed_save": false,
"autostart": true,
"persistent": true,
"vcpus": 2,
"uuid": "a6e10d5b-fa5a-8d0c-cbc2-d63b1043970a",
"snapshots": [
]
},
"sender": "kvm1.devco.net",
"agent": "libvirt",
"action": "domaininfo",
"statuscode": 0
}
]
Everything is DATA
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Server Addressing
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Class Filters
$ mco package status httpd -C /apache/
Server Addressing
Nodes with Puppet Classes /apache/
applied
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Fact Filters
$ mco package status httpd -F country=uk
Server Addressing
Nodes with the custom fact “country”
set to “uk”
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Identity Filters
$ mco package status httpd -I devco.net
Server Addressing
One specific node called “devco.net”
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Simple Combined Fact and Class Filters
$ mco package .... -W “country=uk /apache/”
Server Addressing
Nodes in the UK with Puppet Classes
matching /apache/
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Compound Statements for facts, classes and data
$ mco .. -S “((country=uk and /apache/) 
or customer=acme) 
and puppet().config_retrieval_time > 30"
Server Addressing
UK nodes with Apache in addition to all
nodes for “customer=acme” where
Puppet compiles are slow
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Request Security
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
SSL Security setup for user “rip”
securityprovider = ssl
plugin.ssl_client_private = /home/rip/.mcollective.d/rip-private.pem
plugin.ssl_client_public = /home/rip/.mcollective.d/rip.pem
Authentication
Pluggable - PSK, SSL,AES, SSH, etc
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Authorization rules for “puppet” agent
policy default deny
allow cert=rip runonce environment=production customer=acme
Authorization
Set by security system
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Authorization rules for “puppet” agent
policy default deny
allow cert=rip runonce environment=production customer=acme
Authorization
List of Actions
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Authorization rules for “puppet” agent
policy default deny
allow cert=rip * environment=production apache
allow cert=dev runonce maintenance().scheduled=true
Authorization
Facts, Classes and Data Plugins
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Pluggable audit output - this is for Logstash
{'@source_host' => "devco.net",
 '@tags' => [],
 '@type' => 'mcollective-audit',
 '@source' => 'mcollective-audit',
 '@timestamp' => "2013-05-27T18:18:22.000000+0100",
'@fields' => {'uniqid' => "cebb1eed9d505ce1a699dce9c5e1fb39",
               'request_time' => "2013-05-27T18:18:22.000000+0100",
               'callerhost' => "devco.net",
               'caller' => "cert=rip",
               'agent' => "puppet",
               'action' => "runonce",
               'data' => {}},
               '@message' => "devco.net: cert=rip@devco.net invoked agent
puppet#runonce"}
Auditing
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Quick Agent Guide
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
MCollective Agents
• Units of addressable logic
• An agent has actions - package agent has
update, status, install, uninstall etc
• Written in Ruby, actions can be Python,
PHP, Perl and others
• Deployable for interactive commands,
background daemons, SOA style services,
etc
• Optional custom user interfaces
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Generate a skeleton agent
$ mco plugin generate agent nrpe actions=runcommand
Created plugin directory : nrpe
Created DDL file : nrpe/agent/nrpe.ddl
Created Agent file : nrpe/agent/nrpe.rb
Writing an Agent
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
DDL File describes the agent for UI
generation and input validation
metadata :name => "nrpe",
         :description => "NRPE Agent",
         :author => "R.I.Pienaar <rip@devco.net>",
         :license => "ASL2.0",
         :version => "0.1",
         :url => "http://devco.net",
         :timeout => 10
action "runcommand", :description => "Run a preconfigured NRPE command" do
    input :command,
          :prompt      => "Command",
          :description => "NRPE command to run",
          :type        => :string,
          :validation  => 'A[a-zA-Z0-9_-]+z',
          :optional    => false,
          :maxlength   => 50
    output :exitcode,
           :description  => "Exit Code from the Nagios plugin",
           :display_as   => "Exit Code",
           :default      => 3
    .
    .
    .
end
Writing an Agent
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Agent logic
module MCollective
  module Agent
    class Nrpe<RPC::Agent
      action "runcommand" do
        reply[:exitcode] = run(get_nrpe_command(request[:command]),
                               :stdout => :output,
                               :stderr => :output,
                               :chomp  => true)
      end
      def get_nrpe_command(command)
        # not shown
      end
    end
  end
end
Writing an Agent
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Ready to deploy...
Writing an Agent
$ mco plugin package
Created RPM and SRPM packages for mcollective-nrpe-agent
Created RPM and SRPM packages for mcollective-nrpe-common
$ ls -l *rpm
mcollective-nrpe-agent-0.1-1.noarch.rpm
mcollective-nrpe-agent-0.1-1.src.rpm
mcollective-nrpe-common-0.1-1.noarch.rpm
mcollective-nrpe-common-0.1-1.src.rpm
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
...but test your code first using
mcollective-test gem
Writing an Agent
describe "nrpe agent" do
  describe "#runcommand" do
    before do
      @agent = MCollective::Test::LocalAgentTest.new("nrpe",
:agent_file => “agent/nrpe.rb”).plugin
    end
    it "should return correct status" do
      @agent.expects(:get_nrpe_command).returns("/bin/true")
      result = @agent.call(:runcommand, :command => "rspec")
      result.should be_successful
      result.should have_data_items(:exitcode=>0)
    end
  end
end
Custom matchers
and helpers
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Post deployment, interact using
standard RPC user interface
Writing an Agent
$ mco rpc nrpe runcommand command=check_load
Discovering hosts using the mongo method .... 28
* [ ============================================================> ]
28 / 28
devco.net Request Aborted
UNKNOWN
Summary of Exit Code:
OK : 27
WARNING : 1
UNKNOWN : 0
CRITICAL : 0
Finished processing 28 / 28 hosts in 418.42 ms
Agents can provide custom
aggregation plugins
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
...or web interfaces with auto-generated
user interfaces based on the DDL
Writing an Agent
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
...or web interfaces with auto-generated
user interfaces based on the DDL
Writing an Agent
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
New in MCollective 2
• Entirely rewritten messaging layer
• Asynchronous mode
• Additional non-broadcast based comms
• Reliable messaging with TTLs and Queues
• Batched mode to affect nodes in groups
• Improved RabbitMQ and ActiveMQ support
• Pluggable discovery against your own source of truth
• Data plugins for discovery, data query and ACLs
• Plugin Generators and Packaging
• Improved Security
• MS Windows Support
• DDL based pluggableValidation on clients and servers
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Future
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Better Docs
• New Deployment Guide - http://docs.puppetlabs.com/
mcollective/deploy/
• Improved ActiveMQ docs for MCollective - http://
docs.puppetlabs.com/mcollective/deploy/middleware/
• ...agent development reference docs up next
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
More turnkey plugins
with dedicated
developer. Improved
plugin ecosystem.
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Complex workflow
orchestration scripts
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Improved support for
background and long
running commands
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
SOA like framework
R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar
Questions?
twitter: @ripienaar
email: rip@puppetlabs.com
blog: www.devco.net
github: ripienaar
freenode: Volcane
vagrant demo: http://srt.ly/mcvagrant

Weitere ähnliche Inhalte

Was ist angesagt?

PuppetCamp SEA 1 - Puppet Deployment at OnApp
PuppetCamp SEA 1 - Puppet Deployment  at OnAppPuppetCamp SEA 1 - Puppet Deployment  at OnApp
PuppetCamp SEA 1 - Puppet Deployment at OnAppWalter Heck
 
Scalable Systems Management with Puppet
Scalable Systems Management with PuppetScalable Systems Management with Puppet
Scalable Systems Management with PuppetPuppet
 
Puppet for dummies - ZendCon 2011 Edition
Puppet for dummies - ZendCon 2011 EditionPuppet for dummies - ZendCon 2011 Edition
Puppet for dummies - ZendCon 2011 EditionJoshua Thijssen
 
PuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & Hadoop
PuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & HadoopPuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & Hadoop
PuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & HadoopWalter Heck
 
PuppetCamp SEA 1 - Use of Puppet
PuppetCamp SEA 1 - Use of PuppetPuppetCamp SEA 1 - Use of Puppet
PuppetCamp SEA 1 - Use of PuppetWalter Heck
 
Autoscaling with hashi_corp_nomad
Autoscaling with hashi_corp_nomadAutoscaling with hashi_corp_nomad
Autoscaling with hashi_corp_nomadBram Vogelaar
 
Bootstrapping multidc observability stack
Bootstrapping multidc observability stackBootstrapping multidc observability stack
Bootstrapping multidc observability stackBram Vogelaar
 
Puppet and the HashiStack
Puppet and the HashiStackPuppet and the HashiStack
Puppet and the HashiStackBram Vogelaar
 
How Danga::Socket handles asynchronous processing and how to write asynchrono...
How Danga::Socket handles asynchronous processing and how to write asynchrono...How Danga::Socket handles asynchronous processing and how to write asynchrono...
How Danga::Socket handles asynchronous processing and how to write asynchrono...Gosuke Miyashita
 
DevOps Hackathon - Session 1: Vagrant
DevOps Hackathon - Session 1: VagrantDevOps Hackathon - Session 1: Vagrant
DevOps Hackathon - Session 1: VagrantAntons Kranga
 
IT Infrastructure Through The Public Network Challenges And Solutions
IT Infrastructure Through The Public Network   Challenges And SolutionsIT Infrastructure Through The Public Network   Challenges And Solutions
IT Infrastructure Through The Public Network Challenges And SolutionsMartin Jackson
 
Design Summit - Migrating to Ruby 2 - Joe Rafaniello
Design Summit - Migrating to Ruby 2 - Joe RafanielloDesign Summit - Migrating to Ruby 2 - Joe Rafaniello
Design Summit - Migrating to Ruby 2 - Joe RafanielloManageIQ
 
Fixing Growing Pains With Puppet Data Patterns
Fixing Growing Pains With Puppet Data PatternsFixing Growing Pains With Puppet Data Patterns
Fixing Growing Pains With Puppet Data PatternsMartin Jackson
 
Ansible 實戰:top down 觀點
Ansible 實戰:top down 觀點Ansible 實戰:top down 觀點
Ansible 實戰:top down 觀點William Yeh
 
DevOps hackathon Session 2: Basics of Chef
DevOps hackathon Session 2: Basics of ChefDevOps hackathon Session 2: Basics of Chef
DevOps hackathon Session 2: Basics of ChefAntons Kranga
 
Automation with Ansible and Containers
Automation with Ansible and ContainersAutomation with Ansible and Containers
Automation with Ansible and ContainersRodolfo Carvalho
 
Observability with Consul Connect
Observability with Consul ConnectObservability with Consul Connect
Observability with Consul ConnectBram Vogelaar
 
Automated Java Deployments With Rpm
Automated Java Deployments With RpmAutomated Java Deployments With Rpm
Automated Java Deployments With RpmMartin Jackson
 
More than syntax
More than syntaxMore than syntax
More than syntaxWooga
 

Was ist angesagt? (20)

PuppetCamp SEA 1 - Puppet Deployment at OnApp
PuppetCamp SEA 1 - Puppet Deployment  at OnAppPuppetCamp SEA 1 - Puppet Deployment  at OnApp
PuppetCamp SEA 1 - Puppet Deployment at OnApp
 
Build Automation 101
Build Automation 101Build Automation 101
Build Automation 101
 
Scalable Systems Management with Puppet
Scalable Systems Management with PuppetScalable Systems Management with Puppet
Scalable Systems Management with Puppet
 
Puppet for dummies - ZendCon 2011 Edition
Puppet for dummies - ZendCon 2011 EditionPuppet for dummies - ZendCon 2011 Edition
Puppet for dummies - ZendCon 2011 Edition
 
PuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & Hadoop
PuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & HadoopPuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & Hadoop
PuppetCamp SEA 1 - Using Vagrant, Puppet, Testing & Hadoop
 
PuppetCamp SEA 1 - Use of Puppet
PuppetCamp SEA 1 - Use of PuppetPuppetCamp SEA 1 - Use of Puppet
PuppetCamp SEA 1 - Use of Puppet
 
Autoscaling with hashi_corp_nomad
Autoscaling with hashi_corp_nomadAutoscaling with hashi_corp_nomad
Autoscaling with hashi_corp_nomad
 
Bootstrapping multidc observability stack
Bootstrapping multidc observability stackBootstrapping multidc observability stack
Bootstrapping multidc observability stack
 
Puppet and the HashiStack
Puppet and the HashiStackPuppet and the HashiStack
Puppet and the HashiStack
 
How Danga::Socket handles asynchronous processing and how to write asynchrono...
How Danga::Socket handles asynchronous processing and how to write asynchrono...How Danga::Socket handles asynchronous processing and how to write asynchrono...
How Danga::Socket handles asynchronous processing and how to write asynchrono...
 
DevOps Hackathon - Session 1: Vagrant
DevOps Hackathon - Session 1: VagrantDevOps Hackathon - Session 1: Vagrant
DevOps Hackathon - Session 1: Vagrant
 
IT Infrastructure Through The Public Network Challenges And Solutions
IT Infrastructure Through The Public Network   Challenges And SolutionsIT Infrastructure Through The Public Network   Challenges And Solutions
IT Infrastructure Through The Public Network Challenges And Solutions
 
Design Summit - Migrating to Ruby 2 - Joe Rafaniello
Design Summit - Migrating to Ruby 2 - Joe RafanielloDesign Summit - Migrating to Ruby 2 - Joe Rafaniello
Design Summit - Migrating to Ruby 2 - Joe Rafaniello
 
Fixing Growing Pains With Puppet Data Patterns
Fixing Growing Pains With Puppet Data PatternsFixing Growing Pains With Puppet Data Patterns
Fixing Growing Pains With Puppet Data Patterns
 
Ansible 實戰:top down 觀點
Ansible 實戰:top down 觀點Ansible 實戰:top down 觀點
Ansible 實戰:top down 觀點
 
DevOps hackathon Session 2: Basics of Chef
DevOps hackathon Session 2: Basics of ChefDevOps hackathon Session 2: Basics of Chef
DevOps hackathon Session 2: Basics of Chef
 
Automation with Ansible and Containers
Automation with Ansible and ContainersAutomation with Ansible and Containers
Automation with Ansible and Containers
 
Observability with Consul Connect
Observability with Consul ConnectObservability with Consul Connect
Observability with Consul Connect
 
Automated Java Deployments With Rpm
Automated Java Deployments With RpmAutomated Java Deployments With Rpm
Automated Java Deployments With Rpm
 
More than syntax
More than syntaxMore than syntax
More than syntax
 

Ähnlich wie Introduction to MCollective - SF PUG

Large Scale Continuous Delivery
Large Scale Continuous DeliveryLarge Scale Continuous Delivery
Large Scale Continuous Deliveryripienaar
 
Puppet Performance Profiling - CM Camp 2015
Puppet Performance Profiling - CM Camp 2015Puppet Performance Profiling - CM Camp 2015
Puppet Performance Profiling - CM Camp 2015ripienaar
 
R.I. Pienaar - Puppet Camp 2010
R.I. Pienaar - Puppet Camp 2010R.I. Pienaar - Puppet Camp 2010
R.I. Pienaar - Puppet Camp 2010Puppet
 
Fluentd Meetup 2016 - ServerEngine Integration & Windows support
Fluentd Meetup 2016 - ServerEngine Integration & Windows supportFluentd Meetup 2016 - ServerEngine Integration & Windows support
Fluentd Meetup 2016 - ServerEngine Integration & Windows supportRitta Narita
 
Whirlwind Tour of Puppet 4
Whirlwind Tour of Puppet 4Whirlwind Tour of Puppet 4
Whirlwind Tour of Puppet 4ripienaar
 
Introduction to Configuration Management
Introduction to Configuration ManagementIntroduction to Configuration Management
Introduction to Configuration Managementripienaar
 
Observability and Product Release
Observability and Product ReleaseObservability and Product Release
Observability and Product ReleaseSneha Inguva
 
Puppet Camp London Fall 2015 - Service Discovery and Puppet
Puppet Camp London Fall 2015 - Service Discovery and PuppetPuppet Camp London Fall 2015 - Service Discovery and Puppet
Puppet Camp London Fall 2015 - Service Discovery and PuppetMarc Cluet
 
London Puppet Camp 2015: Service Discovery and Puppet
London Puppet Camp 2015: Service Discovery and PuppetLondon Puppet Camp 2015: Service Discovery and Puppet
London Puppet Camp 2015: Service Discovery and PuppetPuppet
 
Simple callcenter platform with PHP
Simple callcenter platform with PHPSimple callcenter platform with PHP
Simple callcenter platform with PHPMorten Amundsen
 
Profiling your Java Application
Profiling your Java ApplicationProfiling your Java Application
Profiling your Java ApplicationVictor Rentea
 
Chris Swan ONUG Academy - Container Networks Tutorial
Chris Swan ONUG Academy - Container Networks TutorialChris Swan ONUG Academy - Container Networks Tutorial
Chris Swan ONUG Academy - Container Networks TutorialCohesive Networks
 
Pyramid Deployment and Maintenance
Pyramid Deployment and MaintenancePyramid Deployment and Maintenance
Pyramid Deployment and MaintenanceJazkarta, Inc.
 
Puppet Camp Charlotte 2015: Exporting Resources: There and Back Again
Puppet Camp Charlotte 2015: Exporting Resources: There and Back AgainPuppet Camp Charlotte 2015: Exporting Resources: There and Back Again
Puppet Camp Charlotte 2015: Exporting Resources: There and Back AgainPuppet
 
Monitoring using Prometheus and Grafana
Monitoring using Prometheus and GrafanaMonitoring using Prometheus and Grafana
Monitoring using Prometheus and GrafanaArvind Kumar G.S
 
Rhebok, High Performance Rack Handler / Rubykaigi 2015
Rhebok, High Performance Rack Handler / Rubykaigi 2015Rhebok, High Performance Rack Handler / Rubykaigi 2015
Rhebok, High Performance Rack Handler / Rubykaigi 2015Masahiro Nagano
 
Docker for Java Developers
Docker for Java DevelopersDocker for Java Developers
Docker for Java DevelopersImesh Gunaratne
 
Session: A Reference Architecture for Running Modern APIs with NGINX Unit and...
Session: A Reference Architecture for Running Modern APIs with NGINX Unit and...Session: A Reference Architecture for Running Modern APIs with NGINX Unit and...
Session: A Reference Architecture for Running Modern APIs with NGINX Unit and...NGINX, Inc.
 
App development with quasar (pdf)
App development with quasar (pdf)App development with quasar (pdf)
App development with quasar (pdf)wonyong hwang
 

Ähnlich wie Introduction to MCollective - SF PUG (20)

Large Scale Continuous Delivery
Large Scale Continuous DeliveryLarge Scale Continuous Delivery
Large Scale Continuous Delivery
 
Puppet Performance Profiling - CM Camp 2015
Puppet Performance Profiling - CM Camp 2015Puppet Performance Profiling - CM Camp 2015
Puppet Performance Profiling - CM Camp 2015
 
R.I. Pienaar - Puppet Camp 2010
R.I. Pienaar - Puppet Camp 2010R.I. Pienaar - Puppet Camp 2010
R.I. Pienaar - Puppet Camp 2010
 
Fluentd Meetup 2016 - ServerEngine Integration & Windows support
Fluentd Meetup 2016 - ServerEngine Integration & Windows supportFluentd Meetup 2016 - ServerEngine Integration & Windows support
Fluentd Meetup 2016 - ServerEngine Integration & Windows support
 
Whirlwind Tour of Puppet 4
Whirlwind Tour of Puppet 4Whirlwind Tour of Puppet 4
Whirlwind Tour of Puppet 4
 
Introduction to Configuration Management
Introduction to Configuration ManagementIntroduction to Configuration Management
Introduction to Configuration Management
 
Observability and Product Release
Observability and Product ReleaseObservability and Product Release
Observability and Product Release
 
Puppet Camp London Fall 2015 - Service Discovery and Puppet
Puppet Camp London Fall 2015 - Service Discovery and PuppetPuppet Camp London Fall 2015 - Service Discovery and Puppet
Puppet Camp London Fall 2015 - Service Discovery and Puppet
 
London Puppet Camp 2015: Service Discovery and Puppet
London Puppet Camp 2015: Service Discovery and PuppetLondon Puppet Camp 2015: Service Discovery and Puppet
London Puppet Camp 2015: Service Discovery and Puppet
 
Simple callcenter platform with PHP
Simple callcenter platform with PHPSimple callcenter platform with PHP
Simple callcenter platform with PHP
 
Profiling your Java Application
Profiling your Java ApplicationProfiling your Java Application
Profiling your Java Application
 
Chris Swan ONUG Academy - Container Networks Tutorial
Chris Swan ONUG Academy - Container Networks TutorialChris Swan ONUG Academy - Container Networks Tutorial
Chris Swan ONUG Academy - Container Networks Tutorial
 
Pyramid Deployment and Maintenance
Pyramid Deployment and MaintenancePyramid Deployment and Maintenance
Pyramid Deployment and Maintenance
 
Puppet Camp Charlotte 2015: Exporting Resources: There and Back Again
Puppet Camp Charlotte 2015: Exporting Resources: There and Back AgainPuppet Camp Charlotte 2015: Exporting Resources: There and Back Again
Puppet Camp Charlotte 2015: Exporting Resources: There and Back Again
 
Monitoring using Prometheus and Grafana
Monitoring using Prometheus and GrafanaMonitoring using Prometheus and Grafana
Monitoring using Prometheus and Grafana
 
Rhebok, High Performance Rack Handler / Rubykaigi 2015
Rhebok, High Performance Rack Handler / Rubykaigi 2015Rhebok, High Performance Rack Handler / Rubykaigi 2015
Rhebok, High Performance Rack Handler / Rubykaigi 2015
 
17rmi
17rmi17rmi
17rmi
 
Docker for Java Developers
Docker for Java DevelopersDocker for Java Developers
Docker for Java Developers
 
Session: A Reference Architecture for Running Modern APIs with NGINX Unit and...
Session: A Reference Architecture for Running Modern APIs with NGINX Unit and...Session: A Reference Architecture for Running Modern APIs with NGINX Unit and...
Session: A Reference Architecture for Running Modern APIs with NGINX Unit and...
 
App development with quasar (pdf)
App development with quasar (pdf)App development with quasar (pdf)
App development with quasar (pdf)
 

Mehr von Puppet

Puppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepoPuppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepoPuppet
 
Puppetcamp r10kyaml
Puppetcamp r10kyamlPuppetcamp r10kyaml
Puppetcamp r10kyamlPuppet
 
2021 04-15 operational verification (with notes)
2021 04-15 operational verification (with notes)2021 04-15 operational verification (with notes)
2021 04-15 operational verification (with notes)Puppet
 
Puppet camp vscode
Puppet camp vscodePuppet camp vscode
Puppet camp vscodePuppet
 
Modules of the twenties
Modules of the twentiesModules of the twenties
Modules of the twentiesPuppet
 
Applying Roles and Profiles method to compliance code
Applying Roles and Profiles method to compliance codeApplying Roles and Profiles method to compliance code
Applying Roles and Profiles method to compliance codePuppet
 
KGI compliance as-code approach
KGI compliance as-code approachKGI compliance as-code approach
KGI compliance as-code approachPuppet
 
Enforce compliance policy with model-driven automation
Enforce compliance policy with model-driven automationEnforce compliance policy with model-driven automation
Enforce compliance policy with model-driven automationPuppet
 
Keynote: Puppet camp compliance
Keynote: Puppet camp complianceKeynote: Puppet camp compliance
Keynote: Puppet camp compliancePuppet
 
Automating it management with Puppet + ServiceNow
Automating it management with Puppet + ServiceNowAutomating it management with Puppet + ServiceNow
Automating it management with Puppet + ServiceNowPuppet
 
Puppet: The best way to harden Windows
Puppet: The best way to harden WindowsPuppet: The best way to harden Windows
Puppet: The best way to harden WindowsPuppet
 
Simplified Patch Management with Puppet - Oct. 2020
Simplified Patch Management with Puppet - Oct. 2020Simplified Patch Management with Puppet - Oct. 2020
Simplified Patch Management with Puppet - Oct. 2020Puppet
 
Accelerating azure adoption with puppet
Accelerating azure adoption with puppetAccelerating azure adoption with puppet
Accelerating azure adoption with puppetPuppet
 
Puppet catalog Diff; Raphael Pinson
Puppet catalog Diff; Raphael PinsonPuppet catalog Diff; Raphael Pinson
Puppet catalog Diff; Raphael PinsonPuppet
 
ServiceNow and Puppet- better together, Kevin Reeuwijk
ServiceNow and Puppet- better together, Kevin ReeuwijkServiceNow and Puppet- better together, Kevin Reeuwijk
ServiceNow and Puppet- better together, Kevin ReeuwijkPuppet
 
Take control of your dev ops dumping ground
Take control of your  dev ops dumping groundTake control of your  dev ops dumping ground
Take control of your dev ops dumping groundPuppet
 
100% Puppet Cloud Deployment of Legacy Software
100% Puppet Cloud Deployment of Legacy Software100% Puppet Cloud Deployment of Legacy Software
100% Puppet Cloud Deployment of Legacy SoftwarePuppet
 
Puppet User Group
Puppet User GroupPuppet User Group
Puppet User GroupPuppet
 
Continuous Compliance and DevSecOps
Continuous Compliance and DevSecOpsContinuous Compliance and DevSecOps
Continuous Compliance and DevSecOpsPuppet
 
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick Maludy
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick MaludyThe Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick Maludy
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick MaludyPuppet
 

Mehr von Puppet (20)

Puppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepoPuppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepo
 
Puppetcamp r10kyaml
Puppetcamp r10kyamlPuppetcamp r10kyaml
Puppetcamp r10kyaml
 
2021 04-15 operational verification (with notes)
2021 04-15 operational verification (with notes)2021 04-15 operational verification (with notes)
2021 04-15 operational verification (with notes)
 
Puppet camp vscode
Puppet camp vscodePuppet camp vscode
Puppet camp vscode
 
Modules of the twenties
Modules of the twentiesModules of the twenties
Modules of the twenties
 
Applying Roles and Profiles method to compliance code
Applying Roles and Profiles method to compliance codeApplying Roles and Profiles method to compliance code
Applying Roles and Profiles method to compliance code
 
KGI compliance as-code approach
KGI compliance as-code approachKGI compliance as-code approach
KGI compliance as-code approach
 
Enforce compliance policy with model-driven automation
Enforce compliance policy with model-driven automationEnforce compliance policy with model-driven automation
Enforce compliance policy with model-driven automation
 
Keynote: Puppet camp compliance
Keynote: Puppet camp complianceKeynote: Puppet camp compliance
Keynote: Puppet camp compliance
 
Automating it management with Puppet + ServiceNow
Automating it management with Puppet + ServiceNowAutomating it management with Puppet + ServiceNow
Automating it management with Puppet + ServiceNow
 
Puppet: The best way to harden Windows
Puppet: The best way to harden WindowsPuppet: The best way to harden Windows
Puppet: The best way to harden Windows
 
Simplified Patch Management with Puppet - Oct. 2020
Simplified Patch Management with Puppet - Oct. 2020Simplified Patch Management with Puppet - Oct. 2020
Simplified Patch Management with Puppet - Oct. 2020
 
Accelerating azure adoption with puppet
Accelerating azure adoption with puppetAccelerating azure adoption with puppet
Accelerating azure adoption with puppet
 
Puppet catalog Diff; Raphael Pinson
Puppet catalog Diff; Raphael PinsonPuppet catalog Diff; Raphael Pinson
Puppet catalog Diff; Raphael Pinson
 
ServiceNow and Puppet- better together, Kevin Reeuwijk
ServiceNow and Puppet- better together, Kevin ReeuwijkServiceNow and Puppet- better together, Kevin Reeuwijk
ServiceNow and Puppet- better together, Kevin Reeuwijk
 
Take control of your dev ops dumping ground
Take control of your  dev ops dumping groundTake control of your  dev ops dumping ground
Take control of your dev ops dumping ground
 
100% Puppet Cloud Deployment of Legacy Software
100% Puppet Cloud Deployment of Legacy Software100% Puppet Cloud Deployment of Legacy Software
100% Puppet Cloud Deployment of Legacy Software
 
Puppet User Group
Puppet User GroupPuppet User Group
Puppet User Group
 
Continuous Compliance and DevSecOps
Continuous Compliance and DevSecOpsContinuous Compliance and DevSecOps
Continuous Compliance and DevSecOps
 
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick Maludy
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick MaludyThe Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick Maludy
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick Maludy
 

Kürzlich hochgeladen

From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsRoshan Dwivedi
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 

Kürzlich hochgeladen (20)

From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 

Introduction to MCollective - SF PUG

  • 1. R.I.Pienaar San Francisco - 29 May 2013 Introduction to MCollective
  • 2. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Who am I? • Puppet user since 0.22.x • Architect of MCollective • Author of Extlookup and Hiera • Developer at Puppet Labs London • Blog at http://devco.net • Tweets at @ripienaar • Volcane on IRC
  • 3. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar What is MCollective? Framework for building server orchestration and parallel job execution systems
  • 4. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Framework provides
  • 5. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar • Server Addressing Framework provides
  • 6. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar • Server Addressing • Logging Framework provides
  • 7. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar • Server Addressing • Logging • Connectivity Framework provides
  • 8. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar • Server Addressing • Logging • Connectivity • Authentication,Authorization and Auditing Framework provides
  • 9. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar • Server Addressing • Logging • Connectivity • Authentication,Authorization and Auditing • Data Structures andValidation Framework provides
  • 10. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar • Server Addressing • Logging • Connectivity • Authentication,Authorization and Auditing • Data Structures andValidation • Generated or Custom User Interface Framework provides
  • 11. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar • Server Addressing • Logging • Connectivity • Authentication,Authorization and Auditing • Data Structures andValidation • Generated or Custom User Interface • Shell Completion Framework provides
  • 12. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar • Server Addressing • Logging • Connectivity • Authentication,Authorization and Auditing • Data Structures andValidation • Generated or Custom User Interface • Shell Completion • Ruby based with debuggers and unit/integration testing Framework provides
  • 13. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar • Server Addressing • Logging • Connectivity • Authentication,Authorization and Auditing • Data Structures andValidation • Generated or Custom User Interface • Shell Completion • Ruby based with debuggers and unit/integration testing • Synchronous, Asynchronous and Hybrid comms modes Framework provides
  • 14. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar • Server Addressing • Logging • Connectivity • Authentication,Authorization and Auditing • Data Structures andValidation • Generated or Custom User Interface • Shell Completion • Ruby based with debuggers and unit/integration testing • Synchronous, Asynchronous and Hybrid comms modes • ...everything is pluggable Framework provides
  • 15. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar CLI Overview
  • 16. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Default CLI $ mco rpc puppet status Discovering hosts using the mongo method .... 28 * [ ========================================================== ==> ] 28 / 28 devco.net Applying: false Daemon Running: false Enabled: true Idling: false Status: stopped . . Summary of Daemon Running: stopped = 28 Summary of Enabled: enabled = 28 Summary of Idling: false = 28 Summary of Status: stopped = 28 Finished processing 28 / 28 hosts in 270.99 ms Pluggable source of truth
  • 17. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Default CLI $ mco rpc puppet status Discovering hosts using the mongo method .... 28 * [ ========================================================== ==> ] 28 / 28 devco.net Applying: false Daemon Running: false Enabled: true Idling: false Status: stopped . . Summary of Daemon Running: stopped = 28 Summary of Enabled: enabled = 28 Summary of Idling: false = 28 Summary of Status: stopped = 28 Finished processing 28 / 28 hosts in 270.99 ms Completion Progress
  • 18. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Default CLI $ mco rpc puppet status Discovering hosts using the mongo method .... 28 * [ ========================================================== ==> ] 28 / 28 devco.net Applying: false Daemon Running: false Enabled: true Idling: false Status: stopped . . Summary of Daemon Running: stopped = 28 Summary of Enabled: enabled = 28 Summary of Idling: false = 28 Summary of Status: stopped = 28 Finished processing 28 / 28 hosts in 270.99 ms Results in a Human friendly format
  • 19. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Default CLI $ mco rpc puppet status Discovering hosts using the mongo method .... 28 * [ ========================================================== ==> ] 28 / 28 devco.net Applying: false Daemon Running: false Enabled: true Idling: false Status: stopped . . Summary of Daemon Running: stopped = 28 Summary of Enabled: enabled = 28 Summary of Idling: false = 28 Summary of Status: stopped = 28 Finished processing 28 / 28 hosts in 270.99 ms Summary for the entire result set
  • 20. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Default CLI $ mco rpc puppet status Discovering hosts using the mongo method .... 28 * [ ========================================================== ==> ] 28 / 28 devco.net Applying: false Daemon Running: false Enabled: true Idling: false Status: stopped . . Summary of Daemon Running: stopped = 28 Summary of Enabled: enabled = 28 Summary of Idling: false = 28 Summary of Status: stopped = 28 Finished processing 28 / 28 hosts in 270.99 ms 28 RPC results across 3 countries
  • 21. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Default CLI $ mco rpc libvirt domaininfo domain=devco_net Discovering hosts using the mongo method .... 4 * [ ========================================================== ==> ] 4 / 4 kvm1.devco.net Autostart: true CPU Time: 1652031000000000 Current Snapshot: false Managed Save: false Max Memory: 2097152 Memory: 2097152 Number of Snapshots: 0 Persistent: true Snapshots: [] State Code: 1 State: Running UUID: a6e10d5b-fa5a-8d0c-cbc2-d63b1043970a VCPUs: 2 Finished processing 4 / 4 hosts in 340.09 ms 4 results, only shows most appropriate 1
  • 22. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Default CLI $ mco rpc libvirt domaininfo domain=devco_net -j -I kvm1.devco.net [ { "statusmsg": "OK", "data": { "max_memory": 2097152, "num_of_snapshots": 0, "state": 1, "memory": 2097152, "cputime": 1652082980000000, "has_current_snapshot": false, "state_description": "Running", "has_managed_save": false, "autostart": true, "persistent": true, "vcpus": 2, "uuid": "a6e10d5b-fa5a-8d0c-cbc2-d63b1043970a", "snapshots": [ ] }, "sender": "kvm1.devco.net", "agent": "libvirt", "action": "domaininfo", "statuscode": 0 } ] Everything is DATA
  • 23. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Server Addressing
  • 24. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Class Filters $ mco package status httpd -C /apache/ Server Addressing Nodes with Puppet Classes /apache/ applied
  • 25. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Fact Filters $ mco package status httpd -F country=uk Server Addressing Nodes with the custom fact “country” set to “uk”
  • 26. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Identity Filters $ mco package status httpd -I devco.net Server Addressing One specific node called “devco.net”
  • 27. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Simple Combined Fact and Class Filters $ mco package .... -W “country=uk /apache/” Server Addressing Nodes in the UK with Puppet Classes matching /apache/
  • 28. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Compound Statements for facts, classes and data $ mco .. -S “((country=uk and /apache/) or customer=acme) and puppet().config_retrieval_time > 30" Server Addressing UK nodes with Apache in addition to all nodes for “customer=acme” where Puppet compiles are slow
  • 29. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Request Security
  • 30. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar SSL Security setup for user “rip” securityprovider = ssl plugin.ssl_client_private = /home/rip/.mcollective.d/rip-private.pem plugin.ssl_client_public = /home/rip/.mcollective.d/rip.pem Authentication Pluggable - PSK, SSL,AES, SSH, etc
  • 31. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Authorization rules for “puppet” agent policy default deny allow cert=rip runonce environment=production customer=acme Authorization Set by security system
  • 32. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Authorization rules for “puppet” agent policy default deny allow cert=rip runonce environment=production customer=acme Authorization List of Actions
  • 33. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Authorization rules for “puppet” agent policy default deny allow cert=rip * environment=production apache allow cert=dev runonce maintenance().scheduled=true Authorization Facts, Classes and Data Plugins
  • 34. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Pluggable audit output - this is for Logstash {'@source_host' => "devco.net",  '@tags' => [],  '@type' => 'mcollective-audit',  '@source' => 'mcollective-audit',  '@timestamp' => "2013-05-27T18:18:22.000000+0100", '@fields' => {'uniqid' => "cebb1eed9d505ce1a699dce9c5e1fb39",                'request_time' => "2013-05-27T18:18:22.000000+0100",                'callerhost' => "devco.net",                'caller' => "cert=rip",                'agent' => "puppet",                'action' => "runonce",                'data' => {}},                '@message' => "devco.net: cert=rip@devco.net invoked agent puppet#runonce"} Auditing
  • 35. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Quick Agent Guide
  • 36. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar MCollective Agents • Units of addressable logic • An agent has actions - package agent has update, status, install, uninstall etc • Written in Ruby, actions can be Python, PHP, Perl and others • Deployable for interactive commands, background daemons, SOA style services, etc • Optional custom user interfaces
  • 37. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Generate a skeleton agent $ mco plugin generate agent nrpe actions=runcommand Created plugin directory : nrpe Created DDL file : nrpe/agent/nrpe.ddl Created Agent file : nrpe/agent/nrpe.rb Writing an Agent
  • 38. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar DDL File describes the agent for UI generation and input validation metadata :name => "nrpe",          :description => "NRPE Agent",          :author => "R.I.Pienaar <rip@devco.net>",          :license => "ASL2.0",          :version => "0.1",          :url => "http://devco.net",          :timeout => 10 action "runcommand", :description => "Run a preconfigured NRPE command" do     input :command,           :prompt      => "Command",           :description => "NRPE command to run",           :type        => :string,           :validation  => 'A[a-zA-Z0-9_-]+z',           :optional    => false,           :maxlength   => 50     output :exitcode,            :description  => "Exit Code from the Nagios plugin",            :display_as   => "Exit Code",            :default      => 3     .     .     . end Writing an Agent
  • 39. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Agent logic module MCollective   module Agent     class Nrpe<RPC::Agent       action "runcommand" do         reply[:exitcode] = run(get_nrpe_command(request[:command]),                                :stdout => :output,                                :stderr => :output,                                :chomp  => true)       end       def get_nrpe_command(command)         # not shown       end     end   end end Writing an Agent
  • 40. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Ready to deploy... Writing an Agent $ mco plugin package Created RPM and SRPM packages for mcollective-nrpe-agent Created RPM and SRPM packages for mcollective-nrpe-common $ ls -l *rpm mcollective-nrpe-agent-0.1-1.noarch.rpm mcollective-nrpe-agent-0.1-1.src.rpm mcollective-nrpe-common-0.1-1.noarch.rpm mcollective-nrpe-common-0.1-1.src.rpm
  • 41. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar ...but test your code first using mcollective-test gem Writing an Agent describe "nrpe agent" do   describe "#runcommand" do     before do       @agent = MCollective::Test::LocalAgentTest.new("nrpe", :agent_file => “agent/nrpe.rb”).plugin     end     it "should return correct status" do       @agent.expects(:get_nrpe_command).returns("/bin/true")       result = @agent.call(:runcommand, :command => "rspec")       result.should be_successful       result.should have_data_items(:exitcode=>0)     end   end end Custom matchers and helpers
  • 42. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Post deployment, interact using standard RPC user interface Writing an Agent $ mco rpc nrpe runcommand command=check_load Discovering hosts using the mongo method .... 28 * [ ============================================================> ] 28 / 28 devco.net Request Aborted UNKNOWN Summary of Exit Code: OK : 27 WARNING : 1 UNKNOWN : 0 CRITICAL : 0 Finished processing 28 / 28 hosts in 418.42 ms Agents can provide custom aggregation plugins
  • 43. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar ...or web interfaces with auto-generated user interfaces based on the DDL Writing an Agent
  • 44. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar ...or web interfaces with auto-generated user interfaces based on the DDL Writing an Agent
  • 45. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar New in MCollective 2 • Entirely rewritten messaging layer • Asynchronous mode • Additional non-broadcast based comms • Reliable messaging with TTLs and Queues • Batched mode to affect nodes in groups • Improved RabbitMQ and ActiveMQ support • Pluggable discovery against your own source of truth • Data plugins for discovery, data query and ACLs • Plugin Generators and Packaging • Improved Security • MS Windows Support • DDL based pluggableValidation on clients and servers
  • 46. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Future
  • 47. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Better Docs • New Deployment Guide - http://docs.puppetlabs.com/ mcollective/deploy/ • Improved ActiveMQ docs for MCollective - http:// docs.puppetlabs.com/mcollective/deploy/middleware/ • ...agent development reference docs up next
  • 48. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar More turnkey plugins with dedicated developer. Improved plugin ecosystem.
  • 49. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Complex workflow orchestration scripts
  • 50. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Improved support for background and long running commands
  • 51. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar SOA like framework
  • 52. R.I.Pienaar | rip@devco.net | http://devco.net | @ripienaar Questions? twitter: @ripienaar email: rip@puppetlabs.com blog: www.devco.net github: ripienaar freenode: Volcane vagrant demo: http://srt.ly/mcvagrant