Files
Takashi Kajinami 01ffd0e4c3 Add resource to manage implied roles
Keystone supports implied roles, and some of the default roles imply
different roles. (eg. admin implies manager)

This introduces a resource type to manage implied roles, and also
ensures the implied roles are created in bootstrap.

Depends-on: https://review.opendev.org/900138
Change-Id: I36ef3ddfcb2f60bdca8674ea8055b6f57a149512
2023-11-06 14:38:08 +09:00

71 lines
1.6 KiB
Ruby

require File.join(File.dirname(__FILE__), '..','..','..', 'puppet/provider/keystone')
Puppet::Type.type(:keystone_role).provide(
:openstack,
:parent => Puppet::Provider::Keystone
) do
desc 'Provider for keystone roles.'
@credentials = Puppet::Provider::Openstack::CredentialsV3.new
def initialize(value={})
super(value)
end
def self.do_not_manage
@do_not_manage
end
def self.do_not_manage=(value)
@do_not_manage = value
end
def create
if self.class.do_not_manage
fail("Not managing Keystone_role[#{@resource[:name]}] due to earlier Keystone API failures.")
end
self.class.system_request('role', 'create', name)
@property_hash[:ensure] = :present
end
def destroy
if self.class.do_not_manage
fail("Not managing Keystone_role[#{@resource[:name]}] due to earlier Keystone API failures.")
end
self.class.system_request('role', 'delete', @property_hash[:id])
@property_hash.clear
end
def exists?
@property_hash[:ensure] == :present
end
def id
@property_hash[:id]
end
def self.instances
self.do_not_manage = true
list = system_request('role', 'list')
reallist = list.collect do |role|
new(
:name => role[:name].downcase,
:ensure => :present,
:id => role[:id]
)
end
self.do_not_manage = false
reallist
end
def self.prefetch(resources)
roles = instances
resources.keys.each do |name|
if provider = roles.find{ |role| role.name == name.downcase }
resources[name].provider = provider
end
end
end
end