Update sudo and users cookbooks
This commit is contained in:
		
							parent
							
								
									d7bdd5cdf3
								
							
						
					
					
						commit
						11b812fbb8
					
				
							
								
								
									
										4
									
								
								Batali
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								Batali
									
									
									
									
									
								
							| @ -19,8 +19,8 @@ Batali.define do | |||||||
|   cookbook 'application_javascript' |   cookbook 'application_javascript' | ||||||
|   cookbook 'application_ruby' |   cookbook 'application_ruby' | ||||||
|   cookbook 'application_git',       '~> 1.1.0' # 1.2.0 doesn't work with knife-solo |   cookbook 'application_git',       '~> 1.1.0' # 1.2.0 doesn't work with knife-solo | ||||||
|   cookbook 'users' |   cookbook 'users',                 '~> 5.0.0' | ||||||
|   cookbook 'sudo' |   cookbook 'sudo',                  '~> 3.4.0' | ||||||
|   cookbook 'hostname' |   cookbook 'hostname' | ||||||
|   cookbook 'redis', |   cookbook 'redis', | ||||||
|            git: 'https://github.com/phlipper/chef-redis.git', |            git: 'https://github.com/phlipper/chef-redis.git', | ||||||
|  | |||||||
| @ -900,11 +900,11 @@ | |||||||
|       "dependencies": [ |       "dependencies": [ | ||||||
| 
 | 
 | ||||||
|       ], |       ], | ||||||
|       "version": "4.0.3", |       "version": "5.0.0", | ||||||
|       "source": { |       "source": { | ||||||
|         "type": "Batali::Source::Site", |         "type": "Batali::Source::Site", | ||||||
|         "url": "https://supermarket.chef.io:443/api/v1/cookbooks/users/versions/4.0.3/download", |         "url": "https://supermarket.chef.io:443/api/v1/cookbooks/users/versions/5.0.0/download", | ||||||
|         "version": "4.0.3" |         "version": "5.0.0" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     { |     { | ||||||
| @ -912,11 +912,11 @@ | |||||||
|       "dependencies": [ |       "dependencies": [ | ||||||
| 
 | 
 | ||||||
|       ], |       ], | ||||||
|       "version": "3.3.1", |       "version": "3.4.0", | ||||||
|       "source": { |       "source": { | ||||||
|         "type": "Batali::Source::Site", |         "type": "Batali::Source::Site", | ||||||
|         "url": "https://supermarket.chef.io:443/api/v1/cookbooks/sudo/versions/3.3.1/download", |         "url": "https://supermarket.chef.io:443/api/v1/cookbooks/sudo/versions/3.4.0/download", | ||||||
|         "version": "3.3.1" |         "version": "3.4.0" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     { |     { | ||||||
|  | |||||||
| @ -2,6 +2,15 @@ | |||||||
| 
 | 
 | ||||||
| This file is used to list changes made in each version of the sudo cookbook. | This file is used to list changes made in each version of the sudo cookbook. | ||||||
| 
 | 
 | ||||||
|  | ## 3.4.0 (2017-04-26) | ||||||
|  | 
 | ||||||
|  | - Add lwrp support for only env_keep add/subtract | ||||||
|  | - Readme improvements | ||||||
|  | - Move the files out of the default directory since Chef >= 12 doesn't require this | ||||||
|  | - Test with Local Delivery instead of Rake | ||||||
|  | - Cookstyle fixes | ||||||
|  | - Update apache2 license string | ||||||
|  | 
 | ||||||
| ## 3.3.1 (2017-01-17) | ## 3.3.1 (2017-01-17) | ||||||
| 
 | 
 | ||||||
| - fixed command_aliases in README | - fixed command_aliases in README | ||||||
|  | |||||||
| @ -2,9 +2,7 @@ | |||||||
| 
 | 
 | ||||||
| [](http://travis-ci.org/chef-cookbooks/sudo) [](https://supermarket.chef.io/cookbooks/sudo) | [](http://travis-ci.org/chef-cookbooks/sudo) [](https://supermarket.chef.io/cookbooks/sudo) | ||||||
| 
 | 
 | ||||||
| The Chef `sudo` cookbook installs the `sudo` package and configures the `/etc/sudoers` file. | The default recipe installs the `sudo` package and configures the `/etc/sudoers` file. The cookbook also includes a sudo resource to adding and removing individual sudo entries. | ||||||
| 
 |  | ||||||
| It also exposes an LWRP for adding and managing sudoers. |  | ||||||
| 
 | 
 | ||||||
| ## Requirements | ## Requirements | ||||||
| 
 | 
 | ||||||
| @ -25,6 +23,7 @@ It also exposes an LWRP for adding and managing sudoers. | |||||||
| - None | - None | ||||||
| 
 | 
 | ||||||
| ## Attributes | ## Attributes | ||||||
|  | 
 | ||||||
| - `node['authorization']['sudo']['groups']` - groups to enable sudo access (default: `[ "sysadmin" ]`) | - `node['authorization']['sudo']['groups']` - groups to enable sudo access (default: `[ "sysadmin" ]`) | ||||||
| - `node['authorization']['sudo']['users']` - users to enable sudo access (default: `[]`) | - `node['authorization']['sudo']['users']` - users to enable sudo access (default: `[]`) | ||||||
| - `node['authorization']['sudo']['passwordless']` - use passwordless sudo (default: `false`) | - `node['authorization']['sudo']['passwordless']` - use passwordless sudo (default: `false`) | ||||||
| @ -34,7 +33,9 @@ It also exposes an LWRP for adding and managing sudoers. | |||||||
| - `node['authorization']['sudo']['setenv']` - Whether to permit preserving of environment with `sudo -E` (default: `false`) | - `node['authorization']['sudo']['setenv']` - Whether to permit preserving of environment with `sudo -E` (default: `false`) | ||||||
| 
 | 
 | ||||||
| ## Usage | ## Usage | ||||||
|  | 
 | ||||||
| ### Attributes | ### Attributes | ||||||
|  | 
 | ||||||
| To use attributes for defining sudoers, set the attributes above on the node (or role) itself: | To use attributes for defining sudoers, set the attributes above on the node (or role) itself: | ||||||
| 
 | 
 | ||||||
| ```json | ```json | ||||||
| @ -105,6 +106,7 @@ default_attributes( | |||||||
| **Note that the template for the sudoers file has the group "sysadmin" with ALL:ALL permission, though the group by default does not exist.** | **Note that the template for the sudoers file has the group "sysadmin" with ALL:ALL permission, though the group by default does not exist.** | ||||||
| 
 | 
 | ||||||
| ### Sudoers Defaults | ### Sudoers Defaults | ||||||
|  | 
 | ||||||
| Configure a node attribute, `node['authorization']['sudo']['sudoers_defaults']` as an array of `Defaults` entries to configure in `/etc/sudoers`. A list of examples for common platforms is listed below: | Configure a node attribute, `node['authorization']['sudo']['sudoers_defaults']` as an array of `Defaults` entries to configure in `/etc/sudoers`. A list of examples for common platforms is listed below: | ||||||
| 
 | 
 | ||||||
| _Debian_ | _Debian_ | ||||||
| @ -113,12 +115,6 @@ _Debian_ | |||||||
| node.default['authorization']['sudo']['sudoers_defaults'] = ['env_reset'] | node.default['authorization']['sudo']['sudoers_defaults'] = ['env_reset'] | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| _Ubuntu 10.04_ |  | ||||||
| 
 |  | ||||||
| ```ruby |  | ||||||
| node.default['authorization']['sudo']['sudoers_defaults'] = ['env_reset'] |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| _Ubuntu 12.04_ | _Ubuntu 12.04_ | ||||||
| 
 | 
 | ||||||
| ```ruby | ```ruby | ||||||
| @ -188,7 +184,8 @@ node.default['authorization']['sudo']['sudoers_defaults'] = [ | |||||||
| ] | ] | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| ### LWRP | ### Sudo Resource | ||||||
|  | 
 | ||||||
| **Note** Sudo version 1.7.2 or newer is required to use the sudo LWRP as it relies on the "#includedir" directive introduced in version 1.7.2. The recipe does not enforce installing the version. To use this LWRP, set `node['authorization']['sudo']['include_sudoers_d']` to `true`. | **Note** Sudo version 1.7.2 or newer is required to use the sudo LWRP as it relies on the "#includedir" directive introduced in version 1.7.2. The recipe does not enforce installing the version. To use this LWRP, set `node['authorization']['sudo']['include_sudoers_d']` to `true`. | ||||||
| 
 | 
 | ||||||
| There are two ways for rendering a sudoer-fragment using this LWRP: | There are two ways for rendering a sudoer-fragment using this LWRP: | ||||||
| @ -225,7 +222,8 @@ In either case, the following file would be generated in `/etc/sudoers.d/tomcat` | |||||||
| %tomcat ALL=(app_user) /etc/init.d/tomcat restart | %tomcat ALL=(app_user) /etc/init.d/tomcat restart | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| #### LWRP Attributes | #### Resource Properties | ||||||
|  | 
 | ||||||
| <table> | <table> | ||||||
|   <thead> |   <thead> | ||||||
|     <tr> |     <tr> | ||||||
| @ -321,42 +319,8 @@ case it is not already</td> | |||||||
| 
 | 
 | ||||||
| **If you use the template attribute, all other attributes will be ignored except for the variables attribute.** | **If you use the template attribute, all other attributes will be ignored except for the variables attribute.** | ||||||
| 
 | 
 | ||||||
| ## Development |  | ||||||
| This section details "quick development" steps. For a detailed explanation, see [[Contributing.md]]. |  | ||||||
| - Clone this repository from GitHub: |  | ||||||
| 
 |  | ||||||
|   ``` |  | ||||||
|    $ git clone git@github.com:chef-cookbooks/sudo.git |  | ||||||
|   ``` |  | ||||||
| 
 |  | ||||||
| - Create a git branch |  | ||||||
| 
 |  | ||||||
|   ``` |  | ||||||
|    $ git checkout -b my_bug_fix |  | ||||||
|   ``` |  | ||||||
| 
 |  | ||||||
| - Install dependencies: |  | ||||||
| 
 |  | ||||||
|   ``` |  | ||||||
|    $ bundle install |  | ||||||
|   ``` |  | ||||||
| 
 |  | ||||||
| - Make your changes/patches/fixes, committing appropiately |  | ||||||
| - **Write tests** |  | ||||||
| - Run the tests: |  | ||||||
|   - `bundle exec foodcritic -f any .` |  | ||||||
|   - `bundle exec rspec` |  | ||||||
|   - `bundle exec rubocop` |  | ||||||
|   - `bundle exec kitchen test` |  | ||||||
| 
 |  | ||||||
|     In detail: |  | ||||||
| 
 |  | ||||||
|   - Foodcritic will catch any Chef-specific style errors |  | ||||||
|   - RSpec will run the unit tests |  | ||||||
|   - Rubocop will check for Ruby-specific style errors |  | ||||||
|   - Test Kitchen will run and converge the recipes |  | ||||||
| 
 |  | ||||||
| ## License & Authors | ## License & Authors | ||||||
|  | 
 | ||||||
| **Author:** Bryan W. Berry [bryan.berry@gmail.com](mailto:bryan.berry@gmail.com) | **Author:** Bryan W. Berry [bryan.berry@gmail.com](mailto:bryan.berry@gmail.com) | ||||||
| 
 | 
 | ||||||
| **Author:** Cookbook Engineering Team ([cookbooks@chef.io](mailto:cookbooks@chef.io)) | **Author:** Cookbook Engineering Team ([cookbooks@chef.io](mailto:cookbooks@chef.io)) | ||||||
|  | |||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @ -47,7 +47,7 @@ def validate_fragment!(resource) | |||||||
|     file.rewind |     file.rewind | ||||||
| 
 | 
 | ||||||
|     cmd = Mixlib::ShellOut.new("visudo -cf #{file.path}").run_command |     cmd = Mixlib::ShellOut.new("visudo -cf #{file.path}").run_command | ||||||
|     unless cmd.exitstatus.zero? |     unless cmd.exitstatus == 0 | ||||||
|       Chef::Log.error("Fragment validation failed: \n\n") |       Chef::Log.error("Fragment validation failed: \n\n") | ||||||
|       Chef::Log.error(file.read) |       Chef::Log.error(file.read) | ||||||
|       Chef::Application.fatal!("Template #{file.path} failed fragment validation!") |       Chef::Application.fatal!("Template #{file.path} failed fragment validation!") | ||||||
| @ -77,7 +77,7 @@ def render_sudoer | |||||||
|       action :nothing |       action :nothing | ||||||
|     end |     end | ||||||
|   else |   else | ||||||
|     sudoer = new_resource.user || "%#{new_resource.group}".squeeze('%') |     sudoer = new_resource.user || ("%#{new_resource.group}".squeeze('%') if new_resource.group) | ||||||
| 
 | 
 | ||||||
|     resource = template "#{node['authorization']['sudo']['prefix']}/sudoers.d/#{sudo_filename}" do |     resource = template "#{node['authorization']['sudo']['prefix']}/sudoers.d/#{sudo_filename}" do | ||||||
|       source 'sudoer.erb' |       source 'sudoer.erb' | ||||||
|  | |||||||
| @ -31,7 +31,6 @@ if node['authorization']['sudo']['include_sudoers_d'] | |||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   cookbook_file "#{prefix}/sudoers.d/README" do |   cookbook_file "#{prefix}/sudoers.d/README" do | ||||||
|     source 'README' |  | ||||||
|     mode '0440' |     mode '0440' | ||||||
|     owner 'root' |     owner 'root' | ||||||
|     group node['root_group'] |     group node['root_group'] | ||||||
|  | |||||||
| @ -14,7 +14,7 @@ Defaults    env_keep -= "<%= env_keep %>" | |||||||
| <% end -%> | <% end -%> | ||||||
| 
 | 
 | ||||||
| <% @commands.each do |command| -%> | <% @commands.each do |command| -%> | ||||||
| <%= @sudoer %> <%= @host %>=(<%= @runas %>) <%= 'NOEXEC:' if @noexec %><%= 'NOPASSWD:' if @nopasswd %><%= 'SETENV:' if @setenv %><%= command %> | <% if @sudoer %><%= @sudoer %> <%= @host %>=(<%= @runas %>) <%= 'NOEXEC:' if @noexec %><%= 'NOPASSWD:' if @nopasswd %><%= 'SETENV:' if @setenv %><%= command %><% end -%> | ||||||
| <% end -%> | <% end -%> | ||||||
| 
 | 
 | ||||||
| <% unless @defaults.empty? %> | <% unless @defaults.empty? %> | ||||||
|  | |||||||
| @ -1 +0,0 @@ | |||||||
| ~FC003 |  | ||||||
| @ -1,16 +1,37 @@ | |||||||
| # users Cookbook CHANGELOG | # users Cookbook CHANGELOG | ||||||
|  | 
 | ||||||
| This file is used to list changes made in each version of the users cookbook. | This file is used to list changes made in each version of the users cookbook. | ||||||
| 
 | 
 | ||||||
|  | ## 5.0.0 (2017-04-17) | ||||||
|  | 
 | ||||||
|  | ### Breaking changes | ||||||
|  | 
 | ||||||
|  | - The users_manage LWRP has been converted to a custom resource, which requires Chef 12.5 or later | ||||||
|  | - The sysadmins recipe contains no resources now and will do nothing | ||||||
|  | 
 | ||||||
|  | ### Other changes | ||||||
|  | 
 | ||||||
|  | - Added integration tests with Inspec | ||||||
|  | - Fixed all deprecation warnings | ||||||
|  | - Fixed group creation on macOS when the group already exists | ||||||
|  | - Added suse platforms as supported in the metadata | ||||||
|  | - Switched to a SPDX apache-2.0 license string | ||||||
|  | - Moved all templates out of the default directory as we don't support Chef 11 anymore | ||||||
|  | 
 | ||||||
| ## 4.0.3 (2016-11-23) | ## 4.0.3 (2016-11-23) | ||||||
|  | 
 | ||||||
| - Update manage provider to return true/false in guard block which avoids warnings during run on Chef 12.14+ | - Update manage provider to return true/false in guard block which avoids warnings during run on Chef 12.14+ | ||||||
| 
 | 
 | ||||||
| ## 4.0.2 (2016-11-18) | ## 4.0.2 (2016-11-18) | ||||||
|  | 
 | ||||||
| - Deprecate the sysadmins recipe | - Deprecate the sysadmins recipe | ||||||
| 
 | 
 | ||||||
| ## 4.0.1 (2016-09-15) | ## 4.0.1 (2016-09-15) | ||||||
|  | 
 | ||||||
| - Fix creation of user home directory | - Fix creation of user home directory | ||||||
| 
 | 
 | ||||||
| ## 4.0.0 (2016-09-15) | ## 4.0.0 (2016-09-15) | ||||||
|  | 
 | ||||||
| - Add chef_version to the metadata | - Add chef_version to the metadata | ||||||
| - Require Chef 12.1+ | - Require Chef 12.1+ | ||||||
| - Testing updates | - Testing updates | ||||||
| @ -19,27 +40,32 @@ This file is used to list changes made in each version of the users cookbook. | |||||||
| - Add a warning if someone includes users::default since that does nothing | - Add a warning if someone includes users::default since that does nothing | ||||||
| 
 | 
 | ||||||
| ## v3.0.0 | ## v3.0.0 | ||||||
|  | 
 | ||||||
| - @onlyhavecans - Fix FreeBSD support | - @onlyhavecans - Fix FreeBSD support | ||||||
| - @stem - Fix user creation on Mac OS X on 10.7 and 10.8 | - @stem - Fix user creation on Mac OS X on 10.7 and 10.8 | ||||||
| - Remove old style chef solo code to clean up rubocop issues, move to using cookstyle | - Remove old style chef solo code to clean up rubocop issues, move to using cookstyle | ||||||
| - Adding zlinux support | - Adding zlinux support | ||||||
| 
 | 
 | ||||||
| ## v2.0.3 | ## v2.0.3 | ||||||
|  | 
 | ||||||
| - @nkadel-skyhook - create .ssh directory only if keys are configured. | - @nkadel-skyhook - create .ssh directory only if keys are configured. | ||||||
| - @signe - allow force parameter to be specified for users configured to be removed. | - @signe - allow force parameter to be specified for users configured to be removed. | ||||||
| - @FlorentFlament - adding the ability to manage groups for existing users. | - @FlorentFlament - adding the ability to manage groups for existing users. | ||||||
| 
 | 
 | ||||||
| ## v2.0.2 (2016-1-25) | ## v2.0.2 (2016-1-25) | ||||||
|  | 
 | ||||||
| - @375gnu- validate uid/gid for strings versus numeric | - @375gnu- validate uid/gid for strings versus numeric | ||||||
| - fix rubocop errors based on https://github.com/bbatsov/rubocop/issues/2608 | - fix rubocop errors based on <https://github.com/bbatsov/rubocop/issues/2608> | ||||||
| - fix kitchen configurations for testing | - fix kitchen configurations for testing | ||||||
| 
 | 
 | ||||||
| ## v2.0.1 (2016-1-8) | ## v2.0.1 (2016-1-8) | ||||||
|  | 
 | ||||||
| - Fixed provider to work on Mac OS X | - Fixed provider to work on Mac OS X | ||||||
| - funzoneq - add correct default shell for FreeBSD if not provided | - funzoneq - add correct default shell for FreeBSD if not provided | ||||||
| - Added kitchen.dokken to speed up platform testing | - Added kitchen.dokken to speed up platform testing | ||||||
| 
 | 
 | ||||||
| ## v2.0.0 (2015-12-11) | ## v2.0.0 (2015-12-11) | ||||||
|  | 
 | ||||||
| - Removed Chef 10 compatibility code | - Removed Chef 10 compatibility code | ||||||
| - Removed the nodes fqdn from the authorized_keys file | - Removed the nodes fqdn from the authorized_keys file | ||||||
| - Removed a trailing comma in a readme example | - Removed a trailing comma in a readme example | ||||||
| @ -48,12 +74,15 @@ This file is used to list changes made in each version of the users cookbook. | |||||||
| - Resolved foodcritic warnings | - Resolved foodcritic warnings | ||||||
| 
 | 
 | ||||||
| ## v1.8.2 (2015-03-18) | ## v1.8.2 (2015-03-18) | ||||||
|  | 
 | ||||||
| - No changes, just republishing 1.8.1 | - No changes, just republishing 1.8.1 | ||||||
| 
 | 
 | ||||||
| ## v1.8.1 (2015-03-12) | ## v1.8.1 (2015-03-12) | ||||||
|  | 
 | ||||||
| - Add `source_url` and `issues_url` to the metadata.rb so Supermarket can display appropriate links | - Add `source_url` and `issues_url` to the metadata.rb so Supermarket can display appropriate links | ||||||
| 
 | 
 | ||||||
| ## v1.8.0 (2015-03-09) | ## v1.8.0 (2015-03-09) | ||||||
|  | 
 | ||||||
| - Expose LWRP state attributes | - Expose LWRP state attributes | ||||||
| - [COOK-4401] - Add unit tests with ChefSpec | - [COOK-4401] - Add unit tests with ChefSpec | ||||||
| - [COOK-4404] - Determine file system and add manage_nfs_home_dirs attribute to disable managing NFS mounted home directories | - [COOK-4404] - Determine file system and add manage_nfs_home_dirs attribute to disable managing NFS mounted home directories | ||||||
| @ -65,40 +94,52 @@ This file is used to list changes made in each version of the users cookbook. | |||||||
| - Updates for RSpec 3 | - Updates for RSpec 3 | ||||||
| 
 | 
 | ||||||
| ## v1.7.0 (2014-02-14) | ## v1.7.0 (2014-02-14) | ||||||
|  | 
 | ||||||
| - [COOK-4139] - users_manage resource always notifies | - [COOK-4139] - users_manage resource always notifies | ||||||
| - [COOK-4078] - users cookbook fails in why-run mode for .ssh directory | - [COOK-4078] - users cookbook fails in why-run mode for .ssh directory | ||||||
| - [COOK-3959] - Add support for Mac OS X to users cookbook | - [COOK-3959] - Add support for Mac OS X to users cookbook | ||||||
| 
 | 
 | ||||||
| ## v1.6.0 | ## v1.6.0 | ||||||
|  | 
 | ||||||
| ### Bug | ### Bug | ||||||
|  | 
 | ||||||
| - **[COOK-3744](https://tickets.opscode.com/browse/COOK-3744)** - Allow passing an action option via the `data_bag` to the user resource | - **[COOK-3744](https://tickets.opscode.com/browse/COOK-3744)** - Allow passing an action option via the `data_bag` to the user resource | ||||||
| 
 | 
 | ||||||
| ## v1.5.2 | ## v1.5.2 | ||||||
|  | 
 | ||||||
| ### Bug | ### Bug | ||||||
|  | 
 | ||||||
| - **[COOK-3215](https://tickets.opscode.com/browse/COOK-3215)** - Make `group_id` optional | - **[COOK-3215](https://tickets.opscode.com/browse/COOK-3215)** - Make `group_id` optional | ||||||
| 
 | 
 | ||||||
| ## v1.5.0 | ## v1.5.0 | ||||||
|  | 
 | ||||||
| - [COOK-2427] - Mistakenly released instead of sudo :-). | - [COOK-2427] - Mistakenly released instead of sudo :-). | ||||||
| 
 | 
 | ||||||
| ## v1.4.0 | ## v1.4.0 | ||||||
|  | 
 | ||||||
| - [COOK-2479] - Permit users cookbook to work with chef-solo if edelight/chef-solo-search is installed | - [COOK-2479] - Permit users cookbook to work with chef-solo if edelight/chef-solo-search is installed | ||||||
| - [COOK-2486] - specify precedence when setting node attribute | - [COOK-2486] - specify precedence when setting node attribute | ||||||
| 
 | 
 | ||||||
| ## v1.3.0 | ## v1.3.0 | ||||||
|  | 
 | ||||||
| - [COOK-1842] - allow specifying private SSH keys | - [COOK-1842] - allow specifying private SSH keys | ||||||
| - [COOK-2021] - Empty default recipe for including users LWRPs | - [COOK-2021] - Empty default recipe for including users LWRPs | ||||||
| 
 | 
 | ||||||
| ## v1.2.0 | ## v1.2.0 | ||||||
|  | 
 | ||||||
| - [COOK-1398] - Provider manage.rb ignores username attribute | - [COOK-1398] - Provider manage.rb ignores username attribute | ||||||
| - [COOK-1582] - ssh_keys should take an array in addition to a string separated by new lines | - [COOK-1582] - ssh_keys should take an array in addition to a string separated by new lines | ||||||
| 
 | 
 | ||||||
| ## v1.1.4 | ## v1.1.4 | ||||||
|  | 
 | ||||||
| - [COOK-1396] - removed users get recreated | - [COOK-1396] - removed users get recreated | ||||||
| - [COOK-1433] - resolve foodcritic warnings | - [COOK-1433] - resolve foodcritic warnings | ||||||
| - [COOK-1583] - set passwords for users | - [COOK-1583] - set passwords for users | ||||||
| 
 | 
 | ||||||
| ## v1.1.2 | ## v1.1.2 | ||||||
|  | 
 | ||||||
| - [COOK-1076] - authorized_keys template not found in another cookbook | - [COOK-1076] - authorized_keys template not found in another cookbook | ||||||
| 
 | 
 | ||||||
| ## v1.1.0 | ## v1.1.0 | ||||||
|  | 
 | ||||||
| - [COOK-623] - LWRP conversion | - [COOK-623] - LWRP conversion | ||||||
|  | |||||||
| @ -12,21 +12,22 @@ This cookbook is concerned with the management of OS users and groups from datab | |||||||
| 
 | 
 | ||||||
| A data bag populated with user objects must exist. The default data bag in this recipe is `users`. See USAGE. | A data bag populated with user objects must exist. The default data bag in this recipe is `users`. See USAGE. | ||||||
| 
 | 
 | ||||||
| ### Chef | ### Platforms | ||||||
| 
 |  | ||||||
| - Chef 12.1+ |  | ||||||
| 
 |  | ||||||
| ### Platform Support |  | ||||||
| 
 | 
 | ||||||
| The following platforms have been tested with Test Kitchen: | The following platforms have been tested with Test Kitchen: | ||||||
| 
 | 
 | ||||||
| - Debian / Ubuntu and derivatives | - Debian / Ubuntu derivatives | ||||||
| - RHEL and derivatives | - RHEL and derivatives | ||||||
| - Fedora | - Fedora | ||||||
|  | - openSUSE / SUSE Linux Enterprises | ||||||
| - FreeBSD / OpenBSD | - FreeBSD / OpenBSD | ||||||
| - Mac OS X | - Mac OS X | ||||||
| 
 | 
 | ||||||
| ### Cookbook Dependencies | ### Chef | ||||||
|  | 
 | ||||||
|  | - Chef 12.5+ | ||||||
|  | 
 | ||||||
|  | ### Cookbooks | ||||||
| 
 | 
 | ||||||
| - none | - none | ||||||
| 
 | 
 | ||||||
| @ -303,7 +304,7 @@ The Apache cookbook can set up authentication using OpenIDs, which is set up usi | |||||||
| 
 | 
 | ||||||
| **Author:** Cookbook Engineering Team ([cookbooks@chef.io](mailto:cookbooks@chef.io)) | **Author:** Cookbook Engineering Team ([cookbooks@chef.io](mailto:cookbooks@chef.io)) | ||||||
| 
 | 
 | ||||||
| **Copyright:** 2009-2016, Chef Software, Inc. | **Copyright:** 2009-2017, Chef Software, Inc. | ||||||
| 
 | 
 | ||||||
| ``` | ``` | ||||||
| Licensed under the Apache License, Version 2.0 (the "License"); | Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  | |||||||
| @ -1,5 +1,3 @@ | |||||||
| require 'mixlib/shellout' |  | ||||||
| 
 |  | ||||||
| module Users | module Users | ||||||
|   # Helpers for Users |   # Helpers for Users | ||||||
|   module Helpers |   module Helpers | ||||||
| @ -28,8 +26,16 @@ module Users | |||||||
|     def validate_id(id) |     def validate_id(id) | ||||||
|       id.to_i.to_s == id ? id.to_i : id |       id.to_i.to_s == id ? id.to_i : id | ||||||
|     end |     end | ||||||
|   end |  | ||||||
| end |  | ||||||
| 
 | 
 | ||||||
| Chef::Resource.send(:include, ::Users::Helpers) |     # Returns the appropriate base user home directory per platform | ||||||
| Chef::Provider.send(:include, ::Users::Helpers) |     # | ||||||
|  |     # @return [ String] | ||||||
|  |     def home_basedir | ||||||
|  |       if platform_family?('mac_os_x') | ||||||
|  |         '/Users' | ||||||
|  |       else | ||||||
|  |         '/home' | ||||||
|  |       end | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | end | ||||||
|  | |||||||
							
								
								
									
										29
									
								
								cookbooks/users/libraries/osx_helper.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								cookbooks/users/libraries/osx_helper.rb
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,29 @@ | |||||||
|  | module Users | ||||||
|  |   # Helpers for Users | ||||||
|  |   module OsxHelper | ||||||
|  |     def dscl(*args) | ||||||
|  |       host = '.' | ||||||
|  |       stdout_result = '' | ||||||
|  |       stderr_result = '' | ||||||
|  |       cmd = "dscl #{host} -#{args.join(' ')}" | ||||||
|  |       status = shell_out(cmd) | ||||||
|  |       status.stdout.each_line { |line| stdout_result << line } | ||||||
|  |       status.stderr.each_line { |line| stderr_result << line } | ||||||
|  |       [cmd, status, stdout_result, stderr_result] | ||||||
|  |     end | ||||||
|  | 
 | ||||||
|  |     def safe_dscl(*args) | ||||||
|  |       result = dscl(*args) | ||||||
|  |       return '' if (args.first =~ /^delete/) && (result[1].exitstatus != 0) | ||||||
|  |       raise(Chef::Exceptions::Group, "dscl error: #{result.inspect}") unless result[1].exitstatus == 0 | ||||||
|  |       raise(Chef::Exceptions::Group, "dscl error: #{result.inspect}") if result[2] =~ /No such key: / | ||||||
|  |       result[2] | ||||||
|  |     end | ||||||
|  | 
 | ||||||
|  |     def gid_used?(gid) | ||||||
|  |       return false unless gid | ||||||
|  |       groups_gids = safe_dscl('list /Groups gid') | ||||||
|  |       !!(groups_gids =~ Regexp.new("#{Regexp.escape(gid.to_s)}\n")) | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | end | ||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @ -1,172 +0,0 @@ | |||||||
| # |  | ||||||
| # Cookbook:: users |  | ||||||
| # Provider:: manage |  | ||||||
| # |  | ||||||
| # Copyright:: 2011-2016, Eric G. Wolfe |  | ||||||
| # Copyright:: 2009-2016, Chef Software, Inc. |  | ||||||
| # |  | ||||||
| # Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
| # you may not use this file except in compliance with the License. |  | ||||||
| # You may obtain a copy of the License at |  | ||||||
| # |  | ||||||
| #     http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
| # |  | ||||||
| # Unless required by applicable law or agreed to in writing, software |  | ||||||
| # distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
| # See the License for the specific language governing permissions and |  | ||||||
| # limitations under the License. |  | ||||||
| # |  | ||||||
| 
 |  | ||||||
| use_inline_resources |  | ||||||
| 
 |  | ||||||
| def whyrun_supported? |  | ||||||
|   true |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| action :remove do |  | ||||||
|   search(new_resource.data_bag, "groups:#{new_resource.search_group} AND action:remove") do |rm_user| |  | ||||||
|     user rm_user['username'] ||= rm_user['id'] do |  | ||||||
|       action :remove |  | ||||||
|       force rm_user['force'] ||= false |  | ||||||
|     end |  | ||||||
|   end |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| action :create do |  | ||||||
|   users_groups = {} |  | ||||||
|   users_groups[new_resource.group_name] = [] |  | ||||||
| 
 |  | ||||||
|   search(new_resource.data_bag, "groups:#{new_resource.search_group} AND NOT action:remove") do |u| |  | ||||||
|     u['username'] ||= u['id'] |  | ||||||
|     u['groups'].each do |g| |  | ||||||
|       users_groups[g] = [] unless users_groups.key?(g) |  | ||||||
|       users_groups[g] << u['username'] |  | ||||||
|     end |  | ||||||
| 
 |  | ||||||
|     if node['apache'] && node['apache']['allowed_openids'] |  | ||||||
|       Array(u['openid']).compact.each do |oid| |  | ||||||
|         node.default['apache']['allowed_openids'] << oid unless node['apache']['allowed_openids'].include?(oid) |  | ||||||
|       end |  | ||||||
|     end |  | ||||||
| 
 |  | ||||||
|     # Platform specific checks |  | ||||||
|     #  Set home_basedir |  | ||||||
|     #  Set shell on FreeBSD |  | ||||||
|     home_basedir = '/home' |  | ||||||
| 
 |  | ||||||
|     case node['platform_family'] |  | ||||||
|     when 'mac_os_x' |  | ||||||
|       home_basedir = '/Users' |  | ||||||
|     when 'freebsd' |  | ||||||
|       # Check if we need to prepend shell with /usr/local/? |  | ||||||
|       u['shell'] = (!::File.exist?(u['shell']) && ::File.exist?("/usr/local#{u['shell']}") ? "/usr/local#{u['shell']}" : '/bin/sh') |  | ||||||
|     end |  | ||||||
| 
 |  | ||||||
|     # Set home to location in data bag, |  | ||||||
|     # or a reasonable default ($home_basedir/$user). |  | ||||||
|     home_dir = (u['home'] ? u['home'] : "#{home_basedir}/#{u['username']}") |  | ||||||
| 
 |  | ||||||
|     # check whether home dir is null |  | ||||||
|     manage_home = (home_dir == '/dev/null' ? false : true) |  | ||||||
| 
 |  | ||||||
|     # The user block will fail if the group does not yet exist. |  | ||||||
|     # See the -g option limitations in man 8 useradd for an explanation. |  | ||||||
|     # This should correct that without breaking functionality. |  | ||||||
|     group u['username'] do # ~FC022 |  | ||||||
|       gid validate_id(u['gid']) |  | ||||||
|       only_if { u['gid'] && u['gid'].is_a?(Numeric) } |  | ||||||
|     end |  | ||||||
| 
 |  | ||||||
|     # Create user object. |  | ||||||
|     # Do NOT try to manage null home directories. |  | ||||||
|     user u['username'] do |  | ||||||
|       uid validate_id(u['uid']) |  | ||||||
|       gid validate_id(u['gid']) if u['gid'] |  | ||||||
|       shell u['shell'] |  | ||||||
|       comment u['comment'] |  | ||||||
|       password u['password'] if u['password'] |  | ||||||
|       salt u['salt'] if u['salt'] |  | ||||||
|       iterations u['iterations'] if u['iterations'] |  | ||||||
|       manage_home manage_home |  | ||||||
|       home home_dir |  | ||||||
|       action u['action'] if u['action'] |  | ||||||
|     end |  | ||||||
| 
 |  | ||||||
|     if manage_home_files?(home_dir, u['username']) |  | ||||||
|       Chef::Log.debug("Managing home files for #{u['username']}") |  | ||||||
| 
 |  | ||||||
|       directory "#{home_dir}/.ssh" do |  | ||||||
|         recursive true |  | ||||||
|         owner u['uid'] ? validate_id(u['uid']) : u['username'] |  | ||||||
|         group validate_id(u['gid']) if u['gid'] |  | ||||||
|         mode '0700' |  | ||||||
|         only_if { !!(u['ssh_keys'] || u['ssh_private_key'] || u['ssh_public_key']) } |  | ||||||
|       end |  | ||||||
| 
 |  | ||||||
|       template "#{home_dir}/.ssh/authorized_keys" do |  | ||||||
|         source 'authorized_keys.erb' |  | ||||||
|         cookbook new_resource.cookbook |  | ||||||
|         owner u['uid'] ? validate_id(u['uid']) : u['username'] |  | ||||||
|         group validate_id(u['gid']) if u['gid'] |  | ||||||
|         mode '0600' |  | ||||||
|         variables ssh_keys: u['ssh_keys'] |  | ||||||
|         only_if { !!(u['ssh_keys']) } |  | ||||||
|       end |  | ||||||
| 
 |  | ||||||
|       if u['ssh_private_key'] |  | ||||||
|         key_type = u['ssh_private_key'].include?('BEGIN RSA PRIVATE KEY') ? 'rsa' : 'dsa' |  | ||||||
|         template "#{home_dir}/.ssh/id_#{key_type}" do |  | ||||||
|           source 'private_key.erb' |  | ||||||
|           cookbook new_resource.cookbook |  | ||||||
|           owner u['uid'] ? validate_id(u['uid']) : u['username'] |  | ||||||
|           group validate_id(u['gid']) if u['gid'] |  | ||||||
|           mode '0400' |  | ||||||
|           variables private_key: u['ssh_private_key'] |  | ||||||
|         end |  | ||||||
|       end |  | ||||||
| 
 |  | ||||||
|       if u['ssh_public_key'] |  | ||||||
|         key_type = u['ssh_public_key'].include?('ssh-rsa') ? 'rsa' : 'dsa' |  | ||||||
|         template "#{home_dir}/.ssh/id_#{key_type}.pub" do |  | ||||||
|           source 'public_key.pub.erb' |  | ||||||
|           cookbook new_resource.cookbook |  | ||||||
|           owner u['uid'] ? validate_id(u['uid']) : u['username'] |  | ||||||
|           group validate_id(u['gid']) if u['gid'] |  | ||||||
|           mode '0400' |  | ||||||
|           variables public_key: u['ssh_public_key'] |  | ||||||
|         end |  | ||||||
|       end |  | ||||||
|     else |  | ||||||
|       Chef::Log.debug("Not managing home files for #{u['username']}") |  | ||||||
|     end |  | ||||||
|   end |  | ||||||
| 
 |  | ||||||
|   # Populating users to appropriates groups |  | ||||||
|   users_groups.each do |g, u| |  | ||||||
|     group g do |  | ||||||
|       members u |  | ||||||
|       append true |  | ||||||
|       action :manage # Do nothing if group doesn't exist |  | ||||||
|     end unless g == new_resource.group_name # Dealing with managed group later |  | ||||||
|   end |  | ||||||
| 
 |  | ||||||
|   group new_resource.group_name do |  | ||||||
|     gid new_resource.group_id if new_resource.group_id |  | ||||||
|     members users_groups[new_resource.group_name] |  | ||||||
|   end |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| private |  | ||||||
| 
 |  | ||||||
| def manage_home_files?(home_dir, _user) |  | ||||||
|   # Don't manage home dir if it's NFS mount |  | ||||||
|   # and manage_nfs_home_dirs is disabled |  | ||||||
|   if home_dir == '/dev/null' |  | ||||||
|     false |  | ||||||
|   elsif fs_remote?(home_dir) |  | ||||||
|     new_resource.manage_nfs_home_dirs ? true : false |  | ||||||
|   else |  | ||||||
|     true |  | ||||||
|   end |  | ||||||
| end |  | ||||||
| @ -2,7 +2,7 @@ | |||||||
| # Cookbook:: users | # Cookbook:: users | ||||||
| # Recipe:: default | # Recipe:: default | ||||||
| # | # | ||||||
| # Copyright:: 2009-2016, Chef Software, Inc. | # Copyright:: 2009-2017, Chef Software, Inc. | ||||||
| # | # | ||||||
| # Licensed under the Apache License, Version 2.0 (the "License"); | # Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
| # you may not use this file except in compliance with the License. | # you may not use this file except in compliance with the License. | ||||||
|  | |||||||
| @ -2,8 +2,8 @@ | |||||||
| # Cookbook:: users | # Cookbook:: users | ||||||
| # Recipe:: sysadmins | # Recipe:: sysadmins | ||||||
| # | # | ||||||
| # Copyright:: 2011-2016, Eric G. Wolfe | # Copyright:: 2011-2017, Eric G. Wolfe | ||||||
| # Copyright:: 2009-2016, Chef Software, Inc. | # Copyright:: 2009-2017, Chef Software, Inc. | ||||||
| # | # | ||||||
| # Licensed under the Apache License, Version 2.0 (the "License"); | # Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
| # you may not use this file except in compliance with the License. | # you may not use this file except in compliance with the License. | ||||||
| @ -18,11 +18,4 @@ | |||||||
| # limitations under the License. | # limitations under the License. | ||||||
| # | # | ||||||
| 
 | 
 | ||||||
| Chef::Log.warn('The sysadmins recipe has been deprecated. We suggest using the users_manage resource in your own cookbook if you need similar functionality. The resource in this recipe will be removed with a major release of the cookbook in April 2017') | Chef::Log.warn('The sysadmins recipe has been deprecated. We suggest using the users_manage resource in your own cookbook if you need similar functionality.') | ||||||
| 
 |  | ||||||
| # Searches data bag "users" for groups attribute "sysadmin". |  | ||||||
| # Places returned users in Unix group "sysadmin" with GID 2300. |  | ||||||
| users_manage 'sysadmin' do |  | ||||||
|   group_id 2300 |  | ||||||
|   action [:remove, :create] |  | ||||||
| end |  | ||||||
|  | |||||||
| @ -2,7 +2,7 @@ | |||||||
| # Cookbook:: users | # Cookbook:: users | ||||||
| # Resources:: manage | # Resources:: manage | ||||||
| # | # | ||||||
| # Copyright:: 2011-2016, Eric G. Wolfe | # Copyright:: 2011-2017, Eric G. Wolfe | ||||||
| # | # | ||||||
| # Licensed under the Apache License, Version 2.0 (the "License"); | # Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
| # you may not use this file except in compliance with the License. | # you may not use this file except in compliance with the License. | ||||||
| @ -17,24 +17,159 @@ | |||||||
| # limitations under the License. | # limitations under the License. | ||||||
| # | # | ||||||
| 
 | 
 | ||||||
| # Data bag user object needs an "action": "remove" tag to actually be removed by the action. |  | ||||||
| actions :create, :remove |  | ||||||
| default_action :create |  | ||||||
| 
 |  | ||||||
| state_attrs :cookbook, |  | ||||||
|             :data_bag, |  | ||||||
|             :group_id, |  | ||||||
|             :group_name, |  | ||||||
|             :search_group |  | ||||||
| 
 |  | ||||||
| # :data_bag is the object to search | # :data_bag is the object to search | ||||||
| # :search_group is the groups name to search for, defaults to resource name | # :search_group is the groups name to search for, defaults to resource name | ||||||
| # :group_name is the string name of the group to create, defaults to resource name | # :group_name is the string name of the group to create, defaults to resource name | ||||||
| # :group_id is the numeric id of the group to create, default is to allow the OS to pick next | # :group_id is the numeric id of the group to create, default is to allow the OS to pick next | ||||||
| # :cookbook is the name of the cookbook that the authorized_keys template should be found in | # :cookbook is the name of the cookbook that the authorized_keys template should be found in | ||||||
| attribute :data_bag, kind_of: String, default: 'users' | property :data_bag, String, default: 'users' | ||||||
| attribute :search_group, kind_of: String, name_attribute: true | property :search_group, String, name_property: true | ||||||
| attribute :group_name, kind_of: String, name_attribute: true | property :group_name, String, name_property: true | ||||||
| attribute :group_id, kind_of: Integer | property :group_id, Integer | ||||||
| attribute :cookbook, kind_of: String, default: 'users' | property :cookbook, String, default: 'users' | ||||||
| attribute :manage_nfs_home_dirs, kind_of: [TrueClass, FalseClass], default: true | property :manage_nfs_home_dirs, [true, false], default: true | ||||||
|  | 
 | ||||||
|  | action :create do | ||||||
|  |   users_groups = {} | ||||||
|  |   users_groups[new_resource.group_name] = [] | ||||||
|  | 
 | ||||||
|  |   search(new_resource.data_bag, "groups:#{new_resource.search_group} AND NOT action:remove") do |u| | ||||||
|  |     u['username'] ||= u['id'] | ||||||
|  |     u['groups'].each do |g| | ||||||
|  |       users_groups[g] = [] unless users_groups.key?(g) | ||||||
|  |       users_groups[g] << u['username'] | ||||||
|  |     end | ||||||
|  | 
 | ||||||
|  |     # Check if we need to prepend shell with /usr/local/? | ||||||
|  |     if platform_family? 'freebsd' | ||||||
|  |       u['shell'] = (!::File.exist?(u['shell']) && ::File.exist?("/usr/local#{u['shell']}") ? "/usr/local#{u['shell']}" : '/bin/sh') | ||||||
|  |     end | ||||||
|  | 
 | ||||||
|  |     # Set home to location in data bag, | ||||||
|  |     # or a reasonable default ($home_basedir/$user). | ||||||
|  |     home_dir = (u['home'] ? u['home'] : "#{home_basedir}/#{u['username']}") | ||||||
|  | 
 | ||||||
|  |     # check whether home dir is null | ||||||
|  |     manage_home = (home_dir == '/dev/null' ? false : true) | ||||||
|  | 
 | ||||||
|  |     # The user block will fail if the group does not yet exist. | ||||||
|  |     # See the -g option limitations in man 8 useradd for an explanation. | ||||||
|  |     # This should correct that without breaking functionality. | ||||||
|  |     group u['username'] do # ~FC022 | ||||||
|  |       case node['platform_family'] | ||||||
|  |       when 'mac_os_x' | ||||||
|  |         gid validate_id(u['gid']) unless gid_used?(validate_id(u['gid'])) || new_resource.group_name == u['username'] | ||||||
|  |       else | ||||||
|  |         gid validate_id(u['gid']) | ||||||
|  |       end | ||||||
|  |       only_if { u['gid'] && u['gid'].is_a?(Numeric) } | ||||||
|  |     end | ||||||
|  | 
 | ||||||
|  |     # Create user object. | ||||||
|  |     # Do NOT try to manage null home directories. | ||||||
|  |     user u['username'] do | ||||||
|  |       uid validate_id(u['uid']) | ||||||
|  |       gid validate_id(u['gid']) if u['gid'] | ||||||
|  |       shell u['shell'] | ||||||
|  |       comment u['comment'] | ||||||
|  |       password u['password'] if u['password'] | ||||||
|  |       salt u['salt'] if u['salt'] | ||||||
|  |       iterations u['iterations'] if u['iterations'] | ||||||
|  |       manage_home manage_home | ||||||
|  |       home home_dir | ||||||
|  |       action u['action'] if u['action'] | ||||||
|  |     end | ||||||
|  | 
 | ||||||
|  |     if manage_home_files?(home_dir, u['username']) | ||||||
|  |       Chef::Log.debug("Managing home files for #{u['username']}") | ||||||
|  | 
 | ||||||
|  |       directory "#{home_dir}/.ssh" do | ||||||
|  |         recursive true | ||||||
|  |         owner u['uid'] ? validate_id(u['uid']) : u['username'] | ||||||
|  |         group validate_id(u['gid']) if u['gid'] | ||||||
|  |         mode '0700' | ||||||
|  |         only_if { !!(u['ssh_keys'] || u['ssh_private_key'] || u['ssh_public_key']) } | ||||||
|  |       end | ||||||
|  | 
 | ||||||
|  |       template "#{home_dir}/.ssh/authorized_keys" do | ||||||
|  |         source 'authorized_keys.erb' | ||||||
|  |         cookbook new_resource.cookbook | ||||||
|  |         owner u['uid'] ? validate_id(u['uid']) : u['username'] | ||||||
|  |         group validate_id(u['gid']) if u['gid'] | ||||||
|  |         mode '0600' | ||||||
|  |         variables ssh_keys: u['ssh_keys'] | ||||||
|  |         only_if { !!(u['ssh_keys']) } | ||||||
|  |       end | ||||||
|  | 
 | ||||||
|  |       if u['ssh_private_key'] | ||||||
|  |         key_type = u['ssh_private_key'].include?('BEGIN RSA PRIVATE KEY') ? 'rsa' : 'dsa' | ||||||
|  |         template "#{home_dir}/.ssh/id_#{key_type}" do | ||||||
|  |           source 'private_key.erb' | ||||||
|  |           cookbook new_resource.cookbook | ||||||
|  |           owner u['uid'] ? validate_id(u['uid']) : u['username'] | ||||||
|  |           group validate_id(u['gid']) if u['gid'] | ||||||
|  |           mode '0400' | ||||||
|  |           variables private_key: u['ssh_private_key'] | ||||||
|  |         end | ||||||
|  |       end | ||||||
|  | 
 | ||||||
|  |       if u['ssh_public_key'] | ||||||
|  |         key_type = u['ssh_public_key'].include?('ssh-rsa') ? 'rsa' : 'dsa' | ||||||
|  |         template "#{home_dir}/.ssh/id_#{key_type}.pub" do | ||||||
|  |           source 'public_key.pub.erb' | ||||||
|  |           cookbook new_resource.cookbook | ||||||
|  |           owner u['uid'] ? validate_id(u['uid']) : u['username'] | ||||||
|  |           group validate_id(u['gid']) if u['gid'] | ||||||
|  |           mode '0400' | ||||||
|  |           variables public_key: u['ssh_public_key'] | ||||||
|  |         end | ||||||
|  |       end | ||||||
|  |     else | ||||||
|  |       Chef::Log.debug("Not managing home files for #{u['username']}") | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  |   # Populating users to appropriates groups | ||||||
|  |   users_groups.each do |g, u| | ||||||
|  |     group g do | ||||||
|  |       members u | ||||||
|  |       append true | ||||||
|  |       action :manage # Do nothing if group doesn't exist | ||||||
|  |     end unless g == new_resource.group_name # Dealing with managed group later | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   group new_resource.group_name do | ||||||
|  |     case node['platform_family'] | ||||||
|  |     when 'mac_os_x' | ||||||
|  |       gid new_resource.group_id unless gid_used?(new_resource.group_id) | ||||||
|  |     else | ||||||
|  |       gid new_resource.group_id | ||||||
|  |     end | ||||||
|  |     members users_groups[new_resource.group_name] | ||||||
|  |   end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | action :remove do | ||||||
|  |   search(new_resource.data_bag, "groups:#{new_resource.search_group} AND action:remove") do |rm_user| | ||||||
|  |     user rm_user['username'] ||= rm_user['id'] do | ||||||
|  |       action :remove | ||||||
|  |       force rm_user['force'] ||= false | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | action_class.class_eval do | ||||||
|  |   include ::Users::Helpers | ||||||
|  |   include ::Users::OsxHelper | ||||||
|  | 
 | ||||||
|  |   def manage_home_files?(home_dir, _user) | ||||||
|  |     # Don't manage home dir if it's NFS mount | ||||||
|  |     # and manage_nfs_home_dirs is disabled | ||||||
|  |     if home_dir == '/dev/null' | ||||||
|  |       false | ||||||
|  |     elsif fs_remote?(home_dir) | ||||||
|  |       new_resource.manage_nfs_home_dirs ? true : false | ||||||
|  |     else | ||||||
|  |       true | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | end | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user