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