Class: Puppet::Provider::Keystone

Inherits:
Openstack
  • Object
show all
Extended by:
Openstack::Auth
Defined in:
lib/puppet/provider/keystone.rb

Constant Summary collapse

DEFAULT_DOMAIN =
'Default'
@@default_domain_id =
nil

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.auth_endpointObject



22
23
24
# File 'lib/puppet/provider/keystone.rb', line 22

def self.auth_endpoint
  @auth_endpoint ||= get_auth_endpoint
end

.default_domainObject



61
62
63
# File 'lib/puppet/provider/keystone.rb', line 61

def self.default_domain
  DEFAULT_DOMAIN
end

.default_domain_changedObject



49
50
51
# File 'lib/puppet/provider/keystone.rb', line 49

def self.default_domain_changed
  default_domain_id != 'default'
end

.default_domain_deprecation_messageObject



53
54
55
56
57
58
59
# File 'lib/puppet/provider/keystone.rb', line 53

def self.default_domain_deprecation_message
  'Support for a resource without the domain ' \
    'set is deprecated in Liberty cycle. ' \
    'It will be dropped in the M-cycle. ' \
    "Currently using '#{default_domain}' as default domain name " \
    "while the default domain id is '#{default_domain_id}'."
end

.default_domain_from_ini_fileObject



26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/puppet/provider/keystone.rb', line 26

def self.default_domain_from_ini_file
  default_domain_from_conf = Puppet::Resource.indirection
    .find('Keystone_config/identity/default_domain_id')
  if default_domain_from_conf[:ensure] == :present
    # get from ini file
    default_domain_from_conf[:value][0]
  else
    nil
  end
rescue
  nil
end

.default_domain_idObject



39
40
41
42
43
44
45
46
47
# File 'lib/puppet/provider/keystone.rb', line 39

def self.default_domain_id
  if @@default_domain_id
    # cached
    @@default_domain_id
  else
    @@default_domain_id = default_domain_from_ini_file
  end
  @@default_domain_id = @@default_domain_id.nil? ? 'default' : @@default_domain_id
end

.domain_id_from_name(name) ⇒ Object



139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
# File 'lib/puppet/provider/keystone.rb', line 139

def self.domain_id_from_name(name)
  unless @domain_hash_name
    list = system_request('domain', 'list')
    @domain_hash_name = Hash[list.collect{|domain| [domain[:name], domain[:id]]}]
  end
  unless @domain_hash_name.include?(name)
    domain = system_request('domain', 'show', name)
    if domain && domain.key?(:id)
      @domain_hash_name[name] = domain[:id]
    else
      err("Could not find domain with name [#{name}]")
    end
  end
  @domain_hash_name[name]
end

.domain_name_from_id(id) ⇒ Object



119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# File 'lib/puppet/provider/keystone.rb', line 119

def self.domain_name_from_id(id)
  unless @domain_hash
    list = system_request('domain', 'list')
    if list.nil?
      err("Could not list domains")
    else
      @domain_hash = Hash[list.collect{|domain| [domain[:id], domain[:name]]}]
    end
  end
  unless @domain_hash.include?(id)
    domain = system_request('domain', 'show', id)
    if domain && domain.key?(:name)
      @domain_hash[id] = domain[:name]
    else
      err("Could not find domain with id [#{id}]")
    end
  end
  @domain_hash[id]
end

.fetch_project(name, domain) ⇒ Object



155
156
157
158
159
160
161
162
# File 'lib/puppet/provider/keystone.rb', line 155

def self.fetch_project(name, domain)
  domain ||= default_domain
  system_request('project', 'show',
                 [name, '--domain', domain],
                 {:no_retry_exception_msgs => /No project with a name or ID/})
rescue Puppet::ExecutionFailure => e
  raise e unless e.message =~ /No project with a name or ID/
end

.fetch_user(name, domain) ⇒ Object



164
165
166
167
168
169
170
171
172
173
174
175
176
# File 'lib/puppet/provider/keystone.rb', line 164

def self.fetch_user(name, domain)
  domain ||= default_domain
  user = system_request('user', 'show',
                        [name, '--domain', domain],
                        {:no_retry_exception_msgs => /No user with a name or ID/})
  # The description key is only set if it exists
  if user and user.key?(:id) and !user.key?(:description)
      user[:description] = ''
  end
  user
rescue Puppet::ExecutionFailure => e
  raise e unless e.message =~ /No user with a name or ID/
end

.get_auth_endpointObject



15
16
17
18
19
20
# File 'lib/puppet/provider/keystone.rb', line 15

