cc27c46f99
The new type defines a minimal workflow object and the provider allows the creation/update/deletion of a workflow. Since the creation command is a little different (because you can create multiple workflows from a single definition file), the provider inherits from an intermediate class that only overrides the creation action. Change-Id: Ia22cfc031915fa56cdc2602a5746b2250a62963b
91 lines
2.3 KiB
Ruby
91 lines
2.3 KiB
Ruby
require File.join(File.dirname(__FILE__), '..','..','..', 'puppet/provider/mistral')
|
|
|
|
Puppet::Type.type(:mistral_workflow).provide(
|
|
:openstack,
|
|
:parent => Puppet::Provider::Mistral
|
|
) do
|
|
desc <<-EOT
|
|
Mistral provider to manage workflow type
|
|
EOT
|
|
|
|
@credentials = Puppet::Provider::Openstack::CredentialsV3.new
|
|
|
|
mk_resource_methods
|
|
|
|
def create
|
|
properties = []
|
|
properties << (@resource[:is_public] == :true ? '--public' : '--private')
|
|
properties << @resource[:definition_file]
|
|
|
|
self.class.request('workflow', 'create', properties)
|
|
@property_hash[:ensure] = :present
|
|
@property_hash[:definition_file] = resource[:definition_file]
|
|
@property_hash[:is_public] = resource[:is_public]
|
|
@property_hash[:name] = name
|
|
end
|
|
|
|
def exists?
|
|
@property_hash[:ensure] == :present
|
|
end
|
|
|
|
def destroy
|
|
self.class.request('workflow', 'delete', @resource[:name])
|
|
@property_hash.clear
|
|
end
|
|
|
|
def update
|
|
# Update the workflow if it exists, otherwise create it
|
|
if exists?
|
|
properties = []
|
|
if @resource[:is_public] == :true
|
|
properties << '--public'
|
|
end
|
|
properties << @resource[:definition_file]
|
|
|
|
self.class.request('workflow', 'update', properties)
|
|
@property_hash[:ensure] = :present
|
|
@property_hash[:definition_file] = resource[:definition_file]
|
|
@property_hash[:is_public] = resource[:is_public]
|
|
@property_hash[:name] = name
|
|
else
|
|
create
|
|
end
|
|
end
|
|
|
|
def self.instances
|
|
list = request('workflow', 'list')
|
|
list.collect do |wf|
|
|
attrs = request('workflow', 'show', wf[:id])
|
|
new({
|
|
:ensure => :present,
|
|
:id => wf[:id],
|
|
:name => wf[:name],
|
|
:is_public => (attrs[:scope] == "public")
|
|
})
|
|
end
|
|
end
|
|
|
|
def self.prefetch(resources)
|
|
workflows = instances
|
|
resources.keys.each do |name|
|
|
if provider = workflows.find{ |wf| wf.name == name }
|
|
resources[name].provider = provider
|
|
end
|
|
end
|
|
end
|
|
|
|
def flush
|
|
if @property_flush
|
|
opts = [@resource[:name]]
|
|
|
|
(opts << '--public') if @property_flush[:is_public] == :true
|
|
(opts << '--private') if @property_flush[:is_public] == :false
|
|
opts << @property_flush[:definition_file]
|
|
|
|
self.class.request('workflow', 'update', opts)
|
|
@property_flush.clear
|
|
end
|
|
end
|
|
|
|
end
|