Class: Chef::Provider::User
- Inherits:
-
Chef::Provider
- Object
- Chef::Provider
- Chef::Provider::User
- Includes:
- Mixin::Command
- Defined in:
- lib/chef/provider/user.rb,
lib/chef/provider/user/pw.rb,
lib/chef/provider/user/dscl.rb,
lib/chef/provider/user/useradd.rb
Defined Under Namespace
Instance Attribute Summary collapse
-
#locked ⇒ Object
Returns the value of attribute locked.
-
#user_exists ⇒ Object
Returns the value of attribute user_exists.
Attributes inherited from Chef::Provider
#current_resource, #new_resource, #node
Instance Method Summary collapse
- #action_create ⇒ Object
- #action_lock ⇒ Object
- #action_manage ⇒ Object
- #action_modify ⇒ Object
- #action_remove ⇒ Object
- #action_unlock ⇒ Object
-
#compare_user ⇒ Object
Check to see if the user needs any changes.
- #convert_group_name ⇒ Object
-
#initialize(node, new_resource, collection = nil, definitions = nil, cookbook_loader = nil) ⇒ User
constructor
A new instance of User.
- #load_current_resource ⇒ Object
Methods included from Mixin::Command
handle_command_failures, not_if, only_if, output_of_command, popen4, run_command, run_command_with_systems_locale
Methods inherited from Chef::Provider
#action_nothing, build_from_file
Methods included from Mixin::ConvertToClassName
#convert_to_class_name, #convert_to_snake_case, #filename_to_qualified_string
Methods included from Mixin::RecipeDefinitionDSLCore
Methods included from Mixin::Language
#data_bag, #data_bag_item, #platform?, #search, #value_for_platform
Constructor Details
#initialize(node, new_resource, collection = nil, definitions = nil, cookbook_loader = nil) ⇒ User
Returns a new instance of User.
32 33 34 35 36 |
# File 'lib/chef/provider/user.rb', line 32 def initialize(node, new_resource, collection=nil, definitions=nil, cookbook_loader=nil) super(node, new_resource, collection, definitions, cookbook_loader) @user_exists = true @locked = nil end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class Chef::Mixin::RecipeDefinitionDSLCore
Instance Attribute Details
#locked ⇒ Object
Returns the value of attribute locked.
30 31 32 |
# File 'lib/chef/provider/user.rb', line 30 def locked @locked end |
#user_exists ⇒ Object
Returns the value of attribute user_exists.
30 31 32 |
# File 'lib/chef/provider/user.rb', line 30 def user_exists @user_exists end |
Instance Method Details
#action_create ⇒ Object
97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/chef/provider/user.rb', line 97 def action_create case @user_exists when false create_user Chef::Log.info("Created #{@new_resource}") @new_resource.updated = true else if compare_user manage_user Chef::Log.info("Altered #{@new_resource}") @new_resource.updated = true end end end |
#action_lock ⇒ Object
140 141 142 143 144 145 146 147 148 149 150 151 152 |
# File 'lib/chef/provider/user.rb', line 140 def action_lock if @user_exists if check_lock() == false lock_user @new_resource.updated = true Chef::Log.info("Locked #{@new_resource}") else Chef::Log.debug("No need to lock #{@new_resource}") end else raise Chef::Exceptions::User, "Cannot lock #{@new_resource} - user does not exist!" end end |
#action_manage ⇒ Object
120 121 122 123 124 125 126 |
# File 'lib/chef/provider/user.rb', line 120 def action_manage if @user_exists && compare_user manage_user @new_resource.updated = true Chef::Log.info("Managed #{@new_resource}") end end |
#action_modify ⇒ Object
128 129 130 131 132 133 134 135 136 137 138 |
# File 'lib/chef/provider/user.rb', line 128 def action_modify if @user_exists if compare_user manage_user @new_resource.updated = true Chef::Log.info("Modified #{@new_resource}") end else raise Chef::Exceptions::User, "Cannot modify #{@new_resource} - user does not exist!" end end |
#action_remove ⇒ Object
112 113 114 115 116 117 118 |
# File 'lib/chef/provider/user.rb', line 112 def action_remove if @user_exists remove_user @new_resource.updated = true Chef::Log.info("Removed #{@new_resource}") end end |
#action_unlock ⇒ Object
154 155 156 157 158 159 160 161 162 163 164 165 166 |
# File 'lib/chef/provider/user.rb', line 154 def action_unlock if @user_exists if check_lock() == true unlock_user @new_resource.updated = true Chef::Log.info("Unlocked #{@new_resource}") else Chef::Log.debug("No need to unlock #{@new_resource}") end else raise Chef::Exceptions::User, "Cannot unlock #{@new_resource} - user does not exist!" end end |
#compare_user ⇒ Object
Check to see if the user needs any changes
Returns
- <true>
-
If a change is required
- <false>
-
If the users are identical
91 92 93 94 95 |
# File 'lib/chef/provider/user.rb', line 91 def compare_user [ :uid, :gid, :comment, :home, :shell, :password ].any? do |user_attrib| !@new_resource.send(user_attrib).nil? && @new_resource.send(user_attrib) != @current_resource.send(user_attrib) end end |
#convert_group_name ⇒ Object
38 39 40 41 42 43 44 |
# File 'lib/chef/provider/user.rb', line 38 def convert_group_name if @new_resource.gid.is_a? String @new_resource.gid Etc.getgrnam(@new_resource.gid).gid end rescue ArgumentError => e raise Chef::Exceptions::User, "Couldn't lookup integer GID for group name #{@new_resource.gid}" end |
#load_current_resource ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/chef/provider/user.rb', line 46 def load_current_resource @current_resource = Chef::Resource::User.new(@new_resource.name) @current_resource.username(@new_resource.username) user_info = nil begin user_info = Etc.getpwnam(@new_resource.username) rescue ArgumentError => e @user_exists = false Chef::Log.debug("User #{@new_resource.username} does not exist") end if user_info @current_resource.uid(user_info.uid) @current_resource.gid(user_info.gid) @current_resource.comment(user_info.gecos) @current_resource.home(user_info.dir) @current_resource.shell(user_info.shell) @current_resource.password(user_info.passwd) if @new_resource.password && @current_resource.password == 'x' begin require 'shadow' rescue LoadError Chef::Log.error("You must have ruby-shadow installed for password support!") raise Chef::Exceptions::MissingLibrary, "You must have ruby-shadow installed for password support!" else shadow_info = Shadow::Passwd.getspnam(@new_resource.username) @current_resource.password(shadow_info.sp_pwdp) end end if @new_resource.gid convert_group_name end end @current_resource end |