SlideShare uma empresa Scribd logo
1 de 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

Mais conteúdo relacionado

Mais procurados

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
 

Mais procurados (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
 

Semelhante a 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
 

Semelhante a 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)
 

Mais de 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
 

Mais de 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
 

Último

Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 

Último (20)

Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 

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