Denis Egorenko 9bc49efba8 Replace defines for managing cinder types with providers
We have define classes, which allow to manage Cinder types and their
properties. This patch switches using of define classes to puppet
providers, based on openstack auth from openstacklib.

related blueprint use-openstackclient-in-module-resources

Change-Id: I4f7e8137fa3e1ad3e141c58eaba110b12101d22c
2016-03-04 17:58:20 +03:00

77 lines
2.2 KiB
Ruby

require 'puppet/util/inifile'
require 'puppet/provider/openstack'
require 'puppet/provider/openstack/auth'
require 'puppet/provider/openstack/credentials'
class Puppet::Provider::Cinder < Puppet::Provider::Openstack
extend Puppet::Provider::Openstack::Auth
def self.conf_filename
'/etc/cinder/cinder.conf'
end
def self.cinder_conf
return @cinder_conf if @cinder_conf
@cinder_conf = Puppet::Util::IniConfig::File.new
@cinder_conf.read(conf_filename)
@cinder_conf
end
def self.request(service, action, properties=nil)
begin
super
rescue Puppet::Error::OpenstackAuthInputError, Puppet::Error::OpenstackUnauthorizedError => error
cinder_request(service, action, error, properties)
end
end
def self.cinder_request(service, action, error, properties=nil)
properties ||= []
@credentials.username = cinder_credentials['admin_user']
@credentials.password = cinder_credentials['admin_password']
@credentials.project_name = cinder_credentials['admin_tenant_name']
@credentials.auth_url = auth_endpoint
raise error unless @credentials.set?
Puppet::Provider::Openstack.request(service, action, properties, @credentials)
end
def self.cinder_credentials
@cinder_credentials ||= get_cinder_credentials
end
def cinder_credentials
self.class.cinder_credentials
end
def self.get_cinder_credentials
auth_keys = ['auth_uri', 'admin_tenant_name', 'admin_user',
'admin_password']
conf = cinder_conf
if conf and conf['keystone_authtoken'] and
auth_keys.all?{|k| !conf['keystone_authtoken'][k].nil?}
creds = Hash[ auth_keys.map \
{ |k| [k, conf['keystone_authtoken'][k].strip] } ]
return creds
else
raise(Puppet::Error, "File: #{conf_filename} does not contain all " +
"required sections. Cinder types will not work if cinder is not " +
"correctly configured.")
end
end
def self.get_auth_endpoint
q = cinder_credentials
"#{q['auth_uri']}"
end
def self.auth_endpoint
@auth_endpoint ||= get_auth_endpoint
end
def self.reset
@cinder_conf = nil
@cinder_credentials = nil
end
end