SlideShare a Scribd company logo
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

More Related Content

What's hot

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
Walter Heck
 
Build Automation 101
Build Automation 101Build Automation 101
Build Automation 101
Martin Jackson
 
Scalable Systems Management with Puppet
Scalable Systems Management with PuppetScalable Systems Management with Puppet
Scalable Systems Management with Puppet
Puppet
 
Puppet for dummies - ZendCon 2011 Edition
Puppet for dummies - ZendCon 2011 EditionPuppet for dummies - ZendCon 2011 Edition
Puppet for dummies - ZendCon 2011 Edition
Joshua 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 & Hadoop
Walter Heck
 
PuppetCamp SEA 1 - Use of Puppet
PuppetCamp SEA 1 - Use of PuppetPuppetCamp SEA 1 - Use of Puppet
PuppetCamp SEA 1 - Use of Puppet
Walter Heck
 
Autoscaling with hashi_corp_nomad
Autoscaling with hashi_corp_nomadAutoscaling with hashi_corp_nomad
Autoscaling with hashi_corp_nomad
Bram Vogelaar
 
Bootstrapping multidc observability stack
Bootstrapping multidc observability stackBootstrapping multidc observability stack
Bootstrapping multidc observability stack
Bram Vogelaar
 
Puppet and the HashiStack
Puppet and the HashiStackPuppet and the HashiStack
Puppet and the HashiStack
Bram 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: Vagrant
Antons 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 Solutions
Martin 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 Rafaniello
ManageIQ
 
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
Martin 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 Chef
Antons Kranga
 
Automation with Ansible and Containers
Automation with Ansible and ContainersAutomation with Ansible and Containers
Automation with Ansible and Containers
Rodolfo Carvalho
 
Observability with Consul Connect
Observability with Consul ConnectObservability with Consul Connect
Observability with Consul Connect
Bram Vogelaar
 
Automated Java Deployments With Rpm
Automated Java Deployments With RpmAutomated Java Deployments With Rpm
Automated Java Deployments With Rpm
Martin Jackson
 
More than syntax
More than syntaxMore than syntax
More than syntax
Wooga
 

What's hot (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
 

Similar to Introduction to MCollective - SF PUG

Large Scale Continuous Delivery
Large Scale Continuous DeliveryLarge Scale Continuous Delivery
Large Scale Continuous Delivery
ripienaar
 
Puppet Performance Profiling - CM Camp 2015
Puppet Performance Profiling - CM Camp 2015Puppet Performance Profiling - CM Camp 2015
Puppet Performance Profiling - CM Camp 2015
ripienaar
 
R.I. Pienaar - Puppet Camp 2010
R.I. Pienaar - Puppet Camp 2010R.I. Pienaar - Puppet Camp 2010
R.I. Pienaar - Puppet Camp 2010
Puppet
 
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
Ritta Narita
 
Whirlwind Tour of Puppet 4
Whirlwind Tour of Puppet 4Whirlwind Tour of Puppet 4
Whirlwind Tour of Puppet 4
ripienaar
 
Introduction to Configuration Management
Introduction to Configuration ManagementIntroduction to Configuration Management
Introduction to Configuration Management
ripienaar
 
Observability and Product Release
Observability and Product ReleaseObservability and Product Release
Observability and Product Release
Sneha Inguva
 
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
Puppet
 
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
Marc Cluet
 
Simple callcenter platform with PHP
Simple callcenter platform with PHPSimple callcenter platform with PHP
Simple callcenter platform with PHP
Morten Amundsen
 
Profiling your Java Application
Profiling your Java ApplicationProfiling your Java Application
Profiling your Java Application
Victor 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 Tutorial
Cohesive Networks
 
Pyramid Deployment and Maintenance
Pyramid Deployment and MaintenancePyramid Deployment and Maintenance
Pyramid Deployment and Maintenance
Jazkarta, 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 Again
Puppet
 
Monitoring using Prometheus and Grafana
Monitoring using Prometheus and GrafanaMonitoring using Prometheus and Grafana
Monitoring using Prometheus and Grafana
Arvind 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 2015
Masahiro Nagano
 
17rmi
17rmi17rmi
17rmi
Adil Jafri
 
Docker for Java Developers
Docker for Java DevelopersDocker for Java Developers
Docker for Java Developers
Imesh 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
 

Similar to 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
 
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
 
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
 
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)
 

More from Puppet

Puppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepoPuppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepo
Puppet
 
Puppetcamp r10kyaml
Puppetcamp r10kyamlPuppetcamp r10kyaml
Puppetcamp r10kyaml
Puppet
 
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 vscode
Puppet
 
Modules of the twenties
Modules of the twentiesModules of the twenties
Modules of the twenties
Puppet
 
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
Puppet
 
KGI compliance as-code approach
KGI compliance as-code approachKGI compliance as-code approach
KGI compliance as-code approach
Puppet
 
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
Puppet
 
Keynote: Puppet camp compliance
Keynote: Puppet camp complianceKeynote: Puppet camp compliance
Keynote: Puppet camp compliance
Puppet
 
Automating it management with Puppet + ServiceNow
Automating it management with Puppet + ServiceNowAutomating it management with Puppet + ServiceNow
Automating it management with Puppet + ServiceNow
Puppet
 
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
Puppet
 
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
Puppet
 
Accelerating azure adoption with puppet
Accelerating azure adoption with puppetAccelerating azure adoption with puppet
Accelerating azure adoption with puppet
Puppet
 
Puppet catalog Diff; Raphael Pinson
Puppet catalog Diff; Raphael PinsonPuppet catalog Diff; Raphael Pinson
Puppet catalog Diff; Raphael Pinson
Puppet
 
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
Puppet
 
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
Puppet
 
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
 
Puppet User Group
Puppet User GroupPuppet User Group
Puppet User Group
Puppet
 
Continuous Compliance and DevSecOps
Continuous Compliance and DevSecOpsContinuous Compliance and DevSecOps
Continuous Compliance and DevSecOps
Puppet
 
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
Puppet
 

More from 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
 

Recently uploaded

Serial Arm Control in Real Time Presentation
Serial Arm Control in Real Time PresentationSerial Arm Control in Real Time Presentation
Serial Arm Control in Real Time Presentation
tolgahangng
 
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
Neo4j
 
UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5
DianaGray10
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
Zilliz
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
KAMESHS29
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
SOFTTECHHUB
 
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial IntelligenceAI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
IndexBug
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
DianaGray10
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
Kumud Singh
 
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
SOFTTECHHUB
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
Zilliz
 
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Safe Software
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc
 
Mariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceXMariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceX
Mariano Tinti
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
Octavian Nadolu
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
Neo4j
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Speck&Tech
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
panagenda
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
Alpen-Adria-Universität
 
Building Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and MilvusBuilding Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and Milvus
Zilliz
 

Recently uploaded (20)

Serial Arm Control in Real Time Presentation
Serial Arm Control in Real Time PresentationSerial Arm Control in Real Time Presentation
Serial Arm Control in Real Time Presentation
 
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
 
UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
 
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial IntelligenceAI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
 
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
 
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
 
Mariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceXMariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceX
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
 
Building Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and MilvusBuilding Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and Milvus
 

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