20. Resources Meta Type
• Puppet Resources:
resources { 'f5_poolmember':
purge => true,
}
• Does not support Resource subset =/
purge poolmember in pool ‘X’ ?
Monday, September 17, 12
21. Query Puppet DB
• ruby-puppetdb:
https://github.com/ripienaar/ruby-puppetdb
• puppetdb query:
https://github.com/dalen/puppet-
puppetdbquery
Monday, September 17, 12
40. Developing Devices
• Transport
• Facter
• Type
• Provider (retrieve/set)
Monday, September 17, 12
41. Transport
• device.conf
[node_name]
type <device_type>
url <protocol://username:password@url/>
• telnet
• ssh
• iControl (SOAP)
• (netconf)
Monday, September 17, 12
42. Initialize Device
• puppet/util/network_device.rb
class Puppet::Util::NetworkDevice
...
def self.init(device)
require "puppet/util/network_device/#{device.provider}/device"
@current = Puppet::Util::NetworkDevice.
const_get(device.provider.capitalize).
const_get(:Device).new(device.url)
rescue => detail
raise "Can't load #{device.provider} for #{device.name}:
#{detail}"
end
end
Monday, September 17, 12
43. device.rb
• puppet/util/network_device/<type>/device.rb
class Puppet::Util::NetworkDevice::Juniper
attr_accessor :url, :transport
def initialize(url)
@url = URI.parse(url)
@transport = Puppet::Util::NetworkDevice::Transport::Juniper.new
end
end
def facts
@facts ||=
Puppet::Util::NetworkDevice::Transport::Juniper::facts.new(@transport)
@facts.retrieve
end
end
Monday, September 17, 12
44. Device Facts
• puppet/util/network_device/<type>/facts.rb
Monday, September 17, 12
45. Type
• apply_to_all
• apply_to_host
• apply_to_device
Puppet::Type.newtype(:f5_monitor) do
@doc = "Manage F5 monitor."
apply_to_device
ensurable
...
newproperty(:template_state) do
desc "The monitor templates' enabled/disabled states."
newvalues(/^STATE_(DISABLED|ENABLED)$/)
end
end
Monday, September 17, 12
46. Provider
• ssh/telnet:
output = transport.command('sh interface')
• Access custom transport:
def self.transport
if Facter.value(:url) then
Puppet.debug "F5: connecting via facter url."
@device ||=
Puppet::Util::NetworkDevice::F5::Device.new(Facter.value(:url))
else
@device ||= Puppet::Util::NetworkDevice.current
raise Puppet::Error, "Error Msg..." unless @device
end
@tranport = @device.transport
end
Monday, September 17, 12