2016-06-07 10:35:52 -04:00

112 lines
3.6 KiB
Ruby

require "json"
Puppet::Type.type(:qdr_connector).provide(:qdmanage) do
# should rely on environment rather fq path
commands :qdmanage => '/usr/bin/qdmanage'
mk_resource_methods
def initialize(value={})
super(value)
@property_flush = {}
end
def self.get_list_of_connectors
begin
@connectors=JSON.load(qdmanage('QUERY','--type=connector'))
rescue Puppet::ExecutionFailure => e
@connectors = {}
end
end
def self.get_connector_properties(connector)
connector_properties = {}
connector_properties[:provider] = :qdmanage
connector_properties[:ensure] = :present
connector_properties[:name] = connector["name"]
connector_properties[:addr] = connector["addr"]
connector_properties[:port] = connector["port"]
connector_properties[:role] = connector["role"].to_s
connector_properties[:allow_redirect] = connector["allowRedirect"].to_s
connector_properties[:sasl_mechanisms] = connector["saslMechanisms"].to_s
connector_properties[:max_frame_size] = connector["maxFrameSize"].to_s
connector_properties[:idle_timeout_seconds] = connector["idleTimeoutSeconds"].to_s
connector_properties[:strip_annotations] = connector["stripAnnotations"].to_s
connector_properties
end
def self.instances
connectors = []
get_list_of_connectors.each do |connector|
connectors << new(:name => connector["name"],
:ensure => :present,
:addr => connector["addr"],
:port => connector["port"],
:role => connector["role"].to_s,
:sasl_mechanisms => connector["saslMechanisms"].to_s,
:allow_redirect => connector["allowRedirect"].to_s,
:max_frame_size => connector["maxFrameSize"].to_s,
:idle_timeout_seconds => connector["idleTimeoutSeconds"].to_s,
:strip_annotations => connector["stripAnnotations"].to_s)
end
connectors
end
def create
@property_flush[:ensure] = :present
end
def exists?
@property_hash[:ensure] == :present
end
def destroy
@property_flush[:ensure] = :absent
end
def self.prefetch(resources)
instances.each do |prov|
if resource = resources[prov.name]
resource.provider = prov
end
end
end
def set_connector
# TODO(ansmith) - full CRUD once supported by qdmanage
if @property_flush[:ensure] == :absent
notice("Connector destroy not supported")
return
end
begin
# TODO(ansmith) - name, addr:port uniqueness check
qdmanage('CREATE',
'--type=connector',
'--name',
resource[:name],
'addr='+resource[:addr],
'port='+resource[:port],
'role='+resource[:role].to_s,
'saslMechanisms='+resource[:sasl_mechanisms].to_s,
'allowRedirect='+resource[:allow_redirect].to_s,
'maxFrameSize='+resource[:max_frame_size].to_s,
'idleTimeoutSeconds='+resource[:idle_timeout_seconds].to_s,
'stripAnnotations='+resource[:strip_annotations].to_s)
rescue Puppet::ExecutionFailure => e
return
end
end
def flush
set_connector
@property_hash = self.class.get_connector_properties(resource[:name])
end
end