puppet 0.9.2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- data/CHANGELOG +0 -0
- data/COPYING +340 -0
- data/LICENSE +17 -0
- data/README +24 -0
- data/Rakefile +294 -0
- data/TODO +4 -0
- data/bin/cf2puppet +186 -0
- data/bin/puppet +176 -0
- data/bin/puppetca +213 -0
- data/bin/puppetd +246 -0
- data/bin/puppetdoc +184 -0
- data/bin/puppetmasterd +258 -0
- data/examples/code/allatonce +13 -0
- data/examples/code/assignments +11 -0
- data/examples/code/classing +35 -0
- data/examples/code/components +73 -0
- data/examples/code/execs +16 -0
- data/examples/code/failers/badclassnoparam +10 -0
- data/examples/code/failers/badclassparam +10 -0
- data/examples/code/failers/badcompnoparam +9 -0
- data/examples/code/failers/badcompparam +9 -0
- data/examples/code/failers/badtypeparam +3 -0
- data/examples/code/file.bl +11 -0
- data/examples/code/filedefaults +10 -0
- data/examples/code/fileparsing +116 -0
- data/examples/code/filerecursion +15 -0
- data/examples/code/functions +3 -0
- data/examples/code/groups +7 -0
- data/examples/code/head +30 -0
- data/examples/code/importing +8 -0
- data/examples/code/nodes +20 -0
- data/examples/code/one +8 -0
- data/examples/code/relationships +34 -0
- data/examples/code/selectors +28 -0
- data/examples/code/simpletests +11 -0
- data/examples/code/snippets/argumentdefaults +14 -0
- data/examples/code/snippets/casestatement +39 -0
- data/examples/code/snippets/classheirarchy.pp +15 -0
- data/examples/code/snippets/classincludes.pp +17 -0
- data/examples/code/snippets/classpathtest +11 -0
- data/examples/code/snippets/dirchmod +19 -0
- data/examples/code/snippets/failmissingexecpath.pp +13 -0
- data/examples/code/snippets/falsevalues.pp +3 -0
- data/examples/code/snippets/filecreate +11 -0
- data/examples/code/snippets/implicititeration +15 -0
- data/examples/code/snippets/multipleinstances +7 -0
- data/examples/code/snippets/namevartest +9 -0
- data/examples/code/snippets/scopetest +13 -0
- data/examples/code/snippets/selectorvalues.pp +22 -0
- data/examples/code/snippets/simpledefaults +5 -0
- data/examples/code/snippets/simpleselector +38 -0
- data/examples/code/svncommit +13 -0
- data/examples/root/bin/sleeper +69 -0
- data/examples/root/etc/configfile +0 -0
- data/examples/root/etc/debian-passwd +29 -0
- data/examples/root/etc/debian-syslog.conf +71 -0
- data/examples/root/etc/init.d/sleeper +65 -0
- data/examples/root/etc/otherfile +0 -0
- data/examples/root/etc/puppet/fileserver.conf +3 -0
- data/examples/root/etc/puppet/puppetmasterd.conf +10 -0
- data/ext/module:puppet +195 -0
- data/install.rb +270 -0
- data/lib/puppet.rb +249 -0
- data/lib/puppet/base64.rb +19 -0
- data/lib/puppet/client.rb +519 -0
- data/lib/puppet/config.rb +49 -0
- data/lib/puppet/daemon.rb +208 -0
- data/lib/puppet/element.rb +71 -0
- data/lib/puppet/event.rb +259 -0
- data/lib/puppet/log.rb +321 -0
- data/lib/puppet/metric.rb +250 -0
- data/lib/puppet/parsedfile.rb +38 -0
- data/lib/puppet/parser/ast.rb +1560 -0
- data/lib/puppet/parser/interpreter.rb +150 -0
- data/lib/puppet/parser/lexer.rb +226 -0
- data/lib/puppet/parser/parser.rb +1354 -0
- data/lib/puppet/parser/scope.rb +755 -0
- data/lib/puppet/server.rb +170 -0
- data/lib/puppet/server/authstore.rb +227 -0
- data/lib/puppet/server/ca.rb +140 -0
- data/lib/puppet/server/filebucket.rb +147 -0
- data/lib/puppet/server/fileserver.rb +477 -0
- data/lib/puppet/server/logger.rb +43 -0
- data/lib/puppet/server/master.rb +103 -0
- data/lib/puppet/server/servlet.rb +247 -0
- data/lib/puppet/sslcertificates.rb +737 -0
- data/lib/puppet/statechange.rb +150 -0
- data/lib/puppet/storage.rb +95 -0
- data/lib/puppet/transaction.rb +179 -0
- data/lib/puppet/transportable.rb +151 -0
- data/lib/puppet/type.rb +1354 -0
- data/lib/puppet/type/component.rb +141 -0
- data/lib/puppet/type/cron.rb +543 -0
- data/lib/puppet/type/exec.rb +316 -0
- data/lib/puppet/type/group.rb +152 -0
- data/lib/puppet/type/nameservice.rb +3 -0
- data/lib/puppet/type/nameservice/netinfo.rb +173 -0
- data/lib/puppet/type/nameservice/objectadd.rb +146 -0
- data/lib/puppet/type/nameservice/posix.rb +200 -0
- data/lib/puppet/type/package.rb +420 -0
- data/lib/puppet/type/package/apt.rb +70 -0
- data/lib/puppet/type/package/dpkg.rb +108 -0
- data/lib/puppet/type/package/rpm.rb +81 -0
- data/lib/puppet/type/package/sun.rb +117 -0
- data/lib/puppet/type/package/yum.rb +58 -0
- data/lib/puppet/type/pfile.rb +569 -0
- data/lib/puppet/type/pfile/checksum.rb +219 -0
- data/lib/puppet/type/pfile/create.rb +108 -0
- data/lib/puppet/type/pfile/group.rb +129 -0
- data/lib/puppet/type/pfile/mode.rb +131 -0
- data/lib/puppet/type/pfile/source.rb +264 -0
- data/lib/puppet/type/pfile/type.rb +31 -0
- data/lib/puppet/type/pfile/uid.rb +166 -0
- data/lib/puppet/type/pfilebucket.rb +80 -0
- data/lib/puppet/type/pprocess.rb +97 -0
- data/lib/puppet/type/service.rb +347 -0
- data/lib/puppet/type/service/base.rb +17 -0
- data/lib/puppet/type/service/debian.rb +50 -0
- data/lib/puppet/type/service/init.rb +145 -0
- data/lib/puppet/type/service/smf.rb +29 -0
- data/lib/puppet/type/state.rb +182 -0
- data/lib/puppet/type/symlink.rb +183 -0
- data/lib/puppet/type/tidy.rb +183 -0
- data/lib/puppet/type/typegen.rb +149 -0
- data/lib/puppet/type/typegen/filerecord.rb +243 -0
- data/lib/puppet/type/typegen/filetype.rb +316 -0
- data/lib/puppet/type/user.rb +290 -0
- data/lib/puppet/util.rb +138 -0
- data/test/certmgr/certmgr.rb +265 -0
- data/test/client/client.rb +203 -0
- data/test/executables/puppetbin.rb +53 -0
- data/test/executables/puppetca.rb +79 -0
- data/test/executables/puppetd.rb +71 -0
- data/test/executables/puppetmasterd.rb +153 -0
- data/test/executables/puppetmodule.rb +60 -0
- data/test/language/ast.rb +412 -0
- data/test/language/interpreter.rb +71 -0
- data/test/language/scope.rb +412 -0
- data/test/language/snippets.rb +445 -0
- data/test/other/events.rb +111 -0
- data/test/other/log.rb +195 -0
- data/test/other/metrics.rb +92 -0
- data/test/other/overrides.rb +115 -0
- data/test/other/parsedfile.rb +31 -0
- data/test/other/relationships.rb +113 -0
- data/test/other/state.rb +106 -0
- data/test/other/storage.rb +39 -0
- data/test/other/transactions.rb +235 -0
- data/test/parser/lexer.rb +120 -0
- data/test/parser/parser.rb +180 -0
- data/test/puppet/conffiles.rb +104 -0
- data/test/puppet/defaults.rb +100 -0
- data/test/puppet/error.rb +23 -0
- data/test/puppet/utiltest.rb +120 -0
- data/test/puppettest.rb +774 -0
- data/test/server/authstore.rb +209 -0
- data/test/server/bucket.rb +227 -0
- data/test/server/ca.rb +201 -0
- data/test/server/fileserver.rb +710 -0
- data/test/server/logger.rb +175 -0
- data/test/server/master.rb +150 -0
- data/test/server/server.rb +130 -0
- data/test/tagging/tagging.rb +80 -0
- data/test/test +51 -0
- data/test/types/basic.rb +119 -0
- data/test/types/component.rb +272 -0
- data/test/types/cron.rb +261 -0
- data/test/types/exec.rb +273 -0
- data/test/types/file.rb +616 -0
- data/test/types/filebucket.rb +167 -0
- data/test/types/fileignoresource.rb +287 -0
- data/test/types/filesources.rb +587 -0
- data/test/types/filetype.rb +162 -0
- data/test/types/group.rb +271 -0
- data/test/types/package.rb +205 -0
- data/test/types/query.rb +101 -0
- data/test/types/service.rb +100 -0
- data/test/types/symlink.rb +93 -0
- data/test/types/tidy.rb +124 -0
- data/test/types/type.rb +135 -0
- data/test/types/user.rb +371 -0
- metadata +243 -0
@@ -0,0 +1,173 @@
|
|
1
|
+
# Manage NetInfo POSIX objects. Probably only used on OS X, but I suppose
|
2
|
+
# it could be used elsewhere.
|
3
|
+
|
4
|
+
require 'puppet'
|
5
|
+
require 'puppet/type/nameservice/posix'
|
6
|
+
|
7
|
+
module Puppet
|
8
|
+
class Type
|
9
|
+
# Return the NetInfo directory in which a given object type is stored.
|
10
|
+
# Defaults to the type's name if @netinfodir is unset.
|
11
|
+
end
|
12
|
+
|
13
|
+
module NameService
|
14
|
+
module NetInfo
|
15
|
+
def self.test
|
16
|
+
system("which niutil > /dev/null 2>&1")
|
17
|
+
|
18
|
+
if $? == 0
|
19
|
+
return true
|
20
|
+
else
|
21
|
+
Puppet.err "Could not find niutil"
|
22
|
+
return false
|
23
|
+
end
|
24
|
+
|
25
|
+
system("which nireport > /dev/null 2>&1")
|
26
|
+
|
27
|
+
if $? == 0
|
28
|
+
return true
|
29
|
+
else
|
30
|
+
Puppet.err "Could not find nireport"
|
31
|
+
return false
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.exists?(obj)
|
36
|
+
cmd = "nidump -r /%s/%s /" %
|
37
|
+
[obj.class.netinfodir, obj.name]
|
38
|
+
|
39
|
+
output = %x{#{cmd} 2>/dev/null}
|
40
|
+
if output == ""
|
41
|
+
return false
|
42
|
+
else
|
43
|
+
#Puppet.debug "%s exists: %s" % [obj.name, output]
|
44
|
+
return true
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.flush
|
49
|
+
output = %x{lookupd -flushcache 2>&1}
|
50
|
+
|
51
|
+
if $? != 0
|
52
|
+
Puppet.err "Could not flush lookupd cache: %s" % output
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
class NetInfoState < POSIX::POSIXState
|
57
|
+
def self.allatonce?
|
58
|
+
false
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.netinfokey
|
62
|
+
if defined? @netinfokey and @netinfokey
|
63
|
+
return @netinfokey
|
64
|
+
else
|
65
|
+
return self.name
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def retrieve
|
70
|
+
NetInfo.flush
|
71
|
+
dir = @parent.class.netinfodir
|
72
|
+
cmd = ["nireport", "/", "/%s" % dir, "name"]
|
73
|
+
|
74
|
+
if key = self.class.netinfokey
|
75
|
+
cmd << key.to_s
|
76
|
+
else
|
77
|
+
raise Puppet::DevError,
|
78
|
+
"Could not find netinfokey for state %s" %
|
79
|
+
self.class.name
|
80
|
+
end
|
81
|
+
self.debug "Executing %s" % cmd.join(" ").inspect
|
82
|
+
|
83
|
+
output = %x{#{cmd.join(" ")} 2>&1}.split("\n").each { |line|
|
84
|
+
if line =~ /^(\w+)\s+(.+)$/
|
85
|
+
name = $1
|
86
|
+
value = $2.sub(/\s+$/, '')
|
87
|
+
|
88
|
+
if name == @parent.name
|
89
|
+
if value =~ /^[-0-9]+$/
|
90
|
+
@is = Integer(value)
|
91
|
+
else
|
92
|
+
@is = value
|
93
|
+
end
|
94
|
+
end
|
95
|
+
else
|
96
|
+
raise Puppet::DevError, "Could not match %s" % line
|
97
|
+
end
|
98
|
+
}
|
99
|
+
|
100
|
+
unless defined? @is
|
101
|
+
@is = :notfound
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
def addcmd
|
106
|
+
creatorcmd("-create")
|
107
|
+
end
|
108
|
+
|
109
|
+
def creatorcmd(arg)
|
110
|
+
cmd = ["niutil"]
|
111
|
+
cmd << arg
|
112
|
+
|
113
|
+
cmd << "/" << "/%s/%s" %
|
114
|
+
[@parent.class.netinfodir, @parent.name]
|
115
|
+
|
116
|
+
#if arg == "-create"
|
117
|
+
# return [cmd.join(" "), self.modifycmd].join(";")
|
118
|
+
#else
|
119
|
+
return cmd.join(" ")
|
120
|
+
#end
|
121
|
+
end
|
122
|
+
|
123
|
+
def deletecmd
|
124
|
+
creatorcmd("-destroy")
|
125
|
+
end
|
126
|
+
|
127
|
+
def modifycmd
|
128
|
+
cmd = ["niutil"]
|
129
|
+
|
130
|
+
cmd << "-createprop" << "/" << "/%s/%s" %
|
131
|
+
[@parent.class.netinfodir, @parent.name]
|
132
|
+
|
133
|
+
if key = self.class.netinfokey
|
134
|
+
cmd << key << "'%s'" % self.should
|
135
|
+
else
|
136
|
+
raise Puppet::DevError,
|
137
|
+
"Could not find netinfokey for state %s" %
|
138
|
+
self.class.name
|
139
|
+
end
|
140
|
+
cmd.join(" ")
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
class GroupGID < NetInfoState
|
145
|
+
end
|
146
|
+
|
147
|
+
class UserUID < NetInfoState
|
148
|
+
end
|
149
|
+
|
150
|
+
class UserGID < NetInfoState
|
151
|
+
end
|
152
|
+
|
153
|
+
class UserComment < NetInfoState
|
154
|
+
@netinfokey = "realname"
|
155
|
+
end
|
156
|
+
|
157
|
+
class UserHome < NetInfoState
|
158
|
+
end
|
159
|
+
|
160
|
+
class UserShell < NetInfoState
|
161
|
+
end
|
162
|
+
|
163
|
+
class UserLocked < NetInfoState
|
164
|
+
end
|
165
|
+
|
166
|
+
class UserExpire < NetInfoState
|
167
|
+
end
|
168
|
+
|
169
|
+
class UserInactive < NetInfoState
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
@@ -0,0 +1,146 @@
|
|
1
|
+
require 'puppet'
|
2
|
+
|
3
|
+
module Puppet
|
4
|
+
class State
|
5
|
+
def self.objectaddflag
|
6
|
+
if defined? @objectaddflag and @objectaddflag
|
7
|
+
return @objectaddflag
|
8
|
+
else
|
9
|
+
return @name
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
module NameService
|
15
|
+
module ObjectAdd
|
16
|
+
# Verify that we've got the commands necessary to manage flat files.
|
17
|
+
def self.test
|
18
|
+
system("which groupadd > /dev/null 2>&1")
|
19
|
+
|
20
|
+
if $? == 0
|
21
|
+
return true
|
22
|
+
else
|
23
|
+
Puppet.err "Could not find groupadd"
|
24
|
+
return false
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.exists?(obj)
|
29
|
+
if obj.getinfo
|
30
|
+
return true
|
31
|
+
else
|
32
|
+
return false
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
class ObjectAddGroup < POSIX::POSIXState
|
37
|
+
def self.allatonce?
|
38
|
+
true
|
39
|
+
end
|
40
|
+
|
41
|
+
def addcmd
|
42
|
+
cmd = ["groupadd"]
|
43
|
+
if gid = @parent.should(:gid)
|
44
|
+
unless gid == :auto
|
45
|
+
cmd << "-g" << gid
|
46
|
+
end
|
47
|
+
end
|
48
|
+
cmd << @parent.name
|
49
|
+
|
50
|
+
return cmd.join(" ")
|
51
|
+
end
|
52
|
+
|
53
|
+
def deletecmd
|
54
|
+
"groupdel %s" % @parent.name
|
55
|
+
end
|
56
|
+
|
57
|
+
def modifycmd
|
58
|
+
[
|
59
|
+
"groupmod",
|
60
|
+
self.class.objectaddflag,
|
61
|
+
"'%s'" % self.should,
|
62
|
+
@parent.name
|
63
|
+
].join(" ")
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
class GroupGID < ObjectAddGroup
|
68
|
+
@objectaddflag = "-g"
|
69
|
+
@autogen = true
|
70
|
+
end
|
71
|
+
|
72
|
+
class ObjectAddUser < POSIX::POSIXState
|
73
|
+
def self.allatonce?
|
74
|
+
true
|
75
|
+
end
|
76
|
+
|
77
|
+
def addcmd
|
78
|
+
cmd = ["useradd"]
|
79
|
+
@parent.eachstate { |state|
|
80
|
+
# the value needs to be quoted, mostly because -c might
|
81
|
+
# have spaces in it
|
82
|
+
cmd << state.class.objectaddflag << "'%s'" % state.should
|
83
|
+
}
|
84
|
+
# stupid fedora
|
85
|
+
case Facter["distro"].value
|
86
|
+
when "Fedora", "RedHat":
|
87
|
+
cmd << "-M"
|
88
|
+
else
|
89
|
+
end
|
90
|
+
cmd << @parent.name
|
91
|
+
|
92
|
+
cmd.join(" ")
|
93
|
+
end
|
94
|
+
|
95
|
+
def deletecmd
|
96
|
+
["userdel", @parent.name].join(" ")
|
97
|
+
end
|
98
|
+
|
99
|
+
def modifycmd
|
100
|
+
cmd = [
|
101
|
+
"usermod",
|
102
|
+
self.class.objectaddflag,
|
103
|
+
"'%s'" % self.should,
|
104
|
+
@parent.name
|
105
|
+
].join(" ")
|
106
|
+
end
|
107
|
+
end
|
108
|
+
class UserUID < ObjectAddUser
|
109
|
+
@objectaddflag = "-u"
|
110
|
+
@autogen = true
|
111
|
+
end
|
112
|
+
|
113
|
+
class UserGID < ObjectAddUser
|
114
|
+
@objectaddflag = "-g"
|
115
|
+
@autogen = true
|
116
|
+
end
|
117
|
+
|
118
|
+
class UserComment < ObjectAddUser
|
119
|
+
@objectaddflag = "-c"
|
120
|
+
end
|
121
|
+
|
122
|
+
class UserHome < ObjectAddUser
|
123
|
+
@objectaddflag = "-d"
|
124
|
+
@autogen = true
|
125
|
+
end
|
126
|
+
|
127
|
+
class UserShell < ObjectAddUser
|
128
|
+
@objectaddflag = "-s"
|
129
|
+
@autogen = true
|
130
|
+
end
|
131
|
+
|
132
|
+
class UserLocked < ObjectAddUser
|
133
|
+
end
|
134
|
+
|
135
|
+
class UserExpire < ObjectAddUser
|
136
|
+
@objectaddflag = "-e"
|
137
|
+
@autogen = true
|
138
|
+
end
|
139
|
+
|
140
|
+
class UserInactive < ObjectAddUser
|
141
|
+
@objectaddflag = "-f"
|
142
|
+
@autogen = true
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
@@ -0,0 +1,200 @@
|
|
1
|
+
require 'puppet'
|
2
|
+
|
3
|
+
module Puppet
|
4
|
+
class Type
|
5
|
+
def self.posixmethod
|
6
|
+
if defined? @posixmethod and @posixmethod
|
7
|
+
return @posixmethod
|
8
|
+
else
|
9
|
+
return @name
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
module NameService
|
15
|
+
# This is the base module for basically all of the NSS stuff. It
|
16
|
+
# should be able to retrieve the info for almost any system, but
|
17
|
+
# it can't create any information on its own. You need to define
|
18
|
+
# a subclass of these classes to actually modify the system.
|
19
|
+
module POSIX
|
20
|
+
class POSIXState < Puppet::State
|
21
|
+
class << self
|
22
|
+
attr_accessor :extender
|
23
|
+
|
24
|
+
def autogen?
|
25
|
+
if defined? @autogen
|
26
|
+
return @autogen
|
27
|
+
else
|
28
|
+
return false
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def optional?
|
33
|
+
if defined? @optional
|
34
|
+
return @optional
|
35
|
+
else
|
36
|
+
return false
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.doc
|
42
|
+
if defined? @extender
|
43
|
+
@extender.doc
|
44
|
+
else
|
45
|
+
nil
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.complete
|
50
|
+
mod = "Puppet::State::%s" %
|
51
|
+
self.to_s.sub(/.+::/,'')
|
52
|
+
begin
|
53
|
+
modklass = eval(mod)
|
54
|
+
rescue NameError
|
55
|
+
raise Puppet::Error,
|
56
|
+
"Could not find extender module %s for %s" %
|
57
|
+
[mod, self.to_s]
|
58
|
+
end
|
59
|
+
include modklass
|
60
|
+
|
61
|
+
self.extender = modklass
|
62
|
+
end
|
63
|
+
|
64
|
+
def self.posixmethod
|
65
|
+
if defined? @extender
|
66
|
+
if @extender.respond_to?(:posixmethod)
|
67
|
+
return @extender.posixmethod
|
68
|
+
else
|
69
|
+
return @extender.name
|
70
|
+
end
|
71
|
+
else
|
72
|
+
raise Puppet::DevError,
|
73
|
+
"%s could not retrieve posixmethod" % self
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def self.name
|
78
|
+
@extender.name
|
79
|
+
end
|
80
|
+
|
81
|
+
# we use the POSIX interfaces to retrieve all information,
|
82
|
+
# so we don't have to worry about abstracting that across
|
83
|
+
# the system
|
84
|
+
def retrieve
|
85
|
+
if obj = @parent.getinfo(true)
|
86
|
+
|
87
|
+
if method = self.class.posixmethod || self.class.name
|
88
|
+
@is = obj.send(method)
|
89
|
+
else
|
90
|
+
raise Puppet::DevError,
|
91
|
+
"%s has no posixmethod" % self.class
|
92
|
+
end
|
93
|
+
else
|
94
|
+
@is = :notfound
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
def sync
|
99
|
+
event = nil
|
100
|
+
# they're in sync some other way
|
101
|
+
if self.insync?
|
102
|
+
return nil
|
103
|
+
end
|
104
|
+
if @is == :notfound
|
105
|
+
self.retrieve
|
106
|
+
if self.insync?
|
107
|
+
return nil
|
108
|
+
end
|
109
|
+
end
|
110
|
+
# if the object needs to be created or deleted,
|
111
|
+
# depend on another method to do it all at once
|
112
|
+
if @is == :notfound or self.should == :notfound
|
113
|
+
event = syncname()
|
114
|
+
|
115
|
+
return event
|
116
|
+
# if the whole object is created at once, just return
|
117
|
+
# an event saying so
|
118
|
+
#if self.class.allatonce?
|
119
|
+
# return event
|
120
|
+
#end
|
121
|
+
end
|
122
|
+
|
123
|
+
unless @parent.exists?
|
124
|
+
raise Puppet::DevError,
|
125
|
+
"%s %s does not exist; cannot set %s" %
|
126
|
+
[@parent.class.name, @parent.name, self.class.name]
|
127
|
+
end
|
128
|
+
|
129
|
+
# this needs to be set either by the individual state
|
130
|
+
# or its parent class
|
131
|
+
cmd = self.modifycmd
|
132
|
+
|
133
|
+
self.debug "Executing %s" % cmd.inspect
|
134
|
+
|
135
|
+
output = %x{#{cmd} 2>&1}
|
136
|
+
|
137
|
+
|
138
|
+
unless $? == 0
|
139
|
+
raise Puppet::Error, "Could not modify %s on %s %s: %s" %
|
140
|
+
[self.class.name, @parent.class.name,
|
141
|
+
@parent.name, output]
|
142
|
+
end
|
143
|
+
|
144
|
+
if event
|
145
|
+
return event
|
146
|
+
else
|
147
|
+
return "#{@parent.class.name}_modified".intern
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
private
|
152
|
+
def syncname
|
153
|
+
cmd = nil
|
154
|
+
event = nil
|
155
|
+
if self.should == :notfound
|
156
|
+
# we need to remove the object...
|
157
|
+
unless @parent.exists?
|
158
|
+
# the group already doesn't exist
|
159
|
+
return nil
|
160
|
+
end
|
161
|
+
|
162
|
+
# again, needs to be set by the ind. state or its
|
163
|
+
# parent
|
164
|
+
cmd = self.deletecmd
|
165
|
+
type = "delete"
|
166
|
+
else
|
167
|
+
if @parent.exists?
|
168
|
+
return nil
|
169
|
+
end
|
170
|
+
|
171
|
+
# blah blah, define elsewhere, blah blah
|
172
|
+
cmd = self.addcmd
|
173
|
+
type = "create"
|
174
|
+
end
|
175
|
+
self.debug "Executing %s" % cmd.inspect
|
176
|
+
|
177
|
+
output = %x{#{cmd} 2>&1}
|
178
|
+
|
179
|
+
unless $? == 0
|
180
|
+
raise Puppet::Error, "Could not %s %s %s: %s" %
|
181
|
+
[type, @parent.class.name, @parent.name, output]
|
182
|
+
end
|
183
|
+
|
184
|
+
# we want object creation to show up as one event,
|
185
|
+
# not many
|
186
|
+
unless self.class.allatonce?
|
187
|
+
if type == "create"
|
188
|
+
@parent.eachstate { |state|
|
189
|
+
state.sync
|
190
|
+
state.retrieve
|
191
|
+
}
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
return "#{@parent.class.name}_#{type}d".intern
|
196
|
+
end
|
197
|
+
end
|
198
|
+
end
|
199
|
+
end
|
200
|
+
end
|