def self.get_auth_endpoint
  configs = self.request('configuration', 'show')
  "#{configs[:'auth.auth_url']}"
rescue Puppet::Error::OpenstackAuthInputError
  nil
end

.get_auth_urlObject



178
179
180
181
182
183
184
185
186
187
# File 'lib/puppet/provider/keystone.rb', line 178

def self.get_auth_url
  auth_url = nil
  if ENV['OS_AUTH_URL']
    auth_url = ENV['OS_AUTH_URL'].dup
  elsif auth_url = get_os_vars_from_rcfile(rc_filename)['OS_AUTH_URL']
  else
    auth_url = auth_endpoint
  end
  return auth_url
end

.make_full_name(name) ⇒ Object

Prefix with default domain if missing from the name.



87
88
89
# File 'lib/puppet/provider/keystone.rb', line 87

def self.make_full_name(name)
  resource_to_name(*name_to_resource(name), false)
end

.name_to_resource(name) ⇒ Object



76
77
78
79
80
81
82
83
84
# File 'lib/puppet/provider/keystone.rb', line 76

def self.name_to_resource(name)
  uniq = name.split('::')
  if uniq.count == 1
    uniq.insert(0, default_domain)
  else
    uniq.reverse!
  end
  uniq
end

.project_id_from_name_and_domain_name(name, domain_name) ⇒ Object



105
106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/puppet/provider/keystone.rb', line 105

def self.project_id_from_name_and_domain_name(name, domain_name)
  @projects_name ||= {}
  id_str = "#{name}_#{domain_name}"
  unless @projects_name.keys.include?(id_str)
    project = fetch_project(name, domain_name)
    if project && project.key?(:id)
      @projects_name[id_str] = project[:id]
    else
      err("Could not find project with name [#{name}] and domain [#{domain_name}]")
    end
  end
  @projects_name[id_str]
end

.project_request(service, action, properties = nil, options = {}) ⇒ Object



189
190
191
# File 'lib/puppet/provider/keystone.rb', line 189

def self.project_request(service, action, properties=nil, options={})
  self.request(service, action, properties, options, 'project')
end

.resource_to_name(domain, name, check_for_default = true) ⇒ Object

Raises:

  • (Puppet::Error)


65
66
67
68
69
70
71
72
73
74
# File 'lib/puppet/provider/keystone.rb', line 65

def self.resource_to_name(domain, name, check_for_default = true)
  raise Puppet::Error, "Domain cannot be nil for project '#{name}'. " \
    'Please report a bug.' if domain.nil?
  join_str = '::'
  name_display = [name]
  unless check_for_default && domain == default_domain
    name_display << domain
  end
  name_display.join(join_str)
end

.set_domain_for_name(name, domain_name) ⇒ Object



197
198
199
200
201
202
203
204
205
206
207
208
209
210
# File 'lib/puppet/provider/keystone.rb', line 197

def self.set_domain_for_name(name, domain_name)
  if domain_name.nil? || domain_name.empty?
    raise(Puppet::Error, "Missing domain name for resource #{name}")
  end
  domain_id = self.domain_id_from_name(domain_name)
  case domain_id
  when default_domain_id
    name
  when nil
    name
  else
    name << "::#{domain_name}"
  end
end

.system_request(service, action, properties = nil, options = {}) ⇒ Object



193
194
195
# File 'lib/puppet/provider/keystone.rb', line 193

def self.system_request(service, action, properties=nil, options={})
  self.request(service, action, properties, options, 'system')
end

.user_id_from_name_and_domain_name(name, domain_name) ⇒ Object



91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/puppet/provider/keystone.rb', line 91

def self.user_id_from_name_and_domain_name(name, domain_name)
  @users_name ||= {}
  id_str = "#{name}_#{domain_name}"
  unless @users_name.keys.include?(id_str)
    user = fetch_user(name, domain_name)
    if user && user.key?(:id)
      @users_name[id_str] = user[:id]
    else
      err("Could not find user with name [#{name}] and domain [#{domain_name}]")
    end
  end
  @users_name[id_str]
end

Instance Method Details

#bool_to_sym(bool) ⇒ Object

Helper functions to use on the pre-validated enabled field



213
214
215
# File 'lib/puppet/provider/keystone.rb', line 213

def bool_to_sym(bool)
  bool == true ? :true : :false
end

#sym_to_bool(sym) ⇒ Object



217
218
219
# File 'lib/puppet/provider/keystone.rb', line 217

def sym_to_bool(sym)
  sym == :true ? true : false
end