Upload
dotruc
View
225
Download
4
Embed Size (px)
Citation preview
MCollectiveResistance is Futile…and stuff.
Gary LarizzaPuppet Labs@glarizza
Just Do It.
Just thesemachines
Tell meabout it
Don’t takeforever
MCollective?
• Framework for System Management
•Orchestration
MCollective?
• Framework for System Management
•Orchestration
What Problems Does This Solve?
• System discovery
• Task execution
• Inventory/Data collection
• Configuration/Package management steroids
“MCollective is like a chainsaw, taped to a chainsaw, swinging in the air.”
WHY MCollective?
•No centralized inventory
• Thousands of Nodes
• Framework for Creation
Many Servers - One Client
• Servers: PROVIDE data
• Client: RECEIVES information/data
The Big Black Box?Message Queue
MCollective
MiddlewareBroker
Topic
CollectiveAgent
Client
Server
RPC
The Big Black Box?
The Big Black Box?• Sender/Receiver
•Request (The Message)
•Message Transfer
•Response (Also A Message)
How Does it Work?(in the simplest fashion ever, please)
Collective
Message Queue
‘client’
‘servers’
Collective
mco ping --with-fact sevenofnine=true
Message Queue
‘client’
‘servers’
Collective
mco ping --with-fact sevenofnine=true
Message Queue
‘client’
‘servers’
Collective
mco ping --with-fact sevenofnine=true
Message Queue
‘client’
‘servers’
Collective
mco ping --with-fact sevenofnine=true
Message Queue
‘client’
‘servers’
Collective
mco ping --with-fact sevenofnine=true
Message Queue
‘client’
‘servers’
Middleware?• The Software that handles
communication between services.
• The SERVICE that transfers the ‘request’ and the ‘response’.
• No logic ITSELF - like TCP/IP
What’s a Message Queue?
• Data store that applications can write-to or read-from.
• SMTP Analogy: Like the mail queue on your smtp server.
• The individual chat room in the IRC analogy.
We’re British; we queue!
Agents?• File containing Actions
•Actions = commands to execute
• Filtering for free
home$ rm -Rf /
Agents:Simple (as) RPC
• ‘SimpleRPC’ is the framework we use for creating agents
• Abstracts common/difficult tasks (discovery, filtering)
• Agents written in Ruby
• Shell-out for exection
Simple Agent
Printer
'list' lpstat -a | cut -d ' ' -f 1
module MCollective module Agent class Printer<RPC::Agent metadata :name => 'printer', :description => 'Printers and printing', :author => 'Gary Larizza', :license => 'BSD', :version => '0.1', :url =>'http://puppetlabs.com', :timeout => 100
action 'list' do reply[:output] = `lpstat -a | cut -d ' ' -f 1`.split end end endend
Simple Agent
Printer
'list' lpstat -a | cut -d ' ' -f 1
module MCollective module Agent class Printer<RPC::Agent metadata :name => 'printer', :description => 'Printers and printing', :author => 'Gary Larizza', :license => 'BSD', :version => '0.1', :url =>'http://puppetlabs.com', :timeout => 100
action 'list' do reply[:output] = `lpstat -a | cut -d ' ' -f 1`.split end end endend
Simple Agent
Printer
'list' lpstat -a | cut -d ' ' -f 1
module MCollective module Agent class Printer<RPC::Agent metadata :name => 'printer', :description => 'Printers and printing', :author => 'Gary Larizza', :license => 'BSD', :version => '0.1', :url =>'http://puppetlabs.com', :timeout => 100
action 'list' do reply[:output] = `lpstat -a | cut -d ' ' -f 1`.split end end endend
Simple Agent
Printer
'list' lpstat -a | cut -d ' ' -f 1
module MCollective module Agent class Printer<RPC::Agent metadata :name => 'printer', :description => 'Printers and printing', :author => 'Gary Larizza', :license => 'BSD', :version => '0.1', :url =>'http://puppetlabs.com', :timeout => 100
action 'list' do reply[:output] = `lpstat -a | cut -d ' ' -f 1`.split end end endend
Simple Agent
Printer
'list' lpstat -a | cut -d ' ' -f 1
module MCollective module Agent class Printer<RPC::Agent metadata :name => 'printer', :description => 'Printers and printing', :author => 'Gary Larizza', :license => 'BSD', :version => '0.1', :url =>'http://puppetlabs.com', :timeout => 100
action 'list' do reply[:output] = `lpstat -a | cut -d ' ' -f 1`.split end end endend
Agent Name
Simple Agent
Printer
'list' lpstat -a | cut -d ' ' -f 1
module MCollective module Agent class Printer<RPC::Agent metadata :name => 'printer', :description => 'Printers and printing', :author => 'Gary Larizza', :license => 'BSD', :version => '0.1', :url =>'http://puppetlabs.com', :timeout => 100
action 'list' do reply[:output] = `lpstat -a | cut -d ' ' -f 1`.split end end endend
Agent Name
Action Name
Simple Agent
Printer
'list' lpstat -a | cut -d ' ' -f 1
module MCollective module Agent class Printer<RPC::Agent metadata :name => 'printer', :description => 'Printers and printing', :author => 'Gary Larizza', :license => 'BSD', :version => '0.1', :url =>'http://puppetlabs.com', :timeout => 100
action 'list' do reply[:output] = `lpstat -a | cut -d ' ' -f 1`.split end end endend
Command to be Run
Agent Name
Action Name
Simple Agent
Printer
'list' lpstat -a | cut -d ' ' -f 1
module MCollective module Agent class Printer<RPC::Agent metadata :name => 'printer', :description => 'Printers and printing', :author => 'Gary Larizza', :license => 'BSD', :version => '0.1', :url =>'http://puppetlabs.com', :timeout => 100
action 'list' do reply[:output] = `lpstat -a | cut -d ' ' -f 1`.split end end endend
Running an Agentmco rpc printer list --with-fact location=HHS
Agent Name
Action Name
Filter
Fact Filter
MCollective Agents vs ARD?
• Node Discovery
• Node Selection/Filtering
• Command Execution
• Input Parsing
• Timeouts and Blocking
Plug-able and Customizable!• Plugins:
• Custom Agents
• Security
• Facts
• MCollective is a framework on which we’ve shipped a set of rudimentary programs.
Let’s do this thing...
Getting MCollective for Mac?
• bldmacpkg script in the ext/osx directory in MCollective Source
• https://github.com/unixorn/luggage-examples/tree/master/mcollective
•http://bit.ly/mc-4-mac
Getting Puppet for Mac?
http://bit.ly/puppet-mac
Custom Agents
http://bit.ly/munki-agent
Install Puppet Enterprise
http://bit.ly/pe-install
Code Used in Demo
http://bit.ly/mac-module
• @glarizza
• glarizza on freenode
• (hint - my name doesn’t rhyme with pizza)