85593a24d2344eb3ed4856ca1e07ea33c632ad20
[puppet_sudo.git] / lib / puppet / type / sudoers.rb
1 Puppet::Type.newtype(:sudoers) do
2   @doc = "Manage the contents of /etc/sudoers
3
4 Author:: Dan Bode (dan@reductivelabs.com)
5 Copyright:: BLAH!!
6 License:: GPL3
7
8 = Summary
9
10 The sudoers type supports managing individual lines from the sudoers file.
11
12 = Record Types
13
14 There are 3 types of records that are supported:
15
16 == Aliases:
17  
18 Manages an alias line of a sudoers file.
19
20 Example:
21  
22 sudoers{'ALIAS_NAME':
23   ensure => present,
24   sudo_alias => 'Cmnd',
25   items => ['/bin/true', '/usr/bin/su - bob'],
26 }
27
28 creates the following line:
29
30 Cmnd_Alias ALIAS_NAME=/bin/true,/usr/bin/su - bob
31
32 == User Specification
33
34 sudoers line that specifies how users can run commands.
35
36 This there is no way to clearly determine uniqueness, a comment line is added above user spec lines that contains the namevar.
37
38 Example:
39
40 sudoers{'NAME':
41   ensure => present,
42   users => ['dan1', 'dan2'],
43   hosts => 'ALL',
44   commands => [
45     '(root) /usr/bin/su - easapp',
46     '(easapp)/usr/local/eas-ts/bin/appctl',
47   ],
48 }
49
50 creates the following line:  
51
52 #Puppet NAMEVAR NAME
53 dan1,dan2 ALL=(root) /usr/bin/su - easapp,(easapp)/usr/local/eas-ts/bin/appctl
54
55 Defaults:
56
57 the default name is used to determine uniqueness.
58
59 sudoers{'Defaults@host':
60   parameters => ['x=y', 'one=1', 'two=2'],
61 }
62
63 Defaults@host x=y,one=1,two=2
64
65 == Notes:
66
67 - parsing of multi-line sudoers records is not currently supported.
68 - ordering only applies when records are created.
69
70             "
71   # support absent and present (also purge -> true)
72   ensurable
73
74   newparam(:name) do
75     desc "Either the name of the alias, default, or arbitrary unique string for user specifications"
76     isnamevar
77   end
78
79   newproperty(:sudo_alias) do
80     desc "Type of alias. Options are Cmnd, Host, User, and Runas"
81     newvalue(/^(Cmnd|Host|User|Runas)(_Alias)?$/)
82     # add _Alias if it was ommitted
83     munge do |value|
84       if(value =~ /^(Cmnd|Host|User|Runas)$/) 
85         value << '_Alias'
86       end
87       value
88     end
89     # this is now an alias type
90   end
91
92   newproperty(:items, :array_matching => :all) do
93     desc "list of items applied to an alias"
94   end
95
96   newproperty(:target) do
97     desc "Location of the shells file"
98
99     defaultto do
100       if
101         @resource.class.defaultprovider.ancestors.include?(Puppet::Provider::ParsedFile)
102         @resource.class.defaultprovider.default_target
103       else
104         nil
105       end
106     end
107   end
108
109 # single user is namevar
110   newproperty(:users, :array_matching => :all) do
111     desc "list of users for user spec"
112   end
113
114   newproperty(:hosts, :array_matching => :all) do
115     desc "list of hosts for user spec"
116   end
117
118   newproperty(:commands, :array_matching => :all) do
119     desc "commands to run"
120   end
121
122   newproperty(:parameters, :array_matching => :all) do
123     desc "default parameters"
124   end
125
126 end
127