]> git.donarmstrong.com Git - dsa-puppet.git/blob - 3rdparty/modules/openstacklib/lib/puppet/provider/openstack/auth.rb
try with modules from master
[dsa-puppet.git] / 3rdparty / modules / openstacklib / lib / puppet / provider / openstack / auth.rb
1 require 'puppet/provider/openstack/credentials'
2
3 module Puppet::Provider::Openstack::Auth
4
5   RCFILENAME = "#{ENV['HOME']}/openrc"
6
7   def get_os_vars_from_env
8     env = {}
9     ENV.each { |k,v| env.merge!(k => v) if k =~ /^OS_/ }
10     return env
11   end
12
13   def get_os_vars_from_rcfile(filename)
14     env = {}
15     if File.exists?(filename)
16       File.open(filename).readlines.delete_if{|l| l=~ /^#|^$/ }.each do |line|
17         key, value = line.split('=')
18         key = key.split(' ').last
19         value = value.chomp.gsub(/'/, '')
20         env.merge!(key => value) if key =~ /OS_/
21       end
22     end
23     return env
24   end
25
26   def rc_filename
27     RCFILENAME
28   end
29
30   def request(service, action, properties=nil)
31     properties ||= []
32     set_credentials(@credentials, get_os_vars_from_env)
33     unless @credentials.set?
34       @credentials.unset
35       set_credentials(@credentials, get_os_vars_from_rcfile(rc_filename))
36     end
37     unless @credentials.set?
38       raise(Puppet::Error::OpenstackAuthInputError, 'Insufficient credentials to authenticate')
39     end
40     super(service, action, properties, @credentials)
41   end
42
43   def set_credentials(creds, env)
44     env.each do |key, val|
45       var = key.sub(/^OS_/,'').downcase
46       creds.set(var, val)
47     end
48   end
49 end