Initial release 0.1.0
This commit is contained in:
commit
17c935af1d
6 changed files with 224 additions and 0 deletions
6
Berksfile
Normal file
6
Berksfile
Normal file
|
@ -0,0 +1,6 @@
|
|||
source "https://supermarket.chef.io"
|
||||
|
||||
metadata
|
||||
|
||||
cookbook 'sudo', ">= 2.7.1"
|
||||
|
13
CHANGELOG.md
Normal file
13
CHANGELOG.md
Normal file
|
@ -0,0 +1,13 @@
|
|||
sudo_rules CHANGELOG
|
||||
====================
|
||||
|
||||
This file is used to list changes made in each version of the sudo_rules cookbook.
|
||||
|
||||
0.1.0
|
||||
-----
|
||||
- [erenfro] - Initial release of test
|
||||
|
||||
- - -
|
||||
Check the [Markdown Syntax Guide](http://daringfireball.net/projects/markdown/syntax) for help with Markdown.
|
||||
|
||||
The [Github Flavored Markdown page](http://github.github.com/github-flavored-markdown/) describes the differences between markdown on github and standard markdown.
|
95
README.md
Normal file
95
README.md
Normal file
|
@ -0,0 +1,95 @@
|
|||
sudo_rules Cookbook
|
||||
===================
|
||||
Reads through a special data bag of sudo rules to compile a list of sudoers.d rules to create/remove.
|
||||
|
||||
Requirements
|
||||
------------
|
||||
#### packages
|
||||
- sudo
|
||||
|
||||
Attributes
|
||||
----------
|
||||
TODO: List your cookbook attributes here.
|
||||
|
||||
e.g.
|
||||
#### sudo_rules::default
|
||||
<table>
|
||||
<tr>
|
||||
<th>Key</th>
|
||||
<th>Type</th>
|
||||
<th>Description</th>
|
||||
<th>Default</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><tt>['sudo_rules']['data_bag']</tt></td>
|
||||
<td>String</td>
|
||||
<td>Name of data bag to use for entries</td>
|
||||
<td><tt>sudo_rules</tt></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
Usage
|
||||
-----
|
||||
#### sudo_rules::default
|
||||
|
||||
Include `sudo_rules` in your node's `run_list`:
|
||||
|
||||
```json
|
||||
{
|
||||
"name":"my_node",
|
||||
"run_list": [
|
||||
"recipe[sudo_rules]"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
And provide properly formatted data bag:
|
||||
|
||||
```json
|
||||
{
|
||||
"id": "Data Bag unique name, default value for name below",
|
||||
"name": "Name of the sudoers.d file
|
||||
"hosts": [
|
||||
"fqdn1",
|
||||
"fqdn2",
|
||||
...
|
||||
],
|
||||
"action": "create",
|
||||
"user": "someuser",
|
||||
"runas": "ALL",
|
||||
"commands": [
|
||||
"/usr/sbin/somecommand args",
|
||||
"/usr/sbin/anothercommand",
|
||||
...
|
||||
],
|
||||
"defaults": [
|
||||
"env_reset"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Id: Required: Name of Data Bag item, and sudoers.d/Id filename.
|
||||
Name: Optional: Instead of using Id, you can choose the name of the file for sudoers.d/Name instead.
|
||||
Hosts: Required: List of hosts to apply this rule to by fqdn, can be wildcard matched.
|
||||
Action: `create` or `remove`: Default `create`
|
||||
User: Required: Username or %Groupname to use for the sudo rule.
|
||||
Runas: Allowed colon-separated list of users for sudoers runas: Default `ALL`
|
||||
Commands: Required: List of commands (and arguments) this rule adds for the user/group.
|
||||
Defaults: List of defaults this user has.
|
||||
|
||||
Contributing
|
||||
------------
|
||||
TODO: (optional) If this is a public cookbook, detail the process for contributing. If this is a private cookbook, remove this section.
|
||||
|
||||
e.g.
|
||||
1. Fork the repository on Github
|
||||
2. Create a named feature branch (like `add_component_x`)
|
||||
3. Write your change
|
||||
4. Write tests for your change (if applicable)
|
||||
5. Run the tests, ensuring they all pass
|
||||
6. Submit a Pull Request using Github
|
||||
|
||||
License and Authors
|
||||
-------------------
|
||||
Authors: TODO: List authors
|
||||
|
2
attributes/default.rb
Normal file
2
attributes/default.rb
Normal file
|
@ -0,0 +1,2 @@
|
|||
default["sudo_rules"]["data_bag"] = "sudo_rules"
|
||||
|
10
metadata.rb
Normal file
10
metadata.rb
Normal file
|
@ -0,0 +1,10 @@
|
|||
name 'sudo_rules'
|
||||
maintainer 'Linux-Help.org'
|
||||
maintainer_email 'erenfro@linux-help.org'
|
||||
license 'All rights reserved'
|
||||
description 'Configures sudo rules from data bags using the sudo cookbook'
|
||||
long_description IO.read(File.join(File.dirname(__FILE__), 'README.md'))
|
||||
version '0.1.0'
|
||||
|
||||
depends 'sudo', '>= 2.7.1'
|
||||
|
98
recipes/default.rb
Normal file
98
recipes/default.rb
Normal file
|
@ -0,0 +1,98 @@
|
|||
#
|
||||
# Cookbook Name:: sudo_rules
|
||||
# Recipe:: default
|
||||
#
|
||||
# Copyright 2015, Linux-Help.org
|
||||
#
|
||||
# All rights reserved - Do Not Redistribute
|
||||
#
|
||||
|
||||
include_recipe "sudo"
|
||||
|
||||
node.override['authorization']['sudo']['include_sudoers_d'] = true
|
||||
search_node = node['fqdn']
|
||||
|
||||
if Chef::Config[:solo] and nod chef_solo_search_installed?
|
||||
Chef::Log.warn("This recipe uses search. Chef Solo does not support search unless you install the chef-solo-search cookbook.")
|
||||
else
|
||||
search(node['sudo_rules']['data_bag'], "hosts:#{search_node}").each do |rule|
|
||||
# Name
|
||||
if rule["name"].kind_of?(String)
|
||||
rule_name = rule["name"]
|
||||
else
|
||||
rule_name = rule["id"]
|
||||
end
|
||||
|
||||
# Action Create/Remove
|
||||
if rule["action"].kind_of?(String)
|
||||
if rule["action"] == "create" or rule["action"] == "remove"
|
||||
rule_action = rule["action"]
|
||||
else
|
||||
rule_action = "create"
|
||||
end
|
||||
else
|
||||
rule_action = "create"
|
||||
end
|
||||
|
||||
# Username or Group
|
||||
if rule['user'].kind_of?(String)
|
||||
rule_user = rule['user']
|
||||
else
|
||||
Chef::Log.warn("data_bag #{rule['id']} has no user entry and is required. Skipped.")
|
||||
next
|
||||
end
|
||||
|
||||
# Pasword or NoPassword
|
||||
if rule['nopasswd'].kind_of?(TrueClass)
|
||||
rule_nopasswd = rule['nopasswd']
|
||||
else
|
||||
rule_nopasswd = false
|
||||
end
|
||||
|
||||
# RunAS
|
||||
if rule['runas'].kind_of?(String)
|
||||
rule_runas = rule['runas']
|
||||
else
|
||||
rule_runas = 'ALL'
|
||||
end
|
||||
|
||||
# Commands
|
||||
if rule['commands'].kind_of?(Array)
|
||||
rule_commands = rule['commands']
|
||||
elsif rule['rules'].kind_of?(String)
|
||||
rule_commands = [ rule['commands'] ]
|
||||
else
|
||||
Chef::Log.warn("data_bag #{rule['id']} has no commands is required. Skipped.")
|
||||
next
|
||||
end
|
||||
|
||||
# Defaults
|
||||
if rule['defaults'].kind_of?(Array)
|
||||
rule_defaults = rule['defaults']
|
||||
elsif rule['defaults'].kind_of?(String)
|
||||
rule_defaults = [ rule['defaults'] ]
|
||||
else
|
||||
rule_defaults = []
|
||||
end
|
||||
|
||||
sudo rule["id"] do
|
||||
name rule_name
|
||||
user rule_user
|
||||
runas rule_runas
|
||||
nopasswd rule_nopasswd
|
||||
commands rule_commands
|
||||
defaults rule_defaults
|
||||
end
|
||||
|
||||
#puts "ID: #{rule["id"]}"
|
||||
#puts "Name: #{rule_name}"
|
||||
#puts "Action: #{rule_action}"
|
||||
#puts "User: #{rule_user}"
|
||||
#puts "Runas: #{rule_runas}"
|
||||
#puts "Nopasswd #{rule_nopasswd}"
|
||||
#puts "Commands: #{rule_commands}"
|
||||
#puts "Defaults: #{rule_defaults}"
|
||||
#puts "--"
|
||||
end
|
||||
end
|
||||
|
Loading…
Reference in a new issue