2 File.expand_path('../..', File.dirname(__FILE__)).tap { |dir| $LOAD_PATH.unshift(dir) unless $LOAD_PATH.include?(dir) }
3 File.expand_path('../../../../openstacklib/lib', File.dirname(__FILE__)).tap { |dir| $LOAD_PATH.unshift(dir) unless $LOAD_PATH.include?(dir) }
5 require 'puppet/provider/keystone/util'
7 Puppet::Type.newtype(:keystone_user) do
9 desc 'Type for managing keystone users.'
13 newparam(:name, :namevar => true) do
17 newparam(:ignore_default_tenant) do
18 # DEPRECATED - To be removed in next release (Liberty)
19 # https://bugs.launchpad.net/puppet-keystone/+bug/1472437
21 Puppet.warning('The ignore_default_tenant parameter is deprecated and will be removed in the future.')
23 newvalues(/(t|T)rue/, /(f|F)alse/, true, false)
26 value.to_s.downcase.to_sym
30 newproperty(:enabled) do
31 newvalues(/(t|T)rue/, /(f|F)alse/, true, false)
34 value.to_s.downcase.to_sym
38 newproperty(:password) do
40 def change_to_s(currentvalue, newvalue)
41 if currentvalue == :absent
42 return "created password"
44 return "changed password"
48 def is_to_s( currentvalue )
49 return '[old password redacted]'
52 def should_to_s( newvalue )
53 return '[new password redacted]'
57 newproperty(:tenant) do
58 # DEPRECATED - To be removed in next release (Liberty)
59 # https://bugs.launchpad.net/puppet-keystone/+bug/1472437
61 Puppet.warning('The tenant parameter is deprecated and will be removed in the future. Please use keystone_user_role to assign a user to a project.')
66 newproperty(:email) do
67 newvalues(/^(\S+@\S+)|$/)
72 raise(Puppet::Error, 'This is a read only property')
76 newparam(:replace_password) do
77 newvalues(/(t|T)rue/, /(f|F)alse/, true, false)
80 value.to_s.downcase.to_sym
84 newproperty(:domain) do
87 raise(Puppet::Error, "The domain cannot be changed from #{self.should} to #{is}") unless self.should == is
92 autorequire(:keystone_tenant) do
93 # DEPRECATED - To be removed in next release (Liberty)
94 # https://bugs.launchpad.net/puppet-keystone/+bug/1472437
98 autorequire(:keystone_domain) do
99 # use the domain parameter if given, or the one from name if any
100 self[:domain] or Util.split_domain(self[:name])[1]
103 # we should not do anything until the keystone service is started
104 autorequire(:service) do