Class: Chef::Provider::Group::Groupmod
- Inherits:
-
Chef::Provider::Group
- Object
- Chef::Provider
- Chef::Provider::Group
- Chef::Provider::Group::Groupmod
- Defined in:
- lib/chef/provider/group/groupmod.rb
Instance Attribute Summary
Attributes inherited from Chef::Provider::Group
Attributes inherited from Chef::Provider
#action, #after_resource, #current_resource, #logger, #new_resource, #run_context
Instance Method Summary collapse
-
#add_group_members(members) ⇒ Object
Adds a list of usernames to the group using ‘user mod`.
-
#create_group ⇒ Object
Create the group.
- #load_current_resource ⇒ Object
-
#manage_group ⇒ Object
Manage the group when it already exists.
-
#remove_group ⇒ Object
Remove the group.
-
#reset_group_membership ⇒ Object
This is tricky, but works: rename the existing group to “<name>_bak”, create a new group with the same GID and “<name>”, then set correct members on that group.
-
#set_options(overwrite_gid = false) ⇒ Object
Little bit of magic as per Adam’s useradd provider to pull and assign the command line flags.
Methods inherited from Chef::Provider::Group
#compare_group, #define_resource_requirements, #group_gid_match?, #group_members_match?, #has_current_group_member?, #initialize, #validate_member!
Methods inherited from Chef::Provider
action, action_description, action_descriptions, #action_nothing, #check_resource_semantics!, #cleanup_after_converge, #compile_and_converge_action, #converge_by, #converge_if_changed, #cookbook_name, #define_resource_requirements, #description, #events, include_resource_dsl?, include_resource_dsl_module, #initialize, #introduced, #load_after_resource, #node, #process_resource_requirements, provides, provides?, #recipe_name, #requirements, #resource_collection, #resource_updated?, #run_action, #set_updated_status, supports?, use, use_inline_resources, #validate_required_properties!, #whyrun_mode?, #whyrun_supported?
Methods included from Mixin::Provides
#provided_as, #provides, #provides?
Methods included from Mixin::DescendantsTracker
#descendants, descendants, direct_descendants, #direct_descendants, find_descendants_by_name, #find_descendants_by_name, #inherited, store_inherited
Methods included from Mixin::LazyModuleInclude
#descendants, #include, #included
Methods included from Mixin::PowershellOut
#powershell_out, #powershell_out!
Methods included from Mixin::WindowsArchitectureHelper
#assert_valid_windows_architecture!, #disable_wow64_file_redirection, #forced_32bit_override_required?, #is_i386_process_on_x86_64_windows?, #node_supports_windows_architecture?, #node_windows_architecture, #restore_wow64_file_redirection, #valid_windows_architecture?, #with_os_architecture, #wow64_architecture_override_required?, #wow64_directory
Methods included from DSL::Secret
#default_secret_config, #default_secret_service, #secret, #with_secret_config, #with_secret_service
Methods included from DSL::RenderHelpers
#render_json, #render_toml, #render_yaml
Methods included from DSL::ReaderHelpers
#parse_file, #parse_json, #parse_toml, #parse_yaml
Methods included from DSL::Powershell
Methods included from DSL::RegistryHelper
#registry_data_exists?, #registry_get_subkeys, #registry_get_values, #registry_has_subkeys?, #registry_key_exists?, #registry_value_exists?
Methods included from DSL::ChefVault
#chef_vault, #chef_vault_item, #chef_vault_item_for_environment
Methods included from DSL::DataQuery
#data_bag, #data_bag_item, #search, #tagged?
Methods included from EncryptedDataBagItem::CheckEncrypted
Methods included from DSL::PlatformIntrospection
#older_than_win_2012_or_8?, #platform?, #platform_family?, #value_for_platform, #value_for_platform_family
Methods included from DSL::Recipe
#exec, #have_resource_class_for?, #resource_class_for
Methods included from DSL::Definitions
add_definition, #evaluate_resource_definition, #has_resource_definition?
Methods included from DSL::Resources
add_resource_dsl, remove_resource_dsl
Methods included from DSL::Cheffish
Methods included from DSL::RebootPending
Methods included from DSL::IncludeRecipe
Methods included from Mixin::NotifyingBlock
#notifying_block, #subcontext_block
Methods included from DSL::DeclareResource
#build_resource, #declare_resource, #delete_resource, #delete_resource!, #edit_resource, #edit_resource!, #find_resource, #find_resource!, #resources, #with_run_context
Methods included from DSL::Compliance
#include_input, #include_profile, #include_waiver
Constructor Details
This class inherits a constructor from Chef::Provider::Group
Instance Method Details
#add_group_members(members) ⇒ Object
Adds a list of usernames to the group using ‘user mod`
86 87 88 89 90 91 |
# File 'lib/chef/provider/group/groupmod.rb', line 86 def add_group_members(members) logger.debug("#{new_resource} adding members #{members.join(", ")}") unless members.empty? members.each do |user| shell_out!("user", "mod", "-G", new_resource.group_name, user) end end |
#create_group ⇒ Object
Create the group
34 35 36 37 38 |
# File 'lib/chef/provider/group/groupmod.rb', line 34 def create_group shell_out!("group", "add", ) add_group_members(new_resource.members) end |
#load_current_resource ⇒ Object
26 27 28 29 30 31 |
# File 'lib/chef/provider/group/groupmod.rb', line 26 def load_current_resource super %w{group user}.each do |binary| raise Chef::Exceptions::Group, "Could not find binary /usr/sbin/#{binary} for #{new_resource}" unless ::File.exist?("/usr/sbin/#{binary}") end end |
#manage_group ⇒ Object
Manage the group when it already exists
41 42 43 44 45 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 |
# File 'lib/chef/provider/group/groupmod.rb', line 41 def manage_group if new_resource.append members_to_be_added = [ ] if new_resource.excluded_members && !new_resource.excluded_members.empty? # First find out if any member needs to be removed members_to_be_removed = [ ] new_resource.excluded_members.each do |member| members_to_be_removed << member if current_resource.members.include?(member) end unless members_to_be_removed.empty? # We are using a magic trick to remove the groups. reset_group_membership # Capture the members we need to add in # members_to_be_added to be added later on. current_resource.members.each do |member| members_to_be_added << member unless members_to_be_removed.include?(member) end end end if new_resource.members && !new_resource.members.empty? new_resource.members.each do |member| members_to_be_added << member unless current_resource.members.include?(member) end end logger.debug("#{new_resource} not changing group members, the group has no members to add") if members_to_be_added.empty? add_group_members(members_to_be_added) else # We are resetting the members of a group so use the same trick reset_group_membership logger.debug("#{new_resource} setting group members to: none") if new_resource.members.empty? add_group_members(new_resource.members) end end |
#remove_group ⇒ Object
Remove the group
81 82 83 |
# File 'lib/chef/provider/group/groupmod.rb', line 81 def remove_group shell_out!("group", "del", new_resource.group_name) end |
#reset_group_membership ⇒ Object
This is tricky, but works: rename the existing group to “<name>_bak”, create a new group with the same GID and “<name>”, then set correct members on that group
96 97 98 99 100 101 102 |
# File 'lib/chef/provider/group/groupmod.rb', line 96 def reset_group_membership shell_out!("group", "mod", "-n", "#{new_resource.group_name}_bak", new_resource.group_name) shell_out!("group", "add", (overwrite_gid: true)) shell_out!("group", "del", "#{new_resource.group_name}_bak") end |
#set_options(overwrite_gid = false) ⇒ Object
Little bit of magic as per Adam’s useradd provider to pull and assign the command line flags
Returns
- <string>
-
A string containing the option and then the quoted value
108 109 110 111 112 113 114 115 116 117 118 119 |
# File 'lib/chef/provider/group/groupmod.rb', line 108 def (overwrite_gid = false) opts = [] if overwrite_gid || new_resource.gid && (current_resource.gid != new_resource.gid) opts << "-g" opts << new_resource.gid end if overwrite_gid opts << "-o" end opts << new_resource.group_name opts end |