Release Notes

Version 165 (Michael Stahnke, 01/25/2012 05:08 pm)

1 1
# Release Notes
2 1
3 114 Nick Fagerlund
(See also: [[Release Notes Scratchpad]])
4 114 Nick Fagerlund
5 1
The Release Notes document is a feature roadmap to the various
6 1
Puppet versions. It details changes to features, functions,
7 1
language, configuration and types during the course of Puppet's
8 1
development. It highlights incompatibilities and specifies when new
9 1
features were introduced and the extent to which they are
10 1
backwards-compatible.
11 1
12 1
Also available is the
13 4 James Turnbull
[Roadmap Tracker](http://projects.puppetlabs.com/projects/puppet/roadmap?tracker_ids%5B%5D=1&tracker_ids%5B%5D=2&tracker_ids%5B%5D=4&completed=1&with_subprojects=0&with_subprojects=0)
14 1
which lists tickets closed for each release. Just click on the
15 1
relevant release from the list on the right hand side.
16 1
17 1
If upgrading you should review this document upward from the
18 1
version you are upgrading from. Please remember that if upgrading
19 1
through multiple versions some behaviour may change more than
20 1
once.
21 1
22 1
It is also important to note when upgrading that not all versions
23 88 James Turnbull
are backwards compatible. Newer agents may not work with older
24 88 James Turnbull
masters and vice-versa. Where possible backwards-compatibility is
25 151 Nick Fagerlund
maintained but it's not always totally successful. We strongly recommend
26 88 James Turnbull
ensuring your master and agents are the same version.
27 87 James Turnbull
28 87 James Turnbull
When upgrading it is also strongly recommended that you upgrade your master
29 151 Nick Fagerlund
first and then your agents. Earlier agents usually work with later masters but later
30 151 Nick Fagerlund
agents frequently have issues with earlier master versions. For example 0.24.8
31 151 Nick Fagerlund
agents will work with 2.6.6 masters but 2.6.6 agents may have unpredictable
32 1
results with a 0.24.8 master.
33 147 Michael Stahnke
34 165 Michael Stahnke
- [2.7.10](#2.7.10)
35 154 Matthaus Litteken
- [2.7.9](#2.7.9)
36 152 Nick Fagerlund
- [2.7.8](#2.7.8)
37 151 Nick Fagerlund
- 2.7.7 died in the Thunderdome
38 137 Michael Stahnke
- [2.7.6](#2.7.6)
39 133 Michael Stahnke
- [2.7.5](#2.7.5)
40 131 Michael Stahnke
- [2.7.4](#2.7.4)
41 121 Michael Stahnke
- [2.7.3](#2.7.3)
42 143 Nick Fagerlund
- 2.7.2 died in the Thunderdome and was never released.
43 108 Michael Stahnke
- [2.7.1](#2.7.1)
44 106 Michael Stahnke
- [2.7.0 (Statler)](#2.7.0)
45 157 Matthaus Litteken
- [2.6.13](#2.6.13)
46 140 Nick Fagerlund
- [2.6.12](#2.6.12)
47 140 Nick Fagerlund
- [2.6.11](#2.6.11)
48 130 Michael Stahnke
- [2.6.10](#2.6.10)
49 107 Michael Stahnke
- [2.6.9](#2.6.9)
50 95 Jacob Helwig
- [2.6.8](#2.6.8)
51 86 James Turnbull
- [2.6.7](#2.6.7)
52 81 Jacob Helwig
- [2.6.6](#2.6.6)
53 67 James Turnbull
- [2.6.5](#2.6.5)
54 66 Nick Fagerlund
- [2.6.4](#2.6.4)
55 65 Nick Fagerlund
- [2.6.3](#2.6.3)
56 65 Nick Fagerlund
- [2.6.2](#2.6.2)
57 65 Nick Fagerlund
- [2.6.1](#2.6.1)
58 65 Nick Fagerlund
- [2.6.0](#2.6.0)
59 65 Nick Fagerlund
- [0.25.5](#0.25.5)
60 65 Nick Fagerlund
- [0.25.4](#0.25.4)
61 65 Nick Fagerlund
- [0.25.3](#0.25.3)
62 65 Nick Fagerlund
- [0.25.2](#0.25.2)
63 65 Nick Fagerlund
- [0.25.1](#0.25.1)
64 65 Nick Fagerlund
- [0.25.0](#0.25.0)
65 65 Nick Fagerlund
- [0.24.9](#0.24.9)
66 65 Nick Fagerlund
- [0.24.8](#0.24.8)
67 65 Nick Fagerlund
- [0.24.7](#0.24.7)
68 65 Nick Fagerlund
- [0.24.6](#0.24.6)
69 65 Nick Fagerlund
- [0.24.5](#0.24.5)
70 65 Nick Fagerlund
- [0.24.4](#0.24.4)
71 65 Nick Fagerlund
- [0.24.3](#0.24.3)
72 65 Nick Fagerlund
- [0.24.2](#0.24.2)
73 65 Nick Fagerlund
- [0.24.1](#0.24.1)
74 65 Nick Fagerlund
- [0.24.0 (misspiggy)](#0.24.0+\(misspiggy\))
75 65 Nick Fagerlund
- [0.23.2](#0.23.2)
76 65 Nick Fagerlund
- [0.23.1 (beaker)](#0.23.1+\(beaker\))
77 65 Nick Fagerlund
- [0.23.0](#0.23.0)
78 65 Nick Fagerlund
- [0.22.3](#0.22.3)
79 1
- [0.22.2 (grover)](#0.22.2+\(grover\))
80 1
- [0.22.1 (kermit)](#0.22.1+\(kermit\))
81 1
- [0.22.0](#0.22.0)
82 146 Michael Stahnke
- [0.20.0](#0.20.0)
83 1
84 165 Michael Stahnke
#2.7.10
85 165 Michael Stahnke
86 165 Michael Stahnke
## Community MVP for this release: Brice Figureau (@masterzen) for the
87 165 Michael Stahnke
Instrumentation Framework
88 158 Michael Stahnke
89 158 Michael Stahnke
## Highlights ##
90 163 Michael Stahnke
We have several section of release notes this month due to the high volume of commits.  Sections are Instrumentation, Core, Mac OS, Windows, and FreeBSD.
91 163 Michael Stahnke
92 163 Michael Stahnke
93 158 Michael Stahnke
* Instrumentation Features available
94 158 Michael Stahnke
* Symbolic File modes supports ( e.g. u=rw,go=r) for File type
95 158 Michael Stahnke
* Write reports to a temporary file and move them into place
96 158 Michael Stahnke
* Add password get/set behavior for Mac OS X 10.7
97 163 Michael Stahnke
* Add support for user expiriy in pw user provider
98 163 Michael Stahnke
* Improve pw group provider on FreeBSD
99 163 Michael Stahnke
* Make sure managehome is respected on FreeBSD
100 163 Michael Stahnke
* Add password management on FreeBSD
101 158 Michael Stahnke
102 158 Michael Stahnke
## Bug Fixes ##
103 162 Michael Stahnke
* Make the Debian service provider handle services that don't conform to the debian policy manual.
104 158 Michael Stahnke
* Only load facts once per run
105 158 Michael Stahnke
* Puppetd removes pid file upon exit
106 158 Michael Stahnke
* Fix MySQL deadlock possibility within inventory service
107 158 Michael Stahnke
* Test Augeas versions correctly with versioncmp
108 158 Michael Stahnke
* Consider package epoch version when comparing yum package versions
109 158 Michael Stahnke
* Link should autorequire target
110 158 Michael Stahnke
* Use SMF's svcadm -s option to wait for errors
111 158 Michael Stahnke
* Fix fact and plugin sync on Windows
112 158 Michael Stahnke
* Set password before creating user on Windows
113 158 Michael Stahnke
* Always serve files in binary mode on Windows
114 158 Michael Stahnke
* Don't hard code ruby install paths in Windows batch files 
115 158 Michael Stahnke
* Don't copy owner and group when sourcing files from master on Windows
116 158 Michael Stahnke
* Fix OS X supplementary group handling
117 1
* Use launchctl load -w in launchd provider (Mac OS)
118 162 Michael Stahnke
* Improve error msg for missing pip command
119 162 Michael Stahnke
* Better validation for IPv4 and IPv6 address in host type.
120 158 Michael Stahnke
121 158 Michael Stahnke
### Instrumentation
122 164 Michael Stahnke
Contributed by:  Brice Figureau <brice-puppet@daysofwonder.com>
123 158 Michael Stahnke
124 158 Michael Stahnke
The Puppet Instrumentation Framework is a tool to install into a puppet
125 158 Michael Stahnke
executable:
126 158 Michael Stahnke
127 158 Michael Stahnke
* instrumentation listeners
128 158 Michael Stahnke
* code probes
129 158 Michael Stahnke
130 158 Michael Stahnke
Code probes are static commands we add to the Puppet codebase to
131 158 Michael Stahnke
instrument some specific parts of the code. Currently only the
132 158 Michael Stahnke
Indirector is covered (but since it is the central piece of Puppet, it
133 158 Michael Stahnke
should cover a lot of possible use).
134 158 Michael Stahnke
135 158 Michael Stahnke
Each time the program reaches a code probe (and instrumentation is
136 158 Michael Stahnke
enabled), the Instrumentation Framework sends an event to the registered
137 158 Michael Stahnke
instrumentation listeners. Those can be enabled/disabled/added/removed
138 158 Michael Stahnke
live without restarting the executable.
139 158 Michael Stahnke
Those listeners responsibility is to produce something useful to the
140 158 Michael Stahnke
user. The patch shipped with 3 example listeners, one that logs
141 158 Michael Stahnke
execution time of every probe, another that aggregate some performance
142 158 Michael Stahnke
data about probes, and the final one decorates the executable process
143 158 Michael Stahnke
name (as seen in top) with the latest probes it encounters.
144 158 Michael Stahnke
145 158 Michael Stahnke
The Framework also includes a set of REST API and REST Faces to allow it
146 158 Michael Stahnke
to enable/disable listeners or probes or to get access to listener
147 158 Michael Stahnke
performance data if they produce some.
148 158 Michael Stahnke
149 158 Michael Stahnke
How to use the Instrumentation Framework:
150 158 Michael Stahnke
151 158 Michael Stahnke
You need a live running Puppet executable (preferably a puppet master
152 158 Michael Stahnke
which by default listens to REST requests). It might also be necessary
153 158 Michael Stahnke
to modify the auth.conf to allow the instrumentation requests.
154 158 Michael Stahnke
155 158 Michael Stahnke
Display the list of known instrumentation listeners
156 158 Michael Stahnke
    puppet instrumentation_listener search x --terminus rest
157 158 Michael Stahnke
158 158 Michael Stahnke
Enable the "performance" instrumentation listener
159 158 Michael Stahnke
    puppet instrumentation_listener enable performance --terminus rest
160 158 Michael Stahnke
161 158 Michael Stahnke
Know more about the "performance" listener (is it enabled for
162 158 Michael Stahnke
instance):
163 158 Michael Stahnke
    puppet instrumentation_listener find performance --terminus rest
164 158 Michael Stahnke
165 158 Michael Stahnke
Of course this will only work if probes are enabled:
166 158 Michael Stahnke
167 158 Michael Stahnke
List all the current executable probes:
168 158 Michael Stahnke
     puppet instrumentation_probe search x --terminus rest
169 158 Michael Stahnke
170 158 Michael Stahnke
Enable the instrumentation probes:
171 158 Michael Stahnke
     puppet instrumentation_probe enable --terminus rest
172 158 Michael Stahnke
 
173 158 Michael Stahnke
How to get access to the data coming from a listener (here the
174 158 Michael Stahnke
"performance" one):
175 158 Michael Stahnke
    puppet instrumentation_data find performance --terminus rest
176 158 Michael Stahnke
177 158 Michael Stahnke
## Core  ##
178 158 Michael Stahnke
179 161 Michael Stahnke
### Improve error msg for missing pip comand
180 161 Michael Stahnke
Author: Kelsey Hightower <kelsey@puppetlabs.com>
181 161 Michael Stahnke
182 161 Michael Stahnke
(#11958) Improve error msg for missing pip command
183 161 Michael Stahnke
    
184 161 Michael Stahnke
Without this patch the pip package provider does not produce a user
185 161 Michael Stahnke
friendly error message when the pip command is not available. The
186 161 Michael Stahnke
current error message looks like this:
187 161 Michael Stahnke
    
188 161 Michael Stahnke
        err: /Stage[main]/Dummy/Package[virtualenv]/ensure: change from
189 161 Michael Stahnke
        absent to present failed: Could not set 'present on ensure:
190 161 Michael Stahnke
        undefined method `pip' for
191 161 Michael Stahnke
        #<Puppet::Type::Package::ProviderPip:0xb6cf6cd0> at
192 161 Michael Stahnke
        /etc/puppet/modules/dummy/manifests/init.pp:5
193 161 Michael Stahnke
    
194 161 Michael Stahnke
This patch improves the error message by passing a string argument, 'Could not locate
195 161 Michael Stahnke
the pip command.', when raising the `NoMethodError`. The new error
196 161 Michael Stahnke
message looks like this:
197 161 Michael Stahnke
    
198 161 Michael Stahnke
        err: /Stage[main]/Dummy/Package[virtualenv]/ensure: change from
199 161 Michael Stahnke
        absent to present failed: Could not set 'present on ensure: Could
200 161 Michael Stahnke
        not locate the pip command. at
201 161 Michael Stahnke
        /etc/puppet/modules/dummy/manifests/init.pp:5
202 161 Michael Stahnke
    
203 161 Michael Stahnke
This patch also includes updated spec tests validating this change. No
204 161 Michael Stahnke
other behavior changes are being introduced.
205 161 Michael Stahnke
206 160 Michael Stahnke
### Better validation for IPv4 and IPv6 address in host type.
207 160 Michael Stahnke
Author: Daniel Pittman <daniel@puppetlabs.com>
208 160 Michael Stahnke
209 160 Michael Stahnke
(#11499) Better validation for IPv4 and IPv6 address in host type.
210 160 Michael Stahnke
    
211 160 Michael Stahnke
The previous code was fairly lax in validation, and would allow a bunch of
212 160 Michael Stahnke
invalid addresses through - as well as rejecting some legal, but uncommon,
213 160 Michael Stahnke
IPv6 address types.
214 160 Michael Stahnke
    
215 160 Michael Stahnke
This adds substantial testing, especially around IPv6 addressing, and replaces
216 160 Michael Stahnke
the older validation with new, fancy stuff that works for all the cases.
217 158 Michael Stahnke
218 158 Michael Stahnke
###  Support symbolic file modes.
219 158 Michael Stahnke
Author: Daniel Pittman <daniel@puppetlabs.com>
220 158 Michael Stahnke
221 158 Michael Stahnke
 (#2927) Support symbolic file modes.
222 158 Michael Stahnke
   
223 158 Michael Stahnke
This adds a new feature, support for symbolic file modes, to Puppet.  In
224 158 Michael Stahnke
addition to being able to specify the octal mode, you can now use the same
225 158 Michael Stahnke
symbolic mode style that chmod supports:
226 158 Michael Stahnke
    
227 158 Michael Stahnke
        file { "/example": mode => "u=rw,go=r" }
228 158 Michael Stahnke
    
229 158 Michael Stahnke
This also supports relative file modes:
230 158 Michael Stahnke
    
231 158 Michael Stahnke
        file { "/relative": mode = "u+w,go-wx" }
232 158 Michael Stahnke
    
233 158 Michael Stahnke
Support is based on the common GNU and BSD symbolic modes of operation; you
234 158 Michael Stahnke
specify a comma separated list of actions to take in each you can sit:
235 158 Michael Stahnke
    
236 158 Michael Stahnke
The user (u), group (g), other (o), or all (a) of the permission map.
237 158 Michael Stahnke
    
238 158 Michael Stahnke
You can modify the ability to read (r), write (w), execute / search (x) on a
239 158 Michael Stahnke
 file or directory.
240 158 Michael Stahnke
    
241 158 Michael Stahnke
You can also modify the sticky bit (t), or the setuid and setgid bits (s).
242 158 Michael Stahnke
    
243 158 Michael Stahnke
Finally, you can set conditional execute permissions (X), which will result in
244 158 Michael Stahnke
the file having the execute bit if the target is a directory, or if the target
245 158 Michael Stahnke
had *any* execute bit set.  (eg: g+X will set x if the original was u=x,g=.)
246 158 Michael Stahnke
    
247 158 Michael Stahnke
248 158 Michael Stahnke
### Only load facts once per puppet run
249 158 Michael Stahnke
250 158 Michael Stahnke
Author: Patrick Carlisle <patrick@puppetlabs.com>
251 158 Michael Stahnke
252 158 Michael Stahnke
(#8341) Only load facts once per puppet run
253 158 Michael Stahnke
    
254 158 Michael Stahnke
Make the facter terminus the only place that loads facts (with the notable
255 158 Michael Stahnke
exception of pluginsync which loads any ruby code it syncs).
256 158 Michael Stahnke
    
257 158 Michael Stahnke
This should satisfy several requirements:
258 158 Michael Stahnke
259 158 Michael Stahnke
 * daemonized puppet agent can get fresh facts on each run
260 158 Michael Stahnke
 * puppet master can load facts
261 158 Michael Stahnke
 * facts are not loaded more than once by the puppet agent fact handler
262 158 Michael Stahnke
        
263 158 Michael Stahnke
### Puppetd does not remove its pidfile when it exits
264 158 Michael Stahnke
Author: R.I.Pienaar <rip@devco.net>
265 158 Michael Stahnke
266 158 Michael Stahnke
(#5246) Puppetd does not remove its pidfile when it exits
267 158 Michael Stahnke
    
268 158 Michael Stahnke
The Puppet::Daemon instance sets up the pid file when it starts
269 158 Michael Stahnke
but it's up to the user of that object to arrange for stop to be
270 158 Michael Stahnke
called
271 158 Michael Stahnke
    
272 158 Michael Stahnke
There are signal handlers setup to call stop but in a onetime run
273 158 Michael Stahnke
those are never called
274 158 Michael Stahnke
    
275 158 Michael Stahnke
This change arrange for the stop method to be called after a onetime
276 158 Michael Stahnke
run is done but do not hand the task of exiting the application over
277 158 Michael Stahnke
to that so that the agent application can handle the report status
278 158 Michael Stahnke
based exit codes
279 158 Michael Stahnke
    
280 158 Michael Stahnke
281 158 Michael Stahnke
### Retry inventory ActiveRecord transaction failure
282 158 Michael Stahnke
Author: Carl Caum <carl@carlcaum.com>
283 158 Michael Stahnke
284 158 Michael Stahnke
Retry inventory ActiveRecord transaction failure
285 158 Michael Stahnke
    
286 158 Michael Stahnke
Previous to this commit, if the ActiveRecord transaction for saving
287 158 Michael Stahnke
facts failed do to MySQL deadlock, for example, the transaction would
288 158 Michael Stahnke
fail printing a message to the user.  This primarily occurred during a
289 158 Michael Stahnke
PE agent installation if multiple agent's were being creating
290 158 Michael Stahnke
simultaneously.
291 158 Michael Stahnke
    
292 158 Michael Stahnke
This commit adds the ability to retry if a
293 158 Michael Stahnke
ActiveRecord::StatementInvalid exception is thrown.  To accomplish this,
294 158 Michael Stahnke
this commit ports Cloud Provisioner's
295 158 Michael Stahnke
Puppet::CloudPack::Utils#retry_action method to Puppet core under
296 158 Michael Stahnke
Puppet::Util::RetryAction#retry_action.
297 158 Michael Stahnke
298 158 Michael Stahnke
299 158 Michael Stahnke
### Properly track blockers when generating additional resources
300 158 Michael Stahnke
Author: Nick Lewis <nick@puppetlabs.com>
301 158 Michael Stahnke
302 158 Michael Stahnke
(#11641) Properly track blockers when generating additional resources
303 158 Michael Stahnke
    
304 158 Michael Stahnke
Previously, we would enqueue any unblocked resources as we added them to the
305 158 Michael Stahnke
graph. These were our initial resources, with no dependencies, and served as a
306 158 Michael Stahnke
starting place for traversal. However, we would
307 158 Michael Stahnke
add_dynamically_generated_resources before traversing, which could add
308 158 Michael Stahnke
additional resources and dependencies. We never accounted for these, causing
309 158 Michael Stahnke
our measure of blockedness to become incorrect (a resource could have more
310 158 Michael Stahnke
dependencies than we counted).
311 158 Michael Stahnke
    
312 158 Michael Stahnke
This is similar to the case of eval_generate adding additional resources. In
313 158 Michael Stahnke
that case, we clear the blockers list and allow it to be recalculated on
314 158 Michael Stahnke
demand. Unfortunately, that approach doesn't work for the case where we add
315 158 Michael Stahnke
resources before traversing (as in add_dynamically_generated_resources),
316 158 Michael Stahnke
because we wouldn't have a reliable list of resources to begin traversal with.
317 158 Michael Stahnke
Now we no longer enqueue resources when adding them, and instead wait until
318 158 Michael Stahnke
after we have called add_dynamically_generated_resources (which happens only
319 158 Michael Stahnke
once). This allows us to add our root resources with the assurance they won't
320 158 Michael Stahnke
change before we start evaluating them.
321 158 Michael Stahnke
    
322 158 Michael Stahnke
### Make the Debian service provider handle services that don't conform to the debain policy manual.
323 158 Michael Stahnke
Author: Zach Leslie <zach@puppetlabs.com>
324 158 Michael Stahnke
325 158 Michael Stahnke
(#7296) Make the Debian service provider handle services that don't conform to the debain policy manual.
326 158 Michael Stahnke
    
327 158 Michael Stahnke
This change is to support initscripts that do not support the --query
328 158 Michael Stahnke
method of invoke-rc.d used by the Debian provider to determine if
329 158 Michael Stahnke
service is enabled.
330 158 Michael Stahnke
    
331 158 Michael Stahnke
The fix checks that the link count in /etc/rc?.d is equal to 4, which is
332 158 Michael Stahnke
the number of links that should be present when using the Debian service
333 158 Michael Stahnke
provider, which is done by `update-rc.d #{service} defaults`.
334 158 Michael Stahnke
    
335 158 Michael Stahnke
### Write reports to a temporary file and move them into place
336 158 Michael Stahnke
Author: Ricky Zhou <ricky@fedoraproject.org>
337 158 Michael Stahnke
338 158 Michael Stahnke
(#8119) Write reports to a temporary file and move them into place
339 158 Michael Stahnke
    
340 158 Michael Stahnke
When writing reports, there is a window in between opening and writing to the
341 158 Michael Stahnke
report file when the report file exists as an empty file. This makes writing
342 158 Michael Stahnke
report processors a little annoying as they have to deal with this case. This
343 158 Michael Stahnke
writes the report into a temporary file then renames it to the report file.
344 158 Michael Stahnke
345 158 Michael Stahnke
### Test Augueas versions correctly with versioncmp    
346 158 Michael Stahnke
Author: Dominic Cleal <dcleal@redhat.com>
347 158 Michael Stahnke
348 158 Michael Stahnke
(#11414) Test Augeas versions correctly with versioncmp
349 158 Michael Stahnke
    
350 158 Michael Stahnke
The release of Augeas 0.10.0 broke simplistic version comparisons with the >=
351 158 Michael Stahnke
operator, so now use versioncmp.
352 158 Michael Stahnke
    
353 158 Michael Stahnke
### Save/execute changes on versions of Augeas < 0.3.6
354 158 Michael Stahnke
Author: Dominic Cleal <dcleal@redhat.com>
355 158 Michael Stahnke
356 158 Michael Stahnke
(#11414) Save/execute changes on versions of Augeas < 0.3.6
357 158 Michael Stahnke
    
358 158 Michael Stahnke
Versions of Augeas prior to 0.3.6 didn't report their version number, so a
359 158 Michael Stahnke
fallback of executing changes once in need_to_run? and again in execute_changes
360 158 Michael Stahnke
is performed.  Otherwise a save is done in need_to_run? and this is re-used in
361 158 Michael Stahnke
execute_changes.
362 158 Michael Stahnke
    
363 158 Michael Stahnke
The /augeas/events/saved node is used to tell whether the latter optimisation
364 158 Michael Stahnke
happened, but the return value of #match wasn't tested correctly (it's an empty
365 158 Michael Stahnke
array).
366 158 Michael Stahnke
367 158 Michael Stahnke
###   Make Puppet::Type.ensurable? false when exists? is undefined
368 158 Michael Stahnke
Author: Ilya Sher <ilya.sher@coding-knight.com>
369 158 Michael Stahnke
370 158 Michael Stahnke
(#11333) Make Puppet::Type.ensurable? false when exists? is undefined
371 158 Michael Stahnke
    
372 158 Michael Stahnke
Puppet::Type.ensurable? incorrectly returned true even when
373 158 Michael Stahnke
public_method_defined?(:exists?) was false because the check never
374 158 Michael Stahnke
actually happened. This make sure all the necessary methods are checked
375 158 Michael Stahnke
and adds tests.
376 158 Michael Stahnke
377 158 Michael Stahnke
### Consider package epoch version when comparing yum package versions    
378 158 Michael Stahnke
Author: Jude Nagurney <jude@pwan.org>
379 158 Michael Stahnke
380 158 Michael Stahnke
(#8062) Consider package epoch version when comparing yum package versions
381 158 Michael Stahnke
    
382 158 Michael Stahnke
By including the epoch version in the version returned as the "latest"
383 158 Michael Stahnke
available, we can now properly consider package updates where only the
384 158 Michael Stahnke
epoch version has changed.
385 158 Michael Stahnke
    
386 158 Michael Stahnke
### Log when we start evaluating resource at the info level
387 158 Michael Stahnke
Author: Patrick Carlisle <patrick@puppetlabs.com>
388 158 Michael Stahnke
389 158 Michael Stahnke
(#4865) Log when we start evaluating resources at the info level
390 158 Michael Stahnke
    
391 158 Michael Stahnke
Since we log the final time at info it makes sense to log the start at info as
392 158 Michael Stahnke
well.
393 158 Michael Stahnke
394 158 Michael Stahnke
### Fix array support in schedule's range parameters    
395 158 Michael Stahnke
Author: Sean Millichamp <sean@bruenor.org>
396 158 Michael Stahnke
397 158 Michael Stahnke
(#10321) Fix array support in schedule's range parameter
398 158 Michael Stahnke
    
399 158 Michael Stahnke
Change the schedule type's range parameter to properly evaluate
400 158 Michael Stahnke
all elements of a supplied array for validity instead of only
401 158 Michael Stahnke
checking the first member of the array. Add documentation to
402 158 Michael Stahnke
clarify that range does accept an array.
403 158 Michael Stahnke
    
404 158 Michael Stahnke
Fix the associated tests to use must instead of should (Puppet::Type#should
405 158 Michael Stahnke
shadows the rspec should).
406 158 Michael Stahnke
407 158 Michael Stahnke
###    Make resourcefile work with composite namevars
408 158 Michael Stahnke
Author: Max Martin <max@puppetlabs.com>
409 158 Michael Stahnke
410 158 Michael Stahnke
(#10109) Make resourcefile work with composite namevars
411 158 Michael Stahnke
    
412 158 Michael Stahnke
The code for creating the resourcefile was directly calling
413 158 Michael Stahnke
resource.name_var, which was causing problems with resources that have
414 158 Michael Stahnke
composite namevars (since, for these, Type#name_var will return false).
415 158 Michael Stahnke
This patch sanitizes the process by first checking whether there is a
416 158 Michael Stahnke
single namevar, and simply calling resource.ref if there is not one.
417 158 Michael Stahnke
    
418 158 Michael Stahnke
419 158 Michael Stahnke
### Add README_DEVELOPER describing UTF-8 in Puppet
420 158 Michael Stahnke
Author: Jeff McCune <jeff@puppetlabs.com>
421 158 Michael Stahnke
422 158 Michael Stahnke
(#11246) Add README_DEVELOPER describing UTF-8 in Puppet
423 158 Michael Stahnke
    
424 158 Michael Stahnke
Without this patch, developers of Puppet don't have a clear place to get
425 158 Michael Stahnke
a high level understanding of the way other Puppet developers are
426 158 Michael Stahnke
working with UTF-8 and the differences in character encodings between
427 158 Michael Stahnke
Ruby 1.8 and 1.9.
428 158 Michael Stahnke
    
429 158 Michael Stahnke
This patch addresses this problem by adding a new document,
430 158 Michael Stahnke
README_DEVELOPER.md where developers and contributors can look to for
431 158 Michael Stahnke
high level information.
432 158 Michael Stahnke
433 158 Michael Stahnke
### Better SSL error message certificate doesn't match key    
434 158 Michael Stahnke
Author: Joshua Harlan Lifton <lifton@puppetlabs.com>
435 158 Michael Stahnke
436 158 Michael Stahnke
(#7110) Better SSL error message certificate doesn't match key
437 158 Michael Stahnke
    
438 158 Michael Stahnke
Previously, any error with the certificate retrieved from the master
439 158 Michael Stahnke
matching the agent's private key would give the same static error
440 158 Michael Stahnke
message, which wasn't particularly helpful. This commit differentiates
441 158 Michael Stahnke
three different error cases: missing certificate, missing private key,
442 158 Michael Stahnke
and certificate doesn't match private key. In the last case, the error
443 158 Michael Stahnke
message includes the fingerprint of the certificate in question and
444 158 Michael Stahnke
explicit command line instructions on how to fix the problem.
445 158 Michael Stahnke
446 158 Michael Stahnke
###   Add a defaults argument to create_resources
447 158 Michael Stahnke
Author: Matthias Pigulla <mp@webfactory.de>
448 158 Michael Stahnke
449 158 Michael Stahnke
(#9768) Add a defaults argument to create_resources
450 158 Michael Stahnke
    
451 158 Michael Stahnke
Make it possible to supply defaults when calling create_resources using an
452 158 Michael Stahnke
optional hash argument.
453 158 Michael Stahnke
    
454 158 Michael Stahnke
### Link should autorequire target
455 158 Michael Stahnke
Author: Stefan Schulte <stefan.schulte@taunusstein.net>
456 158 Michael Stahnke
457 158 Michael Stahnke
(#5421) Link should autorequire target
458 158 Michael Stahnke
    
459 158 Michael Stahnke
When we manage a local link to a directory and the target directory is
460 158 Michael Stahnke
managed by puppet as well, establish an autorequire. So if we have
461 158 Michael Stahnke
something like
462 158 Michael Stahnke
    
463 158 Michael Stahnke
      file { '/foo': ensure => directory }
464 158 Michael Stahnke
      file { '/link_to_foo': ensure => '/foo' }
465 158 Michael Stahnke
      file { '/link_to_foo/bar': ensure => file }
466 158 Michael Stahnke
    
467 158 Michael Stahnke
we can ensure that puppet does not create dead links and does not try to
468 158 Michael Stahnke
create '/link_to_foo/bar' before /foo is created.
469 158 Michael Stahnke
470 158 Michael Stahnke
###     Use SMF's svcadm -s option to wait for errors
471 158 Michael Stahnke
Author: Dominic Cleal <dcleal@redhat.com>
472 158 Michael Stahnke
473 158 Michael Stahnke
(#10807) Use SMF's svcadm -s option to wait for errors
474 158 Michael Stahnke
    
475 158 Michael Stahnke
By default running `svcadm enable example` will start the service in the
476 158 Michael Stahnke
background and won't return errors if it fails.  Using the -s option will cause
477 158 Michael Stahnke
svcadm to wait and return errors back to the provider if the service cannot
478 158 Michael Stahnke
start for some reason.
479 158 Michael Stahnke
    
480 158 Michael Stahnke
### Added missing RequestHeader entries to ext/rack/files/apache2.conf
481 158 Michael Stahnke
Author: Eli Klein <eklein@rallydev.com>
482 158 Michael Stahnke
483 158 Michael Stahnke
    Added missing RequestHeader entries to ext/rack/files/apache2.conf
484 158 Michael Stahnke
 
485 158 Michael Stahnke
###    Debug logging when we start evaluating resources.
486 158 Michael Stahnke
Author: Daniel Pittman <daniel@puppetlabs.com>
487 158 Michael Stahnke
488 158 Michael Stahnke
(#4865) Debug logging when we start evaluating resources.
489 158 Michael Stahnke
    
490 158 Michael Stahnke
The `evaltrace` option allowed individual resource evaluation time to be
491 158 Michael Stahnke
tracked, which made it easier to post-hoc identify which resources took long
492 158 Michael Stahnke
periods of time to process.
493 158 Michael Stahnke
    
494 158 Michael Stahnke
It is also helpful, when doing live debugging, to know where the hang happens;
495 158 Michael Stahnke
to support that we now log a debug message about starting the evaluation of
496 158 Michael Stahnke
the resource before we go into the process.
497 158 Michael Stahnke
498 158 Michael Stahnke
###   Update storeconfigclean script to read puppet.conf
499 158 Michael Stahnke
Author: Nan Liu <nan@puppetlabs.com>
500 158 Michael Stahnke
501 158 Michael Stahnke
(#8547) Update storeconfigclean script to read puppet.conf
502 158 Michael Stahnke
    
503 158 Michael Stahnke
The existing storeconfig script is parsing and reading puppet.conf
504 158 Michael Stahnke
specifically from the master section. This change allows the script to
505 158 Michael Stahnke
read from the settings from puppet.conf in the order of master, main,
506 158 Michael Stahnke
and loads the rails default. This should match the puppet application
507 158 Michael Stahnke
behaviour.
508 158 Michael Stahnke
    
509 158 Michael Stahnke
### Add mysql2 gem support
510 158 Michael Stahnke
Author: Stefan Schulte <stefan.schulte@taunusstein.net>
511 158 Michael Stahnke
512 158 Michael Stahnke
(#9997) Add mysql2 gem support
513 158 Michael Stahnke
    
514 158 Michael Stahnke
Besides the mysql gem there is a mysql2 gem that is a "modern, simple
515 158 Michael Stahnke
and very fast Mysql library for Ruby" [1]. It can either be installed as a
516 158 Michael Stahnke
separate gem (v0.2.x) for ActiveRecord < 3.1 or can be used as part of
517 158 Michael Stahnke
ActiveRecord 3.1
518 158 Michael Stahnke
    
519 158 Michael Stahnke
To use mysql2 the dbadapter setting must be set to "mysql2" and this patch
520 158 Michael Stahnke
adds support for this setting.
521 158 Michael Stahnke
    
522 158 Michael Stahnke
    [1] https://github.com/brianmario/mysql2#readme
523 158 Michael Stahnke
    
524 158 Michael Stahnke
525 158 Michael Stahnke
# Mac Highlights #
526 158 Michael Stahnke
###  Fix OS X Ruby supplementary group handling
527 158 Michael Stahnke
Author: Gary Larizza <gary@puppetlabs.com>
528 158 Michael Stahnke
529 158 Michael Stahnke
(#3419) Fix OS X Ruby supplementary group handling
530 158 Michael Stahnke
    
531 158 Michael Stahnke
Catch Errno::EINVAL as some operating systems (OS X in particular) can
532 158 Michael Stahnke
cause troubles when using Process#groups= to change the user/process
533 158 Michael Stahnke
list of supplementary groups membership.
534 158 Michael Stahnke
    
535 158 Michael Stahnke
Test coverage has been added to check for regressions.
536 158 Michael Stahnke
    
537 158 Michael Stahnke
Add a test for the expected failure
538 158 Michael Stahnke
539 158 Michael Stahnke
### Fix group resource in OS X    
540 158 Michael Stahnke
Author: Gary Larizza <gary@puppetlabs.com>
541 158 Michael Stahnke
542 158 Michael Stahnke
(#4855) Fix group resource in OS X
543 158 Michael Stahnke
    
544 158 Michael Stahnke
The group provider on OS X uses “dseditgroup” to manage group
545 158 Michael Stahnke
membership. Due to Apple bug 8481241 (“dseditgroup can’t remove unknown
546 158 Michael Stahnke
users from groups”), however, if the puppet group provider needs to
547 158 Michael Stahnke
remove a non-existant user from a group it manages, it will fail.
548 158 Michael Stahnke
    
549 158 Michael Stahnke
To remedy this, in the meantime, the provider will call dscl to delete
550 158 Michael Stahnke
the non-existant member from the group. If that fails then the error
551 158 Michael Stahnke
is rescued and feedback is provided.
552 158 Michael Stahnke
    
553 158 Michael Stahnke
### Build a Rake task for building Apple Packages
554 158 Michael Stahnke
Author: Gary Larizza <gary@puppetlabs.com>
555 158 Michael Stahnke
556 158 Michael Stahnke
Build a Rake task for building Apple Packages
557 158 Michael Stahnke
558 158 Michael Stahnke
### Use launchctl load -w in launchd provider    
559 158 Michael Stahnke
Author: Gary Larizza <gary@puppetlabs.com>
560 158 Michael Stahnke
561 158 Michael Stahnke
(#2773) Use launchctl load -w in launchd provider
562 158 Michael Stahnke
    
563 158 Michael Stahnke
There was an issue where a service on OS X would be enabled but also
564 158 Michael Stahnke
stopped and the launchd service provider couldn't start it. In this
565 158 Michael Stahnke
case, the launchd service provider needed to execute `launchctl load -w
566 158 Michael Stahnke
<job_path>` to successfully start the service, but it wasn't programmed
567 158 Michael Stahnke
to do so.
568 158 Michael Stahnke
    
569 158 Michael Stahnke
To remedy this, the launchd service provider's start method now checks
570 158 Michael Stahnke
if the job is disabled OR if the job is currently stopped.
571 158 Michael Stahnke
    
572 158 Michael Stahnke
A spec test was added to catch for this unique situation.
573 158 Michael Stahnke
    
574 158 Michael Stahnke
### Add password get/set behavior for 10.7
575 158 Michael Stahnke
Author: Gary Larizza <gary@puppetlabs.com>
576 158 Michael Stahnke
577 158 Michael Stahnke
(#11293) Add password get/set behavior for 10.7
578 158 Michael Stahnke
    
579 158 Michael Stahnke
Puppet did not have the ability to get/set passwords in OS X version
580 158 Michael Stahnke
10.7.  This commit implements this behavior. Users in 10.7 have a
581 158 Michael Stahnke
binary plist file in /var/db/dslocal/nodes/Default/users that contains
582 158 Michael Stahnke
a 'ShadowHashData' key. The value for this key is actually a binary
583 158 Michael Stahnke
encrypted plist which contains a 'SALTED-SHA512' key containing
584 158 Michael Stahnke
a base64 encoded string. This string is actually the salted-SHA512
585 158 Michael Stahnke
password hash with a 4 byte salt prepending the hash. Puppet expects
586 158 Michael Stahnke
this 4 byte salt + salted-SHA512 password hash in order to set the
587 158 Michael Stahnke
user's password. Since this value is drastically different from
588 158 Michael Stahnke
previous versions of OS X, Puppet will fail if you try and pass
589 158 Michael Stahnke
a SHA1 password hash that was used in previous versions of OS X.
590 158 Michael Stahnke
    
591 158 Michael Stahnke
Spec tests were added to ensure that Puppet fails with an incorrect
592 158 Michael Stahnke
password, and that the get/set behavior works properly with OS X
593 158 Michael Stahnke
version 10.7.
594 158 Michael Stahnke
595 158 Michael Stahnke
# Windows Highlights #
596 158 Michael Stahnke
597 158 Michael Stahnke
### Always serve files in binary mode
598 158 Michael Stahnke
Author: Josh Cooper <josh@puppetlabs.com>
599 158 Michael Stahnke
600 158 Michael Stahnke
(#11929) Always serve files in binary mode
601 158 Michael Stahnke
    
602 158 Michael Stahnke
Previously, Windows agents were reading files in text mode when serving
603 158 Michael Stahnke
them locally, such as when serving files from a local module, corrupting
604 158 Michael Stahnke
binary files in the process.
605 158 Michael Stahnke
    
606 158 Michael Stahnke
This commit reads files in binary mode, which is a noop on Unix.
607 158 Michael Stahnke
    
608 158 Michael Stahnke
###  Use `%~dp0` to resolve bat file's install directory
609 158 Michael Stahnke
Author: Josh Cooper <josh@puppetlabs.com>
610 158 Michael Stahnke
611 158 Michael Stahnke
(#11714) Use `%~dp0` to resolve bat file's install directory
612 158 Michael Stahnke
    
613 158 Michael Stahnke
This commit uses the `%~dp0` batch script modifier to resolve the
614 158 Michael Stahnke
drive and path of the directory containing the envpuppet.bat
615 158 Michael Stahnke
file. This eliminates the need for hard coded paths within the script
616 158 Michael Stahnke
tselfIt also uses `%VAR:\=/%` to substitute each backslash for a
617 158 Michael Stahnke
forward slash in the RUBYLIB environment
618 158 Michael Stahnke
    
619 158 Michael Stahnke
Also added a section about running the spec tests on Windows.
620 158 Michael Stahnke
 
621 158 Michael Stahnke
622 158 Michael Stahnke
### Add envpuppet batch file to run Puppet from source on Windows
623 158 Michael Stahnke
Author: Jeff McCune <jeff@puppetlabs.com>
624 158 Michael Stahnke
625 158 Michael Stahnke
(#11714) Add envpuppet batch file to run Puppet from source on Windows
626 158 Michael Stahnke
    
627 158 Michael Stahnke
Running Puppet on windows from source is non-trivial since the
628 158 Michael Stahnke
environment variables behave quite differently.  In addition, it's not
629 158 Michael Stahnke
clear windows paths expect / rather than \ path separators.
630 158 Michael Stahnke
    
631 158 Michael Stahnke
This patch provides an envpuppet batch file to run Puppet from source on
632 158 Michael Stahnke
Windows platforms.
633 158 Michael Stahnke
634 158 Michael Stahnke
###  Don't hard code ruby install paths in Windows batch files
635 158 Michael Stahnke
Author: Josh Cooper <josh@puppetlabs.com>
636 158 Michael Stahnke
637 158 Michael Stahnke
(#11847) Don't hard code ruby install paths in Windows batch files
638 158 Michael Stahnke
    
639 158 Michael Stahnke
Previously, the {filebucket,pi,puppet,puppetdoc,ralsh}.bat files hard
640 158 Michael Stahnke
coded the path to the ruby installation, making it impossible to move
641 158 Michael Stahnke
the ruby install directory.
642 158 Michael Stahnke
    
643 158 Michael Stahnke
This commit changes the script to use the `%~dp0` batch file modifier,
644 158 Michael Stahnke
which resolves to the drive letter and path of the directory of the
645 158 Michael Stahnke
batch file being executed.
646 158 Michael Stahnke
    
647 158 Michael Stahnke
Windows XP and later all support the `%*` modifier, so this commit
648 158 Michael Stahnke
removes the Win 9x code paths that are not supported.
649 158 Michael Stahnke
650 158 Michael Stahnke
### Set password before creating user on Windows    
651 158 Michael Stahnke
Author: Paul Tinsley <paul.tinsley@gmail.com>
652 158 Michael Stahnke
653 158 Michael Stahnke
(#11717) Set password before creating user on Windows
654 158 Michael Stahnke
    
655 158 Michael Stahnke
Previously, puppet could not create a user with no password when a
656 158 Michael Stahnke
local password complexity policy was set. This commit sets the
657 158 Michael Stahnke
password on the user prior to creating it, and updates the spec tests
658 158 Michael Stahnke
accordingly.
659 158 Michael Stahnke
660 158 Michael Stahnke
### Fix fact and plugin sync on Windows    
661 158 Michael Stahnke
Author: Josh Cooper <josh@puppetlabs.com>
662 158 Michael Stahnke
663 158 Michael Stahnke
(#11408) Fix fact and plugin sync on Windows
664 158 Michael Stahnke
    
665 158 Michael Stahnke
Previously, fact and pluginsync were broken on Windows, because it was
666 158 Michael Stahnke
defaulting the owner and group to Process.uid/gid, and then failing to
667 158 Michael Stahnke
translate them into Windows SIDs.
668 158 Michael Stahnke
    
669 158 Michael Stahnke
This commit changes the default file owner to the current user name,
670 158 Michael Stahnke
and the default file group to Nobody, which is the group that Windows
671 158 Michael Stahnke
typically applies to newly created files.
672 158 Michael Stahnke
673 158 Michael Stahnke
###   Don't copy owner and group when sourcing files from master
674 158 Michael Stahnke
Author: Josh Cooper <josh@puppetlabs.com>
675 158 Michael Stahnke
676 158 Michael Stahnke
(#10586) Don't copy owner and group when sourcing files from master
677 158 Michael Stahnke
    
678 158 Michael Stahnke
Previously, puppet on Windows was not able to source files from the
679 158 Michael Stahnke
master, because it was attempting to translate the uid/gid from
680 158 Michael Stahnke
the Unix master into a Windows account, and obviously failing.
681 158 Michael Stahnke
    
682 158 Michael Stahnke
This commit skips the owner and group properties when copying them
683 158 Michael Stahnke
from non-local sources, i.e. sources whose URIs have a 'puppet'
684 158 Michael Stahnke
scheme.
685 158 Michael Stahnke
    
686 158 Michael Stahnke
If the source comes from a local source, then puppet behaves the same
687 158 Michael Stahnke
as it did previously, it copies the owner and group if the source
688 158 Michael Stahnke
volume supports Windows ACLs, e.g. C:/, samba mapped drives, or uses
689 158 Michael Stahnke
default values if the volume does not, e.g. VMware shared drives.
690 158 Michael Stahnke
    
691 163 Michael Stahnke
692 163 Michael Stahnke
## FreeBSD Highlights
693 163 Michael Stahnke
### Add support for user expiriy in pw user provider
694 163 Michael Stahnke
Author: Tim Bishop <tim@bishnet.net>
695 163 Michael Stahnke
696 163 Michael Stahnke
(#11046) Add support for user expiry in pw user provider
697 163 Michael Stahnke
698 163 Michael Stahnke
Add support for setting an expiry date for a user in the pw user
699 163 Michael Stahnke
provider. FreeBSD uses the format DD-MM-YYYY rather than Puppet's
700 163 Michael Stahnke
YYYY-MM-DD. Tests added to confirm the value is correctly swapped
701 163 Michael Stahnke
around.
702 163 Michael Stahnke
703 163 Michael Stahnke
Also added custom accessor method to take the unix timestamp given
704 163 Michael Stahnke
by the operating system to a Puppet-style YYYY-MM-DD. This stops
705 163 Michael Stahnke
Puppet from repeatedly trying to set the expiry date if it's already
706 163 Michael Stahnke
correct.
707 163 Michael Stahnke
708 163 Michael Stahnke
### Improve pw group provider on FreeBSD
709 163 Michael Stahnke
Author: Tim Bishop <tim@bishnet.net>
710 163 Michael Stahnke
711 163 Michael Stahnke
(#11046) Improve pw group provider on FreeBSD
712 163 Michael Stahnke
713 163 Michael Stahnke
Make the pw group provider on FreeBSD support managing group members.
714 163 Michael Stahnke
Also readd the allowdupe feature since in testing on FreeBSD 7, 8
715 163 Michael Stahnke
and 9 the -o flag to pw works as documented.
716 163 Michael Stahnke
717 163 Michael Stahnke
Add tests for the provider.
718 163 Michael Stahnke
719 163 Michael Stahnke
### Make sure managehome is respected on FreeBSD
720 163 Michael Stahnke
Author: Tim Bishop <tim@bishnet.net>
721 163 Michael Stahnke
722 163 Michael Stahnke
(#10962) Make sure managehome is respected on FreeBSD
723 163 Michael Stahnke
724 163 Michael Stahnke
When modifying the home directory of a user and managehome is set
725 163 Michael Stahnke
the -m flag should be used with pw. This ensures that the new home
726 163 Michael Stahnke
directory is created if it doesn't exist.
727 163 Michael Stahnke
728 163 Michael Stahnke
Also add test to verify this behaviour.
729 163 Michael Stahnke
730 163 Michael Stahnke
### Add password management on FreeBSD
731 163 Michael Stahnke
Author: Tim Bishop <tim@bishnet.net>
732 163 Michael Stahnke
733 163 Michael Stahnke
(#11318) Add password management on FreeBSD
734 163 Michael Stahnke
735 163 Michael Stahnke
This adds the manages_passwords feature to the pw user provider. It is based
736 163 Michael Stahnke
on the patch by Andrew Hust that was integrated into FreeBSD puppet port. It
737 163 Michael Stahnke
adds tests covering the create, delete and modify processes of the provider.
738 163 Michael Stahnke
739 163 Michael Stahnke
This integrates a fix for #7500 that was introduced by the original patch.
740 163 Michael Stahnke
The existing code takes the first character of each property and uses it as a
741 163 Michael Stahnke
flag. However, with pw, the -p flag is for setting the password expiration.
742 163 Michael Stahnke
The result is that the password isn't set at create time and that the password
743 163 Michael Stahnke
is set to expire. The next run of puppet correctly sets the password but the
744 163 Michael Stahnke
expiry is still set. The new code avoids using -p for passwords, and also sets
745 163 Michael Stahnke
the password correctly when an account is created.
746 163 Michael Stahnke
747 154 Matthaus Litteken
# 2.7.9
748 154 Matthaus Litteken
749 156 Matthaus Litteken
This is a bug fix release for regression (#11306) in 2.7.8 on Ruby 1.8.5.
750 154 Matthaus Litteken
751 156 Matthaus Litteken
The 1.8.5-incompatible code wasn’t caught because of a long-standing bug in our tests that went unnoticed because of a bug in our CI setup. The former issue caused specs to fail before they even started running on 1.8.5, and the latter caused the run to still be reported as successful. We’ve fixed the former bug, but haven’t yet figured out a way to fix the latter (as it seems to be a bug in Ruby 1.8.5 + rspec). We will, however, be taking steps to ensure that such problems with our CI setup are more visible and caught sooner.
752 154 Matthaus Litteken
753 155 Matthaus Litteken
(#11306)
754 154 Matthaus Litteken
    Fix Ruby 1.8.5-incompatible code in Transaction#eval_generate
755 154 Matthaus Litteken
    
756 154 Matthaus Litteken
    This was previously creating a Hash from an array of pairs.
757 154 Matthaus Litteken
    Unfortunately, Ruby 1.8.5 only supports an argument list of pairs rather
758 154 Matthaus Litteken
    than an array, so this code didn't work with that version.
759 1
760 152 Nick Fagerlund
# 2.7.8
761 146 Michael Stahnke
762 151 Nick Fagerlund
This is a **feature and bug fix** release in the 2.7.x branch.
763 146 Michael Stahnke
764 153 Nick Fagerlund
## Known Issues
765 153 Nick Fagerlund
766 153 Nick Fagerlund
**This release introduced a regression that causes errors under Ruby 1.8.5,** which was not noticed until after release. See issue #11306 for more details as we investigate, and delay upgrading to this version if you depend on Ruby 1.8.5 in your node population.
767 153 Nick Fagerlund
768 151 Nick Fagerlund
## New Features
769 146 Michael Stahnke
770 151 Nick Fagerlund
### Display file diffs through the Puppet log system.
771 146 Michael Stahnke
772 151 Nick Fagerlund
(#2744)
773 146 Michael Stahnke
774 151 Nick Fagerlund
When Puppet generated a diff after changing a file on disk, it previously
775 151 Nick Fagerlund
printed it directly to stdout; although a user could view it, it
776 151 Nick Fagerlund
was lost to the rest of the system, and did not appear in monitoring, logs, or reports.
777 146 Michael Stahnke
778 151 Nick Fagerlund
We now send file diffs through our regular logging system, so that they can be viewed in reports and logs. **Note that this may have security implications if reports are being sent to an untrusted destination, as Puppet now exposes partial file contents in reports.**
779 146 Michael Stahnke
780 151 Nick Fagerlund
### Allow optional trailing comma in argument lists.
781 146 Michael Stahnke
782 151 Nick Fagerlund
(#6335)
783 146 Michael Stahnke
784 151 Nick Fagerlund
You can now put an optional comma at the end of argument lists for parameterized
785 151 Nick Fagerlund
class definitions and defined types. This makes parameter lists more closely
786 151 Nick Fagerlund
resemble resource attributes.
787 146 Michael Stahnke
788 151 Nick Fagerlund
## Bug Fixes
789 146 Michael Stahnke
790 146 Michael Stahnke
791 151 Nick Fagerlund
### Provide default subjectAltNames when bootstrapping master
792 146 Michael Stahnke
793 151 Nick Fagerlund
(#10739)
794 146 Michael Stahnke
795 151 Nick Fagerlund
When bootstrapping a new puppet master without explicitly setting its valid alternate DNS names, we've always added some default Subject Alternative Names to its certificate so agents could reach it at `puppet` and `puppet.<domain>`. This got broken in the process of fixing #2848 (the CVE-2011-3872 AltNames vulnerability), which caused new puppet masters to get certificates with no valid Subject Alternative Names. (That is, the master could only be reached at its FQDN, not at `puppet`.)
796 146 Michael Stahnke
797 151 Nick Fagerlund
This fix brings back the default AltNames behavior for initial puppet master certificates, while staying true to the policy changes we made for #2848 and making sure the default names never end up in agent certs. As ever, the default DNS names are only used if the `dns_alt_names` setting isn't explicitly set.
798 1
799 151 Nick Fagerlund
### Don't automatically enable `show_diff` in noop mode
800 141 Michael Stahnke
801 151 Nick Fagerlund
(#2744)
802 1
803 151 Nick Fagerlund
As of 845825a, file diffs are now logged, rather than printed to
804 151 Nick Fagerlund
console. Because log messages may be stored and are more broadly readable,
805 151 Nick Fagerlund
we no longer implicitly set `show_diff` in noop mode.
806 141 Michael Stahnke
807 1
808 151 Nick Fagerlund
### Allow providers to be used in the run they become suitable
809 146 Michael Stahnke
810 151 Nick Fagerlund
(#6907)
811 146 Michael Stahnke
812 151 Nick Fagerlund
At long last! You can now deliver a provider with pluginsync, use a Puppet resource to install executables or files the provider depends on, and use that provider in resources during the same run. 
813 146 Michael Stahnke
814 151 Nick Fagerlund
This works for both explicitly selected providers and providers that would be the default for their type.
815 141 Michael Stahnke
816 151 Nick Fagerlund
### Output four-digit file modes in logging and reporting
817 141 Michael Stahnke
818 151 Nick Fagerlund
(#7274)
819 141 Michael Stahnke
820 151 Nick Fagerlund
When reporting a change to a file's mode, Puppet now outputs the four-digit
821 151 Nick Fagerlund
file mode instead of omitting the leading 0, i.e. 0755 instead of 755. This
822 151 Nick Fagerlund
reduces the likelihood of setting the wrong mode on a file through a
823 151 Nick Fagerlund
copy/paste accident.
824 1
825 151 Nick Fagerlund
### Fix "parenthesize method arguments" warnings under Ruby 1.8.6
826 146 Michael Stahnke
827 151 Nick Fagerlund
(#10161)
828 146 Michael Stahnke
829 151 Nick Fagerlund
In the process of Windows development, we introduced some warnings under Ruby 1.8.6:
830 1
831 151 Nick Fagerlund
    warning: parenthsize arguments(s) for future versions
832 1
833 151 Nick Fagerlund
These have been fixed, along with several testing/spec improvements around order dependent tests, and testing on Windows.
834 146 Michael Stahnke
835 151 Nick Fagerlund
### Restore Mongrel XMLRPC functionality
836 1
837 151 Nick Fagerlund
(#10244)
838 141 Michael Stahnke
839 151 Nick Fagerlund
Some code was over-eagerly removed, which turned out to still be necessary for backward compatibility with XMLRPC clients. It has been re-instated in this release.
840 146 Michael Stahnke
841 151 Nick Fagerlund
### Fix missing facts under Mongrel
842 146 Michael Stahnke
843 151 Nick Fagerlund
(#9109)
844 1
845 151 Nick Fagerlund
When using Puppet with Mongrel, facts were being lost from agent nodes running
846 151 Nick Fagerlund
2.7.0 or higher. This was caused by Mongrel puppet masters only retrieving
847 151 Nick Fagerlund
request parameters from the query parameters of the URL, which mixed badly
848 151 Nick Fagerlund
with clients that submit their facts in a POST request. This has been fixed,
849 151 Nick Fagerlund
and Mongrel puppet masters can merge the POST request body with the query
850 151 Nick Fagerlund
parameters.
851 146 Michael Stahnke
852 151 Nick Fagerlund
### Speed up recursive file management in 2.7
853 141 Michael Stahnke
854 151 Nick Fagerlund
(#9671)
855 146 Michael Stahnke
856 151 Nick Fagerlund
Recursively managing file ownership and permissions
857 151 Nick Fagerlund
is now at least ten times faster. This
858 151 Nick Fagerlund
speed improvement can also
859 151 Nick Fagerlund
be seen in some other scenarios.
860 146 Michael Stahnke
861 151 Nick Fagerlund
### Windows: Handle files on non-ACL volumes more gracefully
862 146 Michael Stahnke
863 151 Nick Fagerlund
(#10614) 
864 141 Michael Stahnke
865 151 Nick Fagerlund
* We now check whether a Windows volume supports ACLs before just trying to get or set them. This eliminates a nasty error that would arise when managing owner, group, and/or mode on a file whose volume didn't support ACLs.
866 151 Nick Fagerlund
* We also insert default ACL values when sourcing file content from a volume that doesn't support Windows ACLs (e.g. a VMware shared drive) to a volume that does; this allows content to be sourced without requiring the owner, group, and mode to be specified in the manifest. A file's owner now defaults to Administrators, its group defaults to Nobody, and its mode defaults to 0644.
867 151 Nick Fagerlund
* Setting and clearing of the read-only attribute is improved.
868 151 Nick Fagerlund
* Potential segfaults when attempting to manage ACLs on non-ACL volumes have been fixed by improving our handling of return values from the Windows APIs.
869 146 Michael Stahnke
870 151 Nick Fagerlund
These fixes do not affect the POSIX file provider.
871 141 Michael Stahnke
872 151 Nick Fagerlund
873 151 Nick Fagerlund
### Ruby 1.8.1: Don't rely on Kernel#Pathname
874 151 Nick Fagerlund
875 151 Nick Fagerlund
(#10727)
876 151 Nick Fagerlund
877 151 Nick Fagerlund
We've removed an unnecessary incompatibility with pre-1.8.5 Rubies in `Puppet::Type::File`, which was caused by using Kernel#Pathname.
878 151 Nick Fagerlund
879 151 Nick Fagerlund
880 151 Nick Fagerlund
### Allow authenticated clients to access anything clients _without_ certificates can access
881 151 Nick Fagerlund
882 151 Nick Fagerlund
(#9508)
883 151 Nick Fagerlund
884 151 Nick Fagerlund
Previously, the default `auth.conf` allowed anonymous clients *more* access to the certificate endpoint than authenticated clients. We now allow authenticated clients to access any endpoint that we trust anonymous clients to use. This improves support for distributed certificate management workflows.
885 151 Nick Fagerlund
886 151 Nick Fagerlund
### Serve file content in binary mode
887 151 Nick Fagerlund
888 151 Nick Fagerlund
(#9983)
889 151 Nick Fagerlund
890 1
Previously, Puppet::FileServing::Content opened files in text
891 1
mode. This has been changed to use binary mode.
892 152 Nick Fagerlund
893 152 Nick Fagerlund
# 2.7.7
894 152 Nick Fagerlund
895 152 Nick Fagerlund
2.7.7 was killed in the Thunderdome by 2.7.8. It was never released.
896 151 Nick Fagerlund
897 141 Michael Stahnke
# 2.7.6
898 141 Michael Stahnke
899 141 Michael Stahnke
This is a **security, feature, and bug fix** release in the 2.7.x branch.
900 146 Michael Stahnke
901 146 Michael Stahnke
## Security Fixes
902 146 Michael Stahnke
903 136 Michael Stahnke
### CVE-2011-3872 (AltNames vulnerability)
904 138 Nick Fagerlund
905 1
[(Full vulnerability and mitigation details)][cve20113872]
906 138 Nick Fagerlund
907 1
[cve20113872]: http://puppetlabs.com/security/cve/cve-2011-3872/
908 138 Nick Fagerlund
909 1
**This is a major security vulnerability which must be manually remediated;**
910 138 Nick Fagerlund
upgrading Puppet will not fully protect a site from this vulnerability.
911 1
912 138 Nick Fagerlund
A bug in all previous versions causes Puppet to insert the puppet master’s DNS
913 134 Michael Stahnke
alt names ("certdnsnames" in puppet.conf) into the X.509 Subject Alternative
914 138 Nick Fagerlund
Name field of all certificates, rather than just the puppet master’s
915 138 Nick Fagerlund
certificate.
916 1
917 138 Nick Fagerlund
Since the puppet agent daemon can use the Subject Alternative Name field to
918 138 Nick Fagerlund
identify its puppet master, your site may contain agent certificates that can
919 138 Nick Fagerlund
be used in a Man in the Middle (MITM) attack to impersonate the puppet master.
920 138 Nick Fagerlund
921 1
This release fixes the underlying bug that caused dangerous certificates to be
922 138 Nick Fagerlund
issued, but **any existing certificates with improper DNS alternate names will
923 138 Nick Fagerlund
remain dangerous until your agent nodes have been reconfigured.**
924 138 Nick Fagerlund
925 134 Michael Stahnke
Any site where the puppet master's `certdnsnames` setting has been enabled is
926 138 Nick Fagerlund
vulnerable to attack. See the [CVE-2011-3872 details page][cve20113872] for
927 138 Nick Fagerlund
more information, including:
928 138 Nick Fagerlund
929 134 Michael Stahnke
* How to determine whether you are affected
930 138 Nick Fagerlund
* How to fully remediate the vulnerability
931 138 Nick Fagerlund
* How to download and use the automated remediation toolkit released by Puppet Labs
932 134 Michael Stahnke
933 138 Nick Fagerlund
## Features and Enhancements
934 138 Nick Fagerlund
935 138 Nick Fagerlund
### Enhancement: User/group management on Windows
936 151 Nick Fagerlund
937 138 Nick Fagerlund
(#9328) Retrieve user and group SIDs on windows.
938 134 Michael Stahnke
939 138 Nick Fagerlund
Puppet can now manage user and group resources on Windows, and will use
940 134 Michael Stahnke
Windows security identifiers (SIDs) for the uid and gid properties. (The uid
941 138 Nick Fagerlund
and gid properties are read-only for the time being.)
942 134 Michael Stahnke
943 138 Nick Fagerlund
### Enhancement: Better file support on Windows
944 138 Nick Fagerlund
945 134 Michael Stahnke
The file type and providers have been significantly refactored to properly
946 138 Nick Fagerlund
manage the owners, groups, and permissions of files on Windows.
947 134 Michael Stahnke
948 138 Nick Fagerlund
Some subtleties to be aware of:
949 138 Nick Fagerlund
950 134 Michael Stahnke
* In general, this implementation only supports "typical" permissions,
951 138 Nick Fagerlund
  where group permissions are a subset of user, and other permissions
952 151 Nick Fagerlund
  are a subset of group, e.g. 754, but not 467.
953 138 Nick Fagerlund
* The owner can be either a user or group SID, and most system files
954 138 Nick Fagerlund
  are owned by the Administrators group.
955 138 Nick Fagerlund
* The group can be either a user or group SID.
956 138 Nick Fagerlund
* Unexpected results can occur if the owner and group are the
957 138 Nick Fagerlund
  same, but the user and group classes are different, e.g. 750. In
958 138 Nick Fagerlund
  this case, it is not possible to allow write access to the owner,
959 138 Nick Fagerlund
  but not the group. As a result, the actual permissions set on the
960 138 Nick Fagerlund
  file would be 770.
961 138 Nick Fagerlund
* In general, only privileged users can set the owner, group, or
962 138 Nick Fagerlund
  change the mode for files they do not own. In 2003, the user must
963 138 Nick Fagerlund
  be a member of the Administrators group. In Vista/2008, the user
964 138 Nick Fagerlund
  must be running with elevated privileges.
965 138 Nick Fagerlund
* A file/dir can be deleted by anyone with the DELETE access right
966 138 Nick Fagerlund
  OR by anyone that has the FILE_DELETE_CHILD access right for the
967 138 Nick Fagerlund
  parent. See http://support.microsoft.com/kb/238018. But on Unix,
968 138 Nick Fagerlund
  the user must have write access to the file/dir AND execute access
969 138 Nick Fagerlund
  to all of the parent path components.
970 138 Nick Fagerlund
* Many access control entries are inherited from parent directories,
971 138 Nick Fagerlund
  and it is common for file/dirs to have more than 3 entries,
972 138 Nick Fagerlund
  e.g. Users, Power Users, Administrators, SYSTEM, etc, which cannot
973 138 Nick Fagerlund
  be mapped into the 3 class POSIX model. The get_mode method will
974 138 Nick Fagerlund
  set the S_IEXTRA bit flag indicating that an access control entry
975 138 Nick Fagerlund
  was found whose SID is neither the owner, group, or other. This
976 138 Nick Fagerlund
  enables Puppet to detect when file/dirs are out-of-sync,
977 138 Nick Fagerlund
  especially those that Puppet did not create, but is attempting
978 138 Nick Fagerlund
  to manage.
979 138 Nick Fagerlund
* On Unix, the owner and group can be modified without changing the
980 138 Nick Fagerlund
  mode. But on Windows, an access control entry specifies which SID
981 138 Nick Fagerlund
  it applies to. As a result, the set_owner and set_group methods
982 134 Michael Stahnke
  automatically rebuild the access control list based on the new
983 138 Nick Fagerlund
  (and different) owner or group.
984 134 Michael Stahnke
985 138 Nick Fagerlund
### Enhancement: Support plaintext password in Windows
986 138 Nick Fagerlund
987 138 Nick Fagerlund
(#9326) Support plaintext passwords in Windows 'user' provider.
988 134 Michael Stahnke
989 138 Nick Fagerlund
The Windows 'user' provider now includes password support, although passwords
990 134 Michael Stahnke
must be passed as plaintext instead of as hashes.
991 138 Nick Fagerlund
992 134 Michael Stahnke
### Enhancement: Return reports on ral save
993 138 Nick Fagerlund
994 138 Nick Fagerlund
(#9838) Return the transaction report when doing a ral save
995 138 Nick Fagerlund
996 138 Nick Fagerlund
When using puppet resource from the command line, using `puppet resource`
997 138 Nick Fagerlund
to do a save will log error messages to the console when
998 134 Michael Stahnke
saving using the ral indirection.  However, this doesn't help when using
999 138 Nick Fagerlund
that indirection in Ruby like you might from MCollective's puppetral
1000 138 Nick Fagerlund
agent.
1001 134 Michael Stahnke
1002 138 Nick Fagerlund
So we now return the transaction report you get from applying the
1003 138 Nick Fagerlund
catalog.
1004 138 Nick Fagerlund
1005 138 Nick Fagerlund
The only place we could find this indirection being used was in the
1006 138 Nick Fagerlund
`puppet resource` application, although it's possible that code external
1007 138 Nick Fagerlund
to puppet uses this indirection and will need to change what it expects
1008 138 Nick Fagerlund
for the return value of save.
1009 138 Nick Fagerlund
1010 138 Nick Fagerlund
## Bug Fixes
1011 138 Nick Fagerlund
1012 138 Nick Fagerlund
### Fix: Recognize more duplicate resources
1013 138 Nick Fagerlund
1014 138 Nick Fagerlund
(#8596) Title and name must be unique within a given resource
1015 138 Nick Fagerlund
1016 138 Nick Fagerlund
Puppet 2.6 introduced a bug where titles were no longer being compared to
1017 138 Nick Fagerlund
names when identifying duplicate resources. For example:
1018 138 Nick Fagerlund
1019 138 Nick Fagerlund
    file { '/tmp/foo':
1020 138 Nick Fagerlund
      ensure => file,
1021 138 Nick Fagerlund
    }
1022 151 Nick Fagerlund
1023 134 Michael Stahnke
    file { 'same_file':
1024 138 Nick Fagerlund
      path   => '/tmp/foo',
1025 134 Michael Stahnke
      ensure => absent,
1026 138 Nick Fagerlund
    }
1027 138 Nick Fagerlund
1028 138 Nick Fagerlund
This would work, but wasn't supposed to. It will now register as a duplicate, as intended.
1029 138 Nick Fagerlund
1030 138 Nick Fagerlund
### Fix: Allow multi-line exec resources
1031 1
1032 138 Nick Fagerlund
(#9996) Restore functionality for multi-line commands in exec resources
1033 138 Nick Fagerlund
1034 138 Nick Fagerlund
1035 151 Nick Fagerlund
### Fix: Eliminate warning on groupadd
1036 138 Nick Fagerlund
1037 138 Nick Fagerlund
(#9027) Get rid of spurious info messages in groupadd
1038 138 Nick Fagerlund
1039 138 Nick Fagerlund
Usage of the groupadd provider was leading to spurious log messages of
1040 138 Nick Fagerlund
this form:
1041 138 Nick Fagerlund
1042 138 Nick Fagerlund
    info: /Group[developer]: Provider groupadd does not support features
1043 138 Nick Fagerlund
    manages_aix_lam; not managing attribute ia_load_module
1044 138 Nick Fagerlund
1045 138 Nick Fagerlund
These messages have been eliminated. See also issue #7137, covering
1046 151 Nick Fagerlund
similar issues with the useradd provider.
1047 138 Nick Fagerlund
1048 138 Nick Fagerlund
### Fix: Remove unnecessary deprecation warning in puppet resource
1049 138 Nick Fagerlund
1050 138 Nick Fagerlund
(#9837) Call puppet apply to avoid deprecation warning
1051 138 Nick Fagerlund
1052 151 Nick Fagerlund
`puppet resource --edit` was causing unnecessary deprecation warnings similar to the following:
1053 138 Nick Fagerlund
1054 138 Nick Fagerlund
    warning: Implicit invocation of 'puppet apply' by passing files (or flags) directly
1055 138 Nick Fagerlund
    to 'puppet' is deprecated, and will be removed in the 2.8 series.  Please
1056 138 Nick Fagerlund
    invoke 'puppet apply' directly in the future.
1057 138 Nick Fagerlund
1058 151 Nick Fagerlund
These have been resolved.
1059 151 Nick Fagerlund
1060 138 Nick Fagerlund
### Fix: Resolve issues with Windows URIs
1061 151 Nick Fagerlund
1062 138 Nick Fagerlund
Previously, specifying a Windows file URI of the form 'file:///C:/foo'
1063 138 Nick Fagerlund
as a file source failed to strip the leading slash when attempting to
1064 134 Michael Stahnke
source the file. (Also, there was ambiguity after values were munged, since a
1065 138 Nick Fagerlund
value of the form 'C:/foo' could either be a Windows file path or a
1066 138 Nick Fagerlund
URI whose scheme is 'C'.)
1067 138 Nick Fagerlund
1068 138 Nick Fagerlund
This behavior has been fixed, and Windows file URIs can be used safely.
1069 138 Nick Fagerlund
1070 138 Nick Fagerlund
### Fix: Expose all functions in templates
1071 138 Nick Fagerlund
1072 138 Nick Fagerlund
(#4549) Fix templates to be able to call all functions
1073 138 Nick Fagerlund
1074 138 Nick Fagerlund
Only a small subset of Puppet functions were available on the scope in
1075 138 Nick Fagerlund
templates.  This had people doing workarounds like:
1076 138 Nick Fagerlund
1077 138 Nick Fagerlund
    inline_template("<%= Puppet::Parser::Functions.autoloader.loadall; scope.function_extlookup(['hello world']) %>")
1078 138 Nick Fagerlund
1079 138 Nick Fagerlund
These workarounds are no longer necessary, and templates can load any available
1080 134 Michael Stahnke
Puppet function.
1081 138 Nick Fagerlund
1082 134 Michael Stahnke
### Fix: Update pluginsync to only load ruby files.
1083 151 Nick Fagerlund
1084 138 Nick Fagerlund
(#4135) Update pluginsync to only load ruby files.
1085 138 Nick Fagerlund
1086 134 Michael Stahnke
Previously, puppet agent would attempt to load any file distributed via
1087 138 Nick Fagerlund
pluginsync as though it were Ruby code. This was causing errors by loading,
1088 138 Nick Fagerlund
for example, README files.
1089 138 Nick Fagerlund
1090 138 Nick Fagerlund
Pluginsync will still distribute any type of file, but puppet agent will no
1091 138 Nick Fagerlund
longer attempt to load non-Ruby files.
1092 138 Nick Fagerlund
1093 138 Nick Fagerlund
### Fix: Fix logging on Windows
1094 138 Nick Fagerlund
1095 138 Nick Fagerlund
(#9435) Gracefully handle when syslog feature is unavailable
1096 138 Nick Fagerlund
1097 138 Nick Fagerlund
Previously, Puppet would try to create a syslog log destination when run
1098 138 Nick Fagerlund
without a log destination, which would fail on Windows because the Syslog
1099 138 Nick Fagerlund
module was not available. Behavior when syslog isn't available has been fixed.
1100 138 Nick Fagerlund
1101 138 Nick Fagerlund
### Fix: Disable daemonizing on Windows
1102 138 Nick Fagerlund
1103 138 Nick Fagerlund
(#9329) Disable agent daemonizing on Windows
1104 138 Nick Fagerlund
1105 138 Nick Fagerlund
For this release, we will not be providing the
1106 138 Nick Fagerlund
code to run puppet agent as a service, though we have verified that
1107 138 Nick Fagerlund
puppet will run as a service using a third-party service wrapper,
1108 138 Nick Fagerlund
nssm.
1109 138 Nick Fagerlund
1110 138 Nick Fagerlund
Until support for running the agent as a service is complete, we have changed
1111 138 Nick Fagerlund
the default `daemonize` setting on Windows. Puppet will also report an error if
1112 134 Michael Stahnke
`daemonize` is set to true on Windows.
1113 134 Michael Stahnke
1114 138 Nick Fagerlund
1115 138 Nick Fagerlund
# 2.7.5
1116 134 Michael Stahnke
1117 151 Nick Fagerlund
Puppet 2.7.5 is a **security and regression fix** release in the 2.7.x branch.
1118 134 Michael Stahnke
1119 139 Nick Fagerlund
* See the 2.7.5 [announcement](http://groups.google.com/group/puppet-announce/t/5c363480686372e3) on puppet-announce
1120 1
* You can also see the general [security notice email](http://groups.google.com/group/puppet-announce/t/91e3b46d2328a1cb)
1121 139 Nick Fagerlund
1122 139 Nick Fagerlund
## Security Fixes
1123 139 Nick Fagerlund
1124 139 Nick Fagerlund
### Three security vulnerabilities
1125 139 Nick Fagerlund
1126 139 Nick Fagerlund
This release resolves the following security vulnerabilities:
1127 139 Nick Fagerlund
1128 139 Nick Fagerlund
* [CVE-2011-3869 -- k5login can overwrite arbitrary files as root][cve20113869]
1129 139 Nick Fagerlund
* [CVE-2011-3870 -- SSH auth key local privilege escalation][cve20113870]
1130 139 Nick Fagerlund
* [CVE-2011-3871 -- Predictable temporary filename in puppet resource/ralsh][cve20113871]
1131 139 Nick Fagerlund
1132 139 Nick Fagerlund
Follow the links above for details on each vulnerability.
1133 139 Nick Fagerlund
1134 139 Nick Fagerlund
[cve20113871]: http://puppetlabs.com/security/cve/cve-2011-3871/
1135 138 Nick Fagerlund
[cve20113870]: http://puppetlabs.com/security/cve/cve-2011-3870/
1136 138 Nick Fagerlund
[cve20113869]: http://puppetlabs.com/security/cve/cve-2011-3869/
1137 138 Nick Fagerlund
1138 138 Nick Fagerlund
## Bug Fixes
1139 138 Nick Fagerlund
1140 1
### Fix: storeconfigs regression from 2.7.4
1141 131 Michael Stahnke
1142 1
(#9832) General StoreConfigs regression.
1143 1
1144 131 Michael Stahnke
Some StoreConfigs exported and imported resources were not being
1145 1
found under PostgreSQL. This fix resolves the regression.
1146 1
1147 139 Nick Fagerlund
1148 131 Michael Stahnke
# 2.7.4
1149 1
1150 1
Puppet 2.7.4 is security and feature release in the 2.7.x branch.  Due to the security patches included, it is recommended anybody using the 2.7.x series update to 2.7.4.
1151 139 Nick Fagerlund
1152 131 Michael Stahnke
In addition to the security patch, this release adds functional Windows providers for several types, and makes changes to the storeconfigs indirection.
1153 139 Nick Fagerlund
1154 131 Michael Stahnke
## Security Fixes
1155 139 Nick Fagerlund
1156 131 Michael Stahnke
### CVE-2011-3848 (directory traversal attacks through indirections)
1157 139 Nick Fagerlund
1158 139 Nick Fagerlund
[cve20113848]: http://puppetlabs.com/security/cve/cve-2011-3848/
1159 132 Nick Fagerlund
1160 132 Nick Fagerlund
[(Full vulnerability details)][cve20113848]
1161 132 Nick Fagerlund
1162 132 Nick Fagerlund
In various versions of Puppet it was possible to cause a directory traversal
1163 131 Michael Stahnke
attack through the SSLFile indirection base class.  This was variously
1164 132 Nick Fagerlund
triggered through the user-supplied key, or the Subject of the certificate, in
1165 132 Nick Fagerlund
the code.
1166 132 Nick Fagerlund
1167 132 Nick Fagerlund
Now, we detect bad patterns down in the base class for our indirections, and
1168 126 Matthaus Litteken
fail hard on them.  This reduces the attack surface with as little disruption
1169 132 Nick Fagerlund
to the overall codebase as possible, making it suitable to deploy as part of
1170 132 Nick Fagerlund
older, stable versions of Puppet.
1171 1
1172 132 Nick Fagerlund
In the long term we will also address this higher up the stack, to prevent
1173 143 Nick Fagerlund
these problems from reoccurring, but for now this will suffice.
1174 143 Nick Fagerlund
1175 1
Huge thanks to Kristian Erik Hermansen <kristian.hermansen@gmail.com> for the
1176 132 Nick Fagerlund
responsible disclosure, and useful analysis, around this defect.
1177 1
1178 132 Nick Fagerlund
## Fixes and Enhancements
1179 1
1180 132 Nick Fagerlund
### Allow cron vars to have leading whitespace
1181 132 Nick Fagerlund
1182 132 Nick Fagerlund
Fix #9440
1183 132 Nick Fagerlund
1184 132 Nick Fagerlund
Patch applied from Jeremy Thornhill. This allows whitespace to appear before
1185 129 Matthaus Litteken
cron variables. Previously, whitespace before cron variables would trigger a
1186 132 Nick Fagerlund
parse failure, and the crontab, except for the puppet managed portion, would
1187 1
get removed. This addresses that issue. It also includes a test for this issue,
1188 132 Nick Fagerlund
added into the tests directory, which seems to be where the crontab tests live.
1189 1
1190 132 Nick Fagerlund
### Write out a list of resources that are managed by puppet agent
1191 132 Nick Fagerlund
1192 132 Nick Fagerlund
Feature #8667
1193 132 Nick Fagerlund
1194 132 Nick Fagerlund
Similar to how the Puppet classes are written out each catalog apply,
1195 1
the list of resources is now being written out to a text file that can
1196 132 Nick Fagerlund
be easily used by tools like MCollective.  This allows tools that do
1197 125 Matthaus Litteken
ad-hoc management of resources to know if they're changing a resource
1198 132 Nick Fagerlund
that puppet manages, and adjust behavior accordingly.
1199 125 Matthaus Litteken
1200 132 Nick Fagerlund
### Fix value validation on options
1201 132 Nick Fagerlund
1202 132 Nick Fagerlund
Fix #7114
1203 132 Nick Fagerlund
1204 125 Matthaus Litteken
Support single options that legally include a comma like
1205 132 Nick Fagerlund
"from=host1,host2". We now basically allow either "word" or "key=value"
1206 125 Matthaus Litteken
as options. That's also what the parsedfile provider currently supports
1207 132 Nick Fagerlund
when parsing options.
1208 125 Matthaus Litteken
1209 132 Nick Fagerlund
### GigabitEthernet/TenGigabitEthernet are uncorrectly parsed
1210 132 Nick Fagerlund
1211 132 Nick Fagerlund
Fix #7984
1212 125 Matthaus Litteken
1213 132 Nick Fagerlund
The interface name abbreviation to canonical name doesn't return
1214 125 Matthaus Litteken
the correct name for GigabitEthernet and doesn't support TenGigabitEthernet
1215 132 Nick Fagerlund
interfaces.
1216 125 Matthaus Litteken
1217 132 Nick Fagerlund
### Allow macauthorization provider to work on OS X Lion 10.7
1218 132 Nick Fagerlund
1219 132 Nick Fagerlund
Fix #9143
1220 123 Matthaus Litteken
1221 123 Matthaus Litteken
We've flipped around the confine check so we explicitly exclude the
1222 132 Nick Fagerlund
versions of OS X where this provider won't work, rather than working
1223 123 Matthaus Litteken
from a whitelist.
1224 132 Nick Fagerlund
1225 123 Matthaus Litteken
1226 132 Nick Fagerlund
### Move complex collect expression error into terminus.
1227 132 Nick Fagerlund
1228 132 Nick Fagerlund
Fix #9051
1229 123 Matthaus Litteken
1230 132 Nick Fagerlund
When the StoreConfig system was extracted from core to a set of termini, most
1231 132 Nick Fagerlund
of the rules about permitted syntax were pushed down into the same place, to
1232 132 Nick Fagerlund
allow them to also be replaced.
1233 123 Matthaus Litteken
1234 132 Nick Fagerlund
One set of restrictions were missed, the limitation that complex search
1235 132 Nick Fagerlund
criteria (like and, or, or parenthetical expressions) were not permitted, and
1236 132 Nick Fagerlund
remained in our parser.
1237 123 Matthaus Litteken
1238 132 Nick Fagerlund
Now, they live in the terminus, and we enforce them only there.  This ensures
1239 123 Matthaus Litteken
that StoreConfigs can be replaced with a back-end that supports complex
1240 132 Nick Fagerlund
collection criteria without other changes to the Puppet core.
1241 123 Matthaus Litteken
1242 132 Nick Fagerlund
### Don't rely on error message to detect UAC capable platform
1243 132 Nick Fagerlund
1244 132 Nick Fagerlund
Fix #8662
1245 132 Nick Fagerlund
1246 132 Nick Fagerlund
The call to Win32::Security.elevated_privileges? can raise an
1247 132 Nick Fagerlund
exception when running on a pre-Vista computer or if the process fails
1248 1
to open its process token.
1249 132 Nick Fagerlund
1250 132 Nick Fagerlund
Previously, we were looking at the exception message to determine
1251 132 Nick Fagerlund
which case it was. However, Windows 2003 and 2003 R2 return different
1252 1
error codes (and therefore messages) for the pre-Vista case. In 2003,
1253 132 Nick Fagerlund
it returns error code 1 (Incorrect function), but in 2003 R2 it
1254 132 Nick Fagerlund
returns 87 (The parameter is incorrect). Since SUIDManager was only
1255 132 Nick Fagerlund
looking for Incorrect function, SUIDManager.root? would always return
1256 132 Nick Fagerlund
false on 2003 R2.
1257 132 Nick Fagerlund
1258 132 Nick Fagerlund
Ideally, we could just check if the GetTokenInformation Win32 API was
1259 132 Nick Fagerlund
available, and only call it on platforms where it makes sense. But
1260 132 Nick Fagerlund
this API is available on all recent version of Windows. What's new in
1261 132 Nick Fagerlund
Vista and up is the TokenElevation value of the
1262 132 Nick Fagerlund
`TOKEN_INFORMATION_CLASS` enumeration.
1263 132 Nick Fagerlund
1264 132 Nick Fagerlund
This commit changes the suidmanager to only call GetTokenInformation
1265 132 Nick Fagerlund
when the major kernel version, as reported by facter, is 6.0 or
1266 132 Nick Fagerlund
greater, which corresponds to Vista/2008. See:
1267 132 Nick Fagerlund
1268 132 Nick Fagerlund
<http://msdn.microsoft.com/en-us/library/ms724833(v=vs.85).aspx>
1269 132 Nick Fagerlund
1270 132 Nick Fagerlund
### Add MSI package provider for use with Windows
1271 132 Nick Fagerlund
1272 151 Nick Fagerlund
Feature #8412
1273 132 Nick Fagerlund
1274 132 Nick Fagerlund
This provider takes some of its inspiration from the appdmg provider
1275 132 Nick Fagerlund
used with OS X.  It will maintain a list of packages that have been
1276 132 Nick Fagerlund
installed and removed from the system via the provider in a directory
1277 132 Nick Fagerlund
under Puppet's vardir called db/package/msi.  These state files will
1278 132 Nick Fagerlund
be named the same as the resource name with '.yml' appended.  The
1279 1
state files will be a hash containing the resource name, the install
1280 132 Nick Fagerlund
options used, and the source location of the MSI.
1281 1
1282 132 Nick Fagerlund
Any properties that a user wishes to provide to the MSI can be
1283 1
specified as key/value pairs in the install_options parameter.  For
1284 132 Nick Fagerlund
example:
1285 1
1286 1
    package { 'mysql':
1287 132 Nick Fagerlund
      provider => msi,
1288 132 Nick Fagerlund
      source => 'E:\mysql.msi',
1289 132 Nick Fagerlund
      ensure => installed,
1290 132 Nick Fagerlund
      install_options => { 'INSTALLDIR' => 'C:\mysql' },
1291 132 Nick Fagerlund
    }
1292 132 Nick Fagerlund
1293 132 Nick Fagerlund
The MSI properties specified by install_options will be appropriately
1294 132 Nick Fagerlund
quoted when invoking msiexec.exe to install the MSI.
1295 132 Nick Fagerlund
1296 132 Nick Fagerlund
Because the source parameter is integral to the functionality of being
1297 1
able to install and uninstall MSI packages, we also override
1298 132 Nick Fagerlund
validate_source to make sure that the source parameter is always set,
1299 132 Nick Fagerlund
and is not an empty string when using this provider.
1300 132 Nick Fagerlund
1301 132 Nick Fagerlund
### Add a Windows exec provider
1302 132 Nick Fagerlund
1303 132 Nick Fagerlund
Feature #8140
1304 132 Nick Fagerlund
1305 132 Nick Fagerlund
This provider inherits from the `Puppet::Provider::Exec` class, and is
1306 132 Nick Fagerlund
very similar to the posix provider in its behavior. This provider
1307 132 Nick Fagerlund
doesn't have the ability to run as a particular user or group and will
1308 132 Nick Fagerlund
fail if that is attempted, but does support setting all other
1309 132 Nick Fagerlund
parameters, as well as autorequires.
1310 132 Nick Fagerlund
1311 1
Rather than the shell provider inheriting from the posix provider, they
1312 132 Nick Fagerlund
both now inherit from a common `Puppet::Provider::Exec` class. This new
1313 132 Nick Fagerlund
base class and inheritance structure will allow the forthcoming windows
1314 132 Nick Fagerlund
provider to also inherit from that class, rather than from the
1315 132 Nick Fagerlund
unsuitable posix provider.
1316 132 Nick Fagerlund
1317 132 Nick Fagerlund
Also, now that Puppet::Util.execute supports commands as strings in
1318 132 Nick Fagerlund
addition to arrays, the command to execute is passed to
1319 132 Nick Fagerlund
`Puppet::Util::SUIDManager.run_and_capture` as a string, rather than a
1320 132 Nick Fagerlund
string wrapped in an array. This ensures we will never improperly quote
1321 132 Nick Fagerlund
a command with arguments provided as a single string.
1322 132 Nick Fagerlund
1323 132 Nick Fagerlund
### Default config dir to %PROGRAMDATA% on Windows
1324 132 Nick Fagerlund
1325 132 Nick Fagerlund
Fix #8660
1326 132 Nick Fagerlund
1327 132 Nick Fagerlund
The puppet install.rb script now defaults the config directory to
1328 132 Nick Fagerlund
%PROGRAMDATA%\PuppetLabs\puppet\etc on Windows. This is more inline
1329 132 Nick Fagerlund
with Windows best-practices, as this directory is used to store
1330 132 Nick Fagerlund
application data across all users. The PROGRAMDATA environment
1331 132 Nick Fagerlund
variable also takes into account alternate system drives, by using the
1332 132 Nick Fagerlund
SYSTEMDRIVE environment variable.
1333 132 Nick Fagerlund
1334 132 Nick Fagerlund
Note that the `Dir::COMMON_APPDATA` constant is so named because it
1335 132 Nick Fagerlund
corresponds to the `CSIDL_COMMON_APPDATA` constant, which on 2000, XP,
1336 132 Nick Fagerlund
and 2003 is `%ALLUSERSPROFILE%\Application Data`, and on Vista, Win7 and
1337 132 Nick Fagerlund
2008 is `%SYSTEMDRIVE%\ProgramData`.
1338 132 Nick Fagerlund
1339 132 Nick Fagerlund
This commit also updates puppet's default run_mode var and conf
1340 132 Nick Fagerlund
directories when running as "root" to match the install script, and
1341 132 Nick Fagerlund
fixes the spec test, which was looking in the `Dir::WINDOWS` directory.
1342 132 Nick Fagerlund
1343 132 Nick Fagerlund
1344 132 Nick Fagerlund
1345 132 Nick Fagerlund
1346 132 Nick Fagerlund
# 2.7.3
1347 132 Nick Fagerlund
1348 132 Nick Fagerlund
2.7.3 is a maintenance and enhancement release in the 2.7.x branch.
1349 132 Nick Fagerlund
1350 132 Nick Fagerlund
### Add Node Clean action
1351 117 Michael Stahnke
1352 117 Michael Stahnke
Fix #1886 - Add node cleanup capability
1353 132 Nick Fagerlund
1354 117 Michael Stahnke
This adds a new "clean" action to the puppet node face, which removes all traces of a node on the puppetmaster
1355 132 Nick Fagerlund
(including certs, cached facts and nodes, reports, and storedconfig
1356 132 Nick Fagerlund
entries).
1357 132 Nick Fagerlund
1358 132 Nick Fagerlund
Furthermore, it is capable of unexporting exported resources of a
1359 132 Nick Fagerlund
host so that consumers of these resources can remove the exported
1360 132 Nick Fagerlund
resources and we will safely remove the node from our
1361 132 Nick Fagerlund
infrastructure.
1362 132 Nick Fagerlund
1363 132 Nick Fagerlund
Usage:
1364 132 Nick Fagerlund
1365 132 Nick Fagerlund
    puppet node clean [--unexport] <host> [<host2> ...]
1366 1
1367 132 Nick Fagerlund
To achieve this we add different destroy methods to the different
1368 132 Nick Fagerlund
parts of the indirector. So for example for yaml indirections we
1369 132 Nick Fagerlund
already offer read access for the yaml, this changeset adds
1370 132 Nick Fagerlund
the destroy handler which only removes the yaml file for
1371 117 Michael Stahnke
a request. This can be used to remove cached entries.
1372 117 Michael Stahnke
1373 132 Nick Fagerlund
### Deprecate RestAuthConfig#allowed? in favor of #check_authorization
1374 132 Nick Fagerlund
1375 132 Nick Fagerlund
 #allowed? was a poorly named method since it isn't actually a predicate
1376 132 Nick Fagerlund
method. Instead of returning a boolean, this methods throws an
1377 132 Nick Fagerlund
exception when the access is denied (in order to keep the full context
1378 117 Michael Stahnke
of what ACE triggered the deny).
1379 132 Nick Fagerlund
1380 117 Michael Stahnke
Given that #allowed? was overriding the behavior from AuthConfig, we
1381 132 Nick Fagerlund
leave a version of #allowed? in place that will issue a deprecation
1382 1
warning before delegating to #check_authorization.  Once support for
1383 132 Nick Fagerlund
XML-RPC agents is removed from the master, we will be able to remove
1384 132 Nick Fagerlund
this delegation, since there should no longer be a reason for a
1385 132 Nick Fagerlund
distinction between AuthConfig and RestAuthConfig.
1386 117 Michael Stahnke
1387 132 Nick Fagerlund
1388 132 Nick Fagerlund
### #6026 - security file should support inline comments
1389 132 Nick Fagerlund
1390 132 Nick Fagerlund
Auth.conf, namespaceauth.conf and fileserver.conf were not supporting
1391 132 Nick Fagerlund
trailing inlined comments.
1392 132 Nick Fagerlund
Also this commit fixes some indentation and error management.
1393 1
1394 117 Michael Stahnke
1395 132 Nick Fagerlund
### Suggest where to start troubleshooting SSL error message
1396 132 Nick Fagerlund
1397 132 Nick Fagerlund
Much like the infamous "hostname was not match" error message, there is
1398 132 Nick Fagerlund
another SSL error that people run into that is not clear how to
1399 132 Nick Fagerlund
troubleshoot.
1400 132 Nick Fagerlund
1401 132 Nick Fagerlund
    err: Could not send report: SSL_connect returned=1 errno=0
1402 132 Nick Fagerlund
    state=SSLv3 read server certificate B: certificate verify failed.
1403 132 Nick Fagerlund
1404 132 Nick Fagerlund
As far as I can tell this only ever happens when the clock is off on the
1405 132 Nick Fagerlund
master or client.  People seem to think it will happen other times, but
1406 132 Nick Fagerlund
I have not been able to reproduce it other ways - missing private key,
1407 132 Nick Fagerlund
revoked cert, offline CA all have their own errors.  I googled around
1408 132 Nick Fagerlund
and the only thing I've seen for this error in relation to puppet is the
1409 132 Nick Fagerlund
time sync problem.
1410 132 Nick Fagerlund
1411 132 Nick Fagerlund
So the error message text just has some additional info to suggest you
1412 132 Nick Fagerlund
check your clocks.
1413 132 Nick Fagerlund
1414 132 Nick Fagerlund
1415 132 Nick Fagerlund
### #8596 Detect resource alias conflicts when titles do not match
1416 132 Nick Fagerlund
1417 132 Nick Fagerlund
The introduction of composite namevars caused the resource title used in
1418 132 Nick Fagerlund
resource aliases to be set as an array, even when the resource only had one
1419 132 Nick Fagerlund
namevar. This would fail to conflict with non-alias entries in the resource
1420 132 Nick Fagerlund
table, which used a string for the title, even though the single element array
1421 132 Nick Fagerlund
contained the same string.
1422 132 Nick Fagerlund
1423 132 Nick Fagerlund
Now, we flatten the key used in the resource table, so that single element
1424 132 Nick Fagerlund
arrays are represented as strings, and will properly conflict with resource
1425 132 Nick Fagerlund
titles.
1426 132 Nick Fagerlund
1427 132 Nick Fagerlund
1428 132 Nick Fagerlund
### maint: Adding logging to include environment when source fails
1429 132 Nick Fagerlund
1430 132 Nick Fagerlund
### maint: Add debug logging when the master receives a report
1431 132 Nick Fagerlund
1432 132 Nick Fagerlund
It's always bothered me that when running puppet inspect (or any
1433 132 Nick Fagerlund
application that produces a report really) the master gives no
1434 132 Nick Fagerlund
indication that anything happened when it processes the report.
1435 132 Nick Fagerlund
1436 132 Nick Fagerlund
### #6789 Port SSL::CertificateAuthority::Interface to a Face
1437 132 Nick Fagerlund
1438 132 Nick Fagerlund
The Puppet::SSL::CertificateAuthority::Interface class was an early prototype
1439 132 Nick Fagerlund
heading toward building out a system like Faces.  Now that we have done that,
1440 132 Nick Fagerlund
this changeset ports the early code to a new face.
1441 132 Nick Fagerlund
1442 132 Nick Fagerlund
### #8401 Document that --detailed-exitcodes is a bitmask
1443 132 Nick Fagerlund
1444 132 Nick Fagerlund
The agent/apply/device man pages mentioned the 2 and 4 exit codes, but didn't
1445 132 Nick Fagerlund
mention that they can combine to make 6 if there are both changes and failures.
1446 132 Nick Fagerlund
This commit adds the missing information to all three man pages.
1447 132 Nick Fagerlund
1448 132 Nick Fagerlund
### #4142 Fix module check not to fail when empty metadata.json
1449 1
1450 132 Nick Fagerlund
Even though the puppet module tool was fixed to generate the required
1451 132 Nick Fagerlund
metadata attributes when it packages modules, it still creates an empty
1452 132 Nick Fagerlund
metadata.json file that gets checked into everybody's module repos.
1453 1
This causes the module to be unusable straight from a git clone since
1454 132 Nick Fagerlund
puppet was requiring all the required metadata attributes just with the
1455 1
presence of that file, and resulting in the error:
1456 132 Nick Fagerlund
1457 132 Nick Fagerlund
    No source module metadata provided for mcollective at
1458 132 Nick Fagerlund
1459 1
This change makes it so that if you have an empty metadata.json (like
1460 132 Nick Fagerlund
the moduletool generates), puppet doesn't consider it to have metadata.
1461 132 Nick Fagerlund
If you have ANY metadata attributes in that file, it will still check to
1462 132 Nick Fagerlund
make sure all the required attributes are present.
1463 132 Nick Fagerlund
1464 132 Nick Fagerlund
The work around up to this point has just been to delete the
1465 132 Nick Fagerlund
metadata.json file in git cloned modules.
1466 1
1467 132 Nick Fagerlund
This also fixed the tests around this to actually run, since previously
1468 132 Nick Fagerlund
the tests depended on the a json feature, which we didn't have.  We do,
1469 1
however, have a pson feature.
1470 132 Nick Fagerlund
1471 132 Nick Fagerlund
### #8147 Change default reporturl to match newer Dashboard versions
1472 132 Nick Fagerlund
1473 132 Nick Fagerlund
Puppet's default reporturl setting was http://localhost:3000/reports, which has
1474 132 Nick Fagerlund
been deprecated in Puppet Dashboard in favor of
1475 1
http://localhost:3000/reports/upload. As Dashboard is the first-class
1476 132 Nick Fagerlund
destination for the http report processor, this commit changes Puppet's default
1477 132 Nick Fagerlund
to match what current versions of Dashboard expect.
1478 132 Nick Fagerlund
1479 132 Nick Fagerlund
### #6857 Password disclosure when changing a user's password
1480 1
1481 132 Nick Fagerlund
Make the should_to_s and is_to_s functions to return a form of 'redacted'.
1482 132 Nick Fagerlund
1483 1
Rather than send the password hash to system logs in cases of failure or
1484 132 Nick Fagerlund
running in --noop mode, just state whether it's the new or old hash. We're
1485 132 Nick Fagerlund
already doing this with password changes that work, so this just brings it
1486 132 Nick Fagerlund
inline with those, albeit via a slightly different pair of methods.
1487 132 Nick Fagerlund
1488 132 Nick Fagerlund
### Additional Notes
1489 132 Nick Fagerlund
1490 151 Nick Fagerlund
* Several odd behaviors seen in 2.7.2rc2 should now meet expectations.
1491 1
* 8ec0804 #8301 Red Hat spec file for 2.7.2rc1 won't work
1492 132 Nick Fagerlund
* 2263be6 #5108 Update service type docs for new hasstatus default
1493 132 Nick Fagerlund
1494 151 Nick Fagerlund
This merges up all changes in the 2.6.9 release that were unable to be merged into 2.7.{0,1} due to 2.7 being frozen in release candidate state.
1495 132 Nick Fagerlund
1496 132 Nick Fagerlund
Highlights include:
1497 132 Nick Fagerlund
1498 132 Nick Fagerlund
* 99330fa (#7224) Reword 'hostname was not match' error message
1499 132 Nick Fagerlund
* 1d867b0 (#7224) Add a helper to Puppet::SSL::Certificate to retrieve alternate names
1500 1
* db1a392 (#7506) Organize READMEs; specify supported Ruby versions in README.md
1501 132 Nick Fagerlund
* 98ba407 (#7127) Stop puppet if a prerun command fails
1502 132 Nick Fagerlund
* caca469 (#4416) Ensure types are providified after reloading
1503 132 Nick Fagerlund
* 413b136 (#4416) Always remove old provider before recreating it
1504 132 Nick Fagerlund
* 98f58ce (#2128) Add WARNING for node_name_{fact,value} descriptions
1505 132 Nick Fagerlund
* 3f0dbb5 (#650) Allow symlinks for configuration directories
1506 132 Nick Fagerlund
* 1c70f0c (#2128) Add support for setting node name based on a fact
1507 117 Michael Stahnke
* c629958 (#2128) Get facts before retrieving catalog
1508 117 Michael Stahnke
* 8eb0e16 (#2728) Add diff output for changes made by Augeas provider
1509 118 Michael Stahnke
* c02126d (#5966) Add support for hostname regular expressions in auth.conf
1510 117 Michael Stahnke
* 75e2764 (#5318) Always notice changes to manifests when compiling.
1511 117 Michael Stahnke
* 0bcbca5 maint: Dedup the loadpath so we don't have to walk it multiple times
1512 1
* 89d447b (#6962) Add "arguments" method to help API
1513 1
* 8eea3f5 Added the vcsrepo type and providers to the core
1514 1
* 107b38a maint: Fix pacman provider to work with Ruby 1.9
1515 117 Michael Stahnke
* 0b8ebac (#7300) Fix instances method of mount provider
1516 113 Michael Stahnke
1517 121 Michael Stahnke
# 2.7.2
1518 121 Michael Stahnke
1519 121 Michael Stahnke
2.7.2 was slain in the Thunderdome by 2.7.3.
1520 121 Michael Stahnke
1521 151 Nick Fagerlund
# 2.7.1
1522 109 Michael Stahnke
1523 151 Nick Fagerlund
2.7.1 is a bug fix release in the 2.7.x branch.
1524 109 Michael Stahnke
1525 151 Nick Fagerlund
Fixing bug #8048.  This made users of Puppet as a gem unable to install Puppet 2.7.0 release if gem was configured to use rdoc, as rdoc failed to parse on one file.
1526 142 Nick Fagerlund
1527 151 Nick Fagerlund
This issue only impacted users of Puppet as a gem.
1528 151 Nick Fagerlund
1529 111 Michael Stahnke
# 2.7.0
1530 111 Michael Stahnke
1531 111 Michael Stahnke
1532 111 Michael Stahnke
2.7.0 is a new feature release of Puppet.
1533 111 Michael Stahnke
1534 111 Michael Stahnke
Notable Features and Bug Fixes
1535 111 Michael Stahnke
------------------------------
1536 111 Michael Stahnke
1537 111 Michael Stahnke
### Apache License
1538 1
1539 151 Nick Fagerlund
Puppet is now released under the Apache 2.0 license. More info is available [here](http://docs.puppetlabs.com/guides/faq#change-to-apache-license).
1540 111 Michael Stahnke
1541 109 Michael Stahnke
### Ruby 1.9 Support
1542 109 Michael Stahnke
1543 109 Michael Stahnke
There are some known issues with the 2.7.0 release, but we now support Ruby 1.9.2 and higher, and will be aggressively fixing bugs under Ruby 1.9.
1544 109 Michael Stahnke
1545 109 Michael Stahnke
### Deterministic Catalog Application
1546 109 Michael Stahnke
1547 1
Previously, Puppet didn't guarantee that it would apply unrelated resources in any particular order. This meant that if you forgot to specify some important `before` or `require` relationship, a single catalog might work fine on eight nodes and then fail mysteriously on the ninth and tenth. This could be frustrating! Now it's gone: Puppet will make sure that the same catalog will always be applied in the same order on every machine, and it'll either succeed reliably or fail reliably. (This change will also be appearing in the final 2.6.x releases.)
1548 121 Michael Stahnke
1549 108 Michael Stahnke
(See issue #6911.)
1550 108 Michael Stahnke
1551 108 Michael Stahnke
### Manage Network Devices
1552 108 Michael Stahnke
1553 151 Nick Fagerlund
Based on an open-space discussion that happened at PuppetCamp EU in May, 2010, Brice Figureau has implemented the start of a network management solution.
1554 108 Michael Stahnke
1555 101 Michael Stahnke
Currently this initial solution has a base network type/provider and providers for managing Cisco interfaces and vlans. The puppet provider connects to remote switches and routers through either ssh or telnet.
1556 105 Michael Stahnke
1557 105 Michael Stahnke
To manage an interface:
1558 101 Michael Stahnke
1559 103 Michael Stahnke
    interface { "FastEthernet 0/1":
1560 101 Michael Stahnke
      device_url          => "ssh://user:pass@cisco2960.domain.com/",
1561 103 Michael Stahnke
      mode                => trunk,
1562 103 Michael Stahnke
      encapsulation       => dot1q,
1563 98 Michael Stahnke
      trunk_allowed_vlans => "1-99,200,253",
1564 103 Michael Stahnke
      description         => "to back bone router"
1565 1
    }
1566 103 Michael Stahnke
1567 1
or
1568 103 Michael Stahnke
1569 1
    interface { "Vlan 1":
1570 103 Michael Stahnke
      device_url  => "ssh://user:pass@router.domain.com/",
1571 1
      description => "internal net",
1572 103 Michael Stahnke
      ipaddress   => [ "192.168.0.1/24", "fe08::/128 link-local"]
1573 1
    }
1574 103 Michael Stahnke
1575 1
And to manage vlans:
1576 1
1577 103 Michael Stahnke
    vlan { "99":
1578 1
	  description => "management",
1579 103 Michael Stahnke
      device_url  => "ssh://user:pass@cisco2960.domain.com/",
1580 1
    }
1581 103 Michael Stahnke
1582 1
A current limitation is that it isn't possible to have 2 switches with the same interface name.
1583 103 Michael Stahnke
1584 1
### Dependency cycle reporting
1585 103 Michael Stahnke
1586 103 Michael Stahnke
We have significantly improved dependency cycle reporting so that the cycle is clearly identifiable, and will produce graphs of such cycles for easier debugging.  Error messages will now appear as follows:
1587 103 Michael Stahnke
1588 1
    Found 2 dependency cycles: (Notify[a] => Notify[b] => Notify[a]) (Notify[mp2-2] => Notify[mp2] => Notify[mp2-2])
1589 103 Michael Stahnke
1590 103 Michael Stahnke
### Man Pages
1591 103 Michael Stahnke
1592 90 Nigel Kersten
We've spiffed up our man pages. Static man files are in the `man/` directory of the source, and should be installed for you if you installed Puppet with your OS's packaging system. We've also introduced a `puppet man` subcommand that can render man pages on the fly using [ronn](https://github.com/rtomayko/ronn/). (We recommend running `gem install ronn` before using it; if it isn't installed, puppet man will just print a human-readable version of the man page source text.)
1593 1
1594 90 Nigel Kersten
### Deprecations
1595 103 Michael Stahnke
1596 103 Michael Stahnke
We're starting the hourglass on a few older features:
1597 103 Michael Stahnke
1598 103 Michael Stahnke
* **'puppet' as a synonym for 'puppet apply'** --- Starting today, running `puppet my-manifest.pp` will issue a warning; you should start using `puppet apply` directly instead. Support for implicit invocation of puppet apply will be dropped in Puppet 2.8.
1599 90 Nigel Kersten
* **Dynamic scope** --- We've started issuing warnings when variables or resource defaults are found via dynamic lookup. [There's more info and explanation in a guide on the docs site](http://docs.puppetlabs.com/guides/scope_and_puppet.html), but the short version is that you should start referencing variables with their qualified names instead of counting on dynamic scope. We hope to drop support for dynamic scope in Puppet 2.8. (Issue #5027)
1600 103 Michael Stahnke
* **No more `--parseonly` option** --- This one's already gone, because we used Faces to build a drop-in replacement: use `puppet parser validate [<manifest>] [<manifest> ...]` instead.
1601 103 Michael Stahnke
1602 103 Michael Stahnke
### Notice Changed Manifests on the First Try
1603 103 Michael Stahnke
1604 103 Michael Stahnke
During the 2.6.x series, puppet agent would sometimes require two runs to receive new configurations when puppet master was running under Passenger. This persistent bug has been dealt with. (This change will also be appearing in the final 2.6.x releases.)
1605 91 James Turnbull
1606 91 James Turnbull
### Static Compiler
1607 103 Michael Stahnke
1608 151 Nick Fagerlund
We've introduced `static_compiler`, a new `catalog_terminus` which can be configured in puppet.conf on your puppet master. (See issue #6873.) The static compiler works by wrapping the default compiler terminus and replacing every `puppet:///` URL in the catalog it returns with an MD5 reference to a filebucket object; this saves a lot of describe calls while the agent is running, and it ensures that the agent won't grab inconsistent file versions if one of the source files changes while it's running.
1609 103 Michael Stahnke
1610 103 Michael Stahnke
There are some known issues that keep it from being used as-is, yet --- you have to manually sync the agent's filebucket to that of the master, the compiler's behavior around recursion hasn't been rigorously tested, we haven't specified how it should behave if your puppet master is serving files through a load balancer, and files are read into memory rather than being streamed. However, this new approach has the potential to drastically speed up file-heavy Puppet runs, and if your site serves a lot of files and you have some lab time to test it, it could be worth a look.
1611 91 James Turnbull
1612 91 James Turnbull
### Improved APIs
1613 103 Michael Stahnke
1614 91 James Turnbull
You can now [manage and sign certificates via Puppet's REST API](http://docs.puppetlabs.com/guides/rest_api.html#certificate-status), which means that in the near future you'll be able to check off signing requests for new nodes right from Puppet Dashboard. (And someone can now easily write an iPhone or Android app to fetch and handle CSRs, hint hint. :) )
1615 103 Michael Stahnke
1616 1
### Services Are Assumed to Have Status Commands
1617 103 Michael Stahnke
1618 91 James Turnbull
Per issue #5108, the service type's `hasstatus` attribute now defaults to true, which means init scripts are expected to have working status commands. **This is a potentially incompatible change.** If you use an OS where broken status commands are still the norm, you may need to add the following resource default to your `site.pp` manifest:
1619 119 Nick Fagerlund
1620 103 Michael Stahnke
    Service {
1621 91 James Turnbull
      hasstatus => false,
1622 103 Michael Stahnke
    }
1623 91 James Turnbull
1624 151 Nick Fagerlund
This will effectively restore the old behavior.
1625 90 Nigel Kersten
1626 103 Michael Stahnke
### Default ACL improvements
1627 90 Nigel Kersten
1628 90 Nigel Kersten
We have adjusted the default ACL in the puppet master to allow a node to query configuration information about itself from the internal or external node classifier.
1629 103 Michael Stahnke
1630 1
### pkgutil Provider
1631 90 Nigel Kersten
1632 151 Nick Fagerlund
`pkgutil` provider support has been significantly improved, resolving issue #4258.
1633 90 Nigel Kersten
1634 1
1635 103 Michael Stahnke
### Puppet Faces
1636 90 Nigel Kersten
1637 151 Nick Fagerlund
Faces is a new API for creating new Puppet subcommands. Faces dramatically simplifies the process of extending Puppet by building new capabilities, including additional nouns and verbs that can be called by issuing commands from your command line interface.
1638 112 Nick Fagerlund
1639 1
We're particularly excited about Faces and the opportunities it offers for our user base.
1640 1
You can see how easy it is to create a subcommand and action with our [new manifest validator](https://github.com/puppetlabs/puppet/blob/master/lib/puppet/face/parser.rb)
1641 112 Nick Fagerlund
1642 1
This provides a new subcommand and a single action as follows:
1643 112 Nick Fagerlund
1644 112 Nick Fagerlund
`puppet parser validate <mymanifest.pp>`
1645 112 Nick Fagerlund
1646 112 Nick Fagerlund
It's also easy to create new actions for existing subcommands, which is a great way to extend the Puppet model, and it's also become significantly easier to access Puppet subsystems as shown by the [configurer subcommand](https://github.com/puppetlabs/puppet/blob/master/lib/puppet/face/configurer.rb):
1647 112 Nick Fagerlund
1648 112 Nick Fagerlund
This shows how easy it is to access these subcommands and actions in Ruby code:
1649 112 Nick Fagerlund
1650 103 Michael Stahnke
      facts = Puppet::Face[:facts, '0.0.1'].find(certname)
1651 103 Michael Stahnke
      catalog = Puppet::Face[:catalog, '0.0.1'].download(certname, facts)
1652 103 Michael Stahnke
      report = Puppet::Face[:catalog, '0.0.1'].apply(catalog)
1653 103 Michael Stahnke
1654 103 Michael Stahnke
That small amount of code offers this on the command line:
1655 103 Michael Stahnke
1656 103 Michael Stahnke
    $ puppet configurer synchronize
1657 103 Michael Stahnke
1658 103 Michael Stahnke
which accomplishes basically the same functionality as 'puppet agent --test', but is much simpler to rearrange and modify for your own needs.
1659 90 Nigel Kersten
1660 90 Nigel Kersten
We look forward to seeing what the community comes up with now that it is so easy to interact with and extend the underlying model.
1661 90 Nigel Kersten
1662 90 Nigel Kersten
1663 151 Nick Fagerlund
To get a look at the new subcommands, start by running `puppet help`. To see the API in action, look at the source for the [secret_agent](https://github.com/puppetlabs/puppet/blob/2.7.x/lib/puppet/face/secret_agent.rb) and [parser](https://github.com/puppetlabs/puppet/blob/2.7.x/lib/puppet/face/parser.rb) faces.
1664 90 Nigel Kersten
1665 90 Nigel Kersten
### Certificate API
1666 90 Nigel Kersten
1667 90 Nigel Kersten
Read or alter the status of a certificate or pending certificate request. This endpoint is roughly equivalent to the puppet cert command; rather than returning complete certificates, signing requests, or revocation lists, this endpoint returns information about the various certificates (and potential and former certificates) known to the CA.
1668 94 James Turnbull
1669 94 James Turnbull
    GET /{environment}/certificate_status/{certname}
1670 94 James Turnbull
1671 94 James Turnbull
Retrieve a PSON hash containing information about the specified host’s certificate. Similar to puppet cert --list {certname}.
1672 94 James Turnbull
1673 94 James Turnbull
    GET /{environment}/certificate_statuses/no_key
1674 94 James Turnbull
1675 94 James Turnbull
Retrieve a list of PSON hashes containing information about all known certificates. Similar to puppet cert --list --all.
1676 94 James Turnbull
1677 94 James Turnbull
    PUT /{environment}/certificate_status/{certname}
1678 94 James Turnbull
1679 94 James Turnbull
Change the status of the specified host’s certificate. The desired state is sent in the body of the PUT request as a one-item PSON hash; the two allowed complete hashes are {"desired_state":"signed"} (for signing a certificate signing request; similar to puppet cert --sign) and {"desired_state":"revoked"} (for revoking a certificate; similar to puppet cert --revoke); see examples below for details.
1680 94 James Turnbull
1681 94 James Turnbull
When revoking certificates, you may wish to use a DELETE request instead, which will also clean up other info about the host.
1682 103 Michael Stahnke
1683 94 James Turnbull
    DELETE /{environment}/certificate_status/{hostname}
1684 94 James Turnbull
1685 94 James Turnbull
Cause the certificate authority to discard all information regarding a host (including any certificates, certificate requests, and keys), and revoke the certificate if one is present. Similar to puppet cert --clean.
1686 103 Michael Stahnke
1687 94 James Turnbull
Examples include:
1688 94 James Turnbull
1689 94 James Turnbull
    curl -k -H "Accept: pson" https://puppetmaster:8140/production/certificate_status/testnode.localdomain
1690 103 Michael Stahnke
    curl -k -H "Accept: pson" https://puppetmaster:8140/production/certificate_statuses/all
1691 90 Nigel Kersten
    curl -k -X PUT -H "Content-Type: text/pson" --data '{"desired_state":"signed"}' https://puppetmaster:8140/production/certificate_status/client.network.address
1692 1
    curl -k -X PUT -H "Content-Type: text/pson" --data '{"desired_state":"revoked"}' https://puppetmaster:8140/production/certificate_status/client.network.address
1693 1
    curl -k -X DELETE -H "Accept: pson" https://puppetmaster:8140/production/certificate_status/client.network.address
1694 1
1695 157 Matthaus Litteken
# 2.6.13
1696 1
1697 157 Matthaus Litteken
2.6.13 Release Notes
1698 1
===
1699 1
Fix #10739 Provide default subjectAltNames while bootstrapping master
1700 151 Nick Fagerlund
1701 139 Nick Fagerlund
    Prior to #2848 (CVE-2011-3872), if Puppet[:certdnsnames] was not set,
1702 139 Nick Fagerlund
    puppet would add default subjectAltNames to any non-CA cert it signed,
1703 149 Matthaus Litteken
    including agent certs. The subjectAltNames were of the form:
1704 151 Nick Fagerlund
1705 149 Matthaus Litteken
      DNS:puppet, DNS:<fqdn>, DNS:puppet.<domain>
1706 151 Nick Fagerlund
1707 149 Matthaus Litteken
    The fix for #2848, prevented subjectAltNames from ever being
1708 149 Matthaus Litteken
    implicitly added at signing time. But during this change, the default
1709 149 Matthaus Litteken
    subjectAltNames behavior was accidentally removed.
1710 151 Nick Fagerlund
1711 149 Matthaus Litteken
    This commit restores the 'defaulting' behavior that existed
1712 149 Matthaus Litteken
    previously, but only when bootstrapping the initial master.
1713 149 Matthaus Litteken
    Additionally, default subjectAltNames are only ever added when
1714 149 Matthaus Litteken
    generating the master's certificate signing request, not at signing
1715 149 Matthaus Litteken
    time. This is important, because it ensures all subjectAltNames
1716 149 Matthaus Litteken
    originate from the CSR and are subject to our internal signing policy.
1717 151 Nick Fagerlund
1718 149 Matthaus Litteken
    The code now requires that all of the following be true in order to
1719 149 Matthaus Litteken
    add default subjectAltNames to the CSR:
1720 151 Nick Fagerlund
1721 149 Matthaus Litteken
     1. We are a CA and master
1722 149 Matthaus Litteken
     2. We're signing the master's cert, not self-signing the CA
1723 149 Matthaus Litteken
     3. The CSR is for the current host
1724 149 Matthaus Litteken
     4. No subjectAltNames have been specified, e.g. Puppet[:dns_alt_names]
1725 149 Matthaus Litteken
     5. The master can resolve its fqdn
1726 151 Nick Fagerlund
1727 149 Matthaus Litteken
    These should only ever be true when bootstrapping the initial
1728 149 Matthaus Litteken
    master. In particular, it should never be true for the CA's
1729 149 Matthaus Litteken
    self-signed cert, for remote agents, or for servers that are either
1730 149 Matthaus Litteken
    masters or CAs, but not both.
1731 151 Nick Fagerlund
1732 149 Matthaus Litteken
    The fqdn requirement existed previously, and so the same behavior has
1733 149 Matthaus Litteken
    been restored.
1734 151 Nick Fagerlund
1735 149 Matthaus Litteken
    Note if Puppet[:dns_alt_names] are specified when bootstrapping the
1736 149 Matthaus Litteken
    master, then we do not merge the default options -- it's either one of
1737 149 Matthaus Litteken
    the other, but not both.
1738 149 Matthaus Litteken
1739 149 Matthaus Litteken
Fix #10289
1740 149 Matthaus Litteken
1741 149 Matthaus Litteken
  Add an ext script to upload facts to inventory server
1742 151 Nick Fagerlund
1743 149 Matthaus Litteken
    This script, ext/upload_facts, will read facts from the master's yaml
1744 150 Matthaus Litteken
    dir and save them to the facts terminus. The intended use of this is
1745 150 Matthaus Litteken
    when the facts terminus is set to inventory_service, to be run
1746 150 Matthaus Litteken
    periodically via cron to ensure facts are uploaded even if the
1747 149 Matthaus Litteken
    inventory_service becomes temporarily unavailable. It supports a
1748 149 Matthaus Litteken
    --minutes option, which will limit the facts uploaded to only those
1749 149 Matthaus Litteken
    added in the last n minutes.
1750 149 Matthaus Litteken
1751 149 Matthaus Litteken
  Add a safe alternative to REST for inventory service
1752 151 Nick Fagerlund
1753 149 Matthaus Litteken
    With the default implementation of the inventory service, with a
1754 1
    terminus REST and cache YAML, a failed upload to the inventory service
1755 149 Matthaus Litteken
    would cause compilation to fail. This means the inventory service was a
1756 150 Matthaus Litteken
    single point of failure for the entire Puppet infrastructure. Now, we
1757 149 Matthaus Litteken
    introduce an inventory_service terminus which can be used in place of
1758 149 Matthaus Litteken
    the REST terminus, and will absorb failures, allowing compilation to
1759 149 Matthaus Litteken
    continue.
1760 149 Matthaus Litteken
1761 149 Matthaus Litteken
1762 149 Matthaus Litteken
1763 157 Matthaus Litteken
2.6.13 Changelog
1764 149 Matthaus Litteken
===
1765 149 Matthaus Litteken
* e4ee794 (#10739) Provide default subjectAltNames while bootstrapping master
1766 149 Matthaus Litteken
* 9dfd011 (#5617)  Puppet queue logging
1767 149 Matthaus Litteken
* a91cfa1 maint: Fix failing spec on old version of rspec
1768 149 Matthaus Litteken
* aa2a762 (#10289) Add an ext script to upload facts to inventory server
1769 149 Matthaus Litteken
* 5129d38 (#10289) Add a safe alternative to REST for inventory service
1770 149 Matthaus Litteken
* 7514d32 missing includes in network XML-RPC handlers
1771 149 Matthaus Litteken
* 397a506 (#10244) Restore Mongrel XMLRPC functionality
1772 149 Matthaus Litteken
* 8d86e5a (9547) Minor mods to acceptance tests
1773 149 Matthaus Litteken
* 2bf6721 Reset indirector state after configurer tests.
1774 149 Matthaus Litteken
* bb224dd (#8770) Don't fail to set supplementary groups when changing user to root
1775 149 Matthaus Litteken
* 2a0de12 (#8770) Always fully drop privileges when changing user
1776 149 Matthaus Litteken
* 00c4b25 (#8662) Migrate suidmanager test case to rspec
1777 149 Matthaus Litteken
* d7c9c76 (#8740) Do not enumerate files in the root directory.
1778 149 Matthaus Litteken
* 0e00473 (#3553) Explain that cron resources require time attributes
1779 149 Matthaus Litteken
* 769d432 (#8302) Improve documentation of exec providers
1780 149 Matthaus Litteken
* c209f62 Add document outlining preferred contribution methods
1781 149 Matthaus Litteken
* fb2ffd6 (#8596) Detect resource alias conflicts when titles do not match
1782 149 Matthaus Litteken
* 89c021c (#8418) Fix inspect app to have the correct run_mode
1783 149 Matthaus Litteken
* 3165364 maint: Adding logging to include environment when source fails
1784 149 Matthaus Litteken
* f484851 maint: Add debug logging when the master receives a report
1785 149 Matthaus Litteken
* e639868 Confine password disclosure acceptance test to hosts with required libraries
1786 149 Matthaus Litteken
* a109c90 (maint) Cleanup and strengthen acceptance tests
1787 149 Matthaus Litteken
* b268fb3 (#7144) Update Settings#writesub to convert mode to Fixnum
1788 149 Matthaus Litteken
* 4a2f22c (maint) Fix platform dection for RHEL
1789 149 Matthaus Litteken
* 111a4b5 (#6857) Password disclosure when changing a user's password
1790 139 Nick Fagerlund
1791 139 Nick Fagerlund
# 2.6.12
1792 139 Nick Fagerlund
1793 151 Nick Fagerlund
This is a security release in the 2.6.x branch.
1794 139 Nick Fagerlund
1795 139 Nick Fagerlund
## Security Fixes
1796 139 Nick Fagerlund
1797 139 Nick Fagerlund
### CVE-2011-3872 (AltNames vulnerability)
1798 139 Nick Fagerlund
1799 139 Nick Fagerlund
[(Full vulnerability and mitigation details)][cve20113872]
1800 139 Nick Fagerlund
1801 139 Nick Fagerlund
<!-- [cve20113872]: http://puppetlabs.com/security/cve/cve-2011-3872/ -->
1802 139 Nick Fagerlund
<!-- This link reference already exists under 2.7.6. Uncomment it if re-posting these notes elsewhere. -->
1803 139 Nick Fagerlund
1804 139 Nick Fagerlund
**This is a major security vulnerability which must be manually remediated;**
1805 139 Nick Fagerlund
upgrading Puppet will not fully protect a site from this vulnerability.
1806 139 Nick Fagerlund
1807 139 Nick Fagerlund
A bug in all previous versions causes Puppet to insert the puppet master’s DNS
1808 139 Nick Fagerlund
alt names ("certdnsnames" in puppet.conf) into the X.509 Subject Alternative
1809 139 Nick Fagerlund
Name field of all certificates, rather than just the puppet master’s
1810 139 Nick Fagerlund
certificate.
1811 139 Nick Fagerlund
1812 139 Nick Fagerlund
Since the puppet agent daemon can use the Subject Alternative Name field to
1813 139 Nick Fagerlund
identify its puppet master, your site may contain agent certificates that can
1814 139 Nick Fagerlund
be used in a Man in the Middle (MITM) attack to impersonate the puppet master.
1815 139 Nick Fagerlund
1816 139 Nick Fagerlund
This release fixes the underlying bug that caused dangerous certificates to be
1817 139 Nick Fagerlund
issued, but **any existing certificates with improper DNS alternate names will
1818 139 Nick Fagerlund
remain dangerous until your agent nodes have been reconfigured.**
1819 139 Nick Fagerlund
1820 139 Nick Fagerlund
Any site where the puppet master's `certdnsnames` setting has been enabled is
1821 139 Nick Fagerlund
vulnerable to attack. See the [CVE-2011-3872 details page][cve20113872] for
1822 139 Nick Fagerlund
more information, including:
1823 139 Nick Fagerlund
1824 139 Nick Fagerlund
* How to determine whether you are affected
1825 139 Nick Fagerlund
* How to fully remediate the vulnerability
1826 139 Nick Fagerlund
* How to download and use the automated remediation toolkit released by Puppet Labs
1827 139 Nick Fagerlund
1828 139 Nick Fagerlund
1829 139 Nick Fagerlund
# 2.6.11
1830 139 Nick Fagerlund
1831 151 Nick Fagerlund
This is a security release in the 2.6.x branch.
1832 139 Nick Fagerlund
1833 139 Nick Fagerlund
## Security Fixes
1834 139 Nick Fagerlund
1835 139 Nick Fagerlund
### Three security vulnerabilities
1836 139 Nick Fagerlund
1837 139 Nick Fagerlund
This release resolves the following security vulnerabilities:
1838 139 Nick Fagerlund
1839 139 Nick Fagerlund
* [CVE-2011-3869 -- k5login can overwrite arbitrary files as root][cve20113869]
1840 139 Nick Fagerlund
* [CVE-2011-3870 -- SSH auth key local privilege escalation][cve20113870]
1841 139 Nick Fagerlund
* [CVE-2011-3871 -- Predictable temporary filename in puppet resource/ralsh][cve20113871]
1842 139 Nick Fagerlund
1843 139 Nick Fagerlund
Follow the links above for details on each vulnerability.
1844 139 Nick Fagerlund
1845 151 Nick Fagerlund
<!--
1846 139 Nick Fagerlund
[cve20113871]: http://puppetlabs.com/security/cve/cve-2011-3871/
1847 139 Nick Fagerlund
[cve20113870]: http://puppetlabs.com/security/cve/cve-2011-3870/
1848 139 Nick Fagerlund
[cve20113869]: http://puppetlabs.com/security/cve/cve-2011-3869/
1849 132 Nick Fagerlund
(These link references are enabled under 2.7.5.)
1850 132 Nick Fagerlund
 -->
1851 139 Nick Fagerlund
1852 132 Nick Fagerlund
1853 151 Nick Fagerlund
# 2.6.10
1854 132 Nick Fagerlund
1855 139 Nick Fagerlund
2.6.10 is a security release in the 2.6.x branch.
1856 132 Nick Fagerlund
1857 139 Nick Fagerlund
## Security Fixes
1858 132 Nick Fagerlund
1859 132 Nick Fagerlund
### CVE-2011-3848 (directory traversal attacks through indirections)
1860 132 Nick Fagerlund
1861 132 Nick Fagerlund
[(Full vulnerability details)][cve20113848]
1862 132 Nick Fagerlund
1863 132 Nick Fagerlund
In various versions of Puppet it was possible to cause a directory traversal
1864 132 Nick Fagerlund
attack through the SSLFile indirection base class.  This was variously
1865 132 Nick Fagerlund
triggered through the user-supplied key, or the Subject of the certificate, in
1866 132 Nick Fagerlund
the code.
1867 132 Nick Fagerlund
1868 132 Nick Fagerlund
Now, we detect bad patterns down in the base class for our indirections, and
1869 132 Nick Fagerlund
fail hard on them.  This reduces the attack surface with as little disruption
1870 130 Michael Stahnke
to the overall codebase as possible, making it suitable to deploy as part of
1871 130 Michael Stahnke
older, stable versions of Puppet.
1872 130 Michael Stahnke
1873 130 Michael Stahnke
In the long term we will also address this higher up the stack, to prevent
1874 130 Michael Stahnke
these problems from reoccurring, but for now this will suffice.
1875 130 Michael Stahnke
1876 102 Michael Stahnke
Huge thanks to Kristian Erik Hermansen <kristian.hermansen@gmail.com> for the
1877 1
responsible disclosure, and useful analysis, around this defect.
1878 107 Michael Stahnke
1879 102 Michael Stahnke
1880 107 Michael Stahnke
## Commits
1881 102 Michael Stahnke
1882 102 Michael Stahnke
ec5a32a Update spec and lib/puppet.rb for 2.6.10 release
1883 102 Michael Stahnke
fe2de81 Resist directory traversal attacks through indirections. (CVE-2011-3484)
1884 122 Nick Fagerlund
1885 122 Nick Fagerlund
1886 122 Nick Fagerlund
# 2.6.9
1887 122 Nick Fagerlund
1888 102 Michael Stahnke
2.6.9 is a maintenance release in the 2.6.x branch.
1889 102 Michael Stahnke
1890 102 Michael Stahnke
## Notable Fixes and Features
1891 102 Michael Stahnke
1892 102 Michael Stahnke
Bug #5318
1893 102 Michael Stahnke
1894 102 Michael Stahnke
  Puppet master behind Passenger no longer requires two runs to detect changes to manifests.
1895 102 Michael Stahnke
1896 90 Nigel Kersten
Bug #7127:
1897 151 Nick Fagerlund
1898 95 Jacob Helwig
  A puppet run will now stop if a prerun command fails.
1899 89 Matt Robinson
1900 95 Jacob Helwig
Bug #650
1901 151 Nick Fagerlund
1902 89 Matt Robinson
  Puppet will now honor symlinks for configuration directories
1903 89 Matt Robinson
1904 89 Matt Robinson
Feature #2128
1905 89 Matt Robinson
1906 151 Nick Fagerlund
  Added support for hostname setting based on facts, also get facts before retrieving the catalog.
1907 151 Nick Fagerlund
1908 89 Matt Robinson
Bug #7139
1909 151 Nick Fagerlund
1910 89 Matt Robinson
  Accept '/' as a valid path in filesets
1911 89 Matt Robinson
1912 89 Matt Robinson
1913 120 Nick Fagerlund
# 2.6.8
1914 89 Matt Robinson
1915 83 Matt Robinson
2.6.8 is a maintenance release in the 2.6.x branch.
1916 86 James Turnbull
1917 83 Matt Robinson
## Notable Features and Bug Fixes
1918 86 James Turnbull
1919 83 Matt Robinson
Bug #4884:
1920 83 Matt Robinson
1921 83 Matt Robinson
 Added a new `shell` exec provider that executes code as a raw shell script. Although the `posix` provider remains the default, the new provider allows the use of shell globbing and built-ins, and does not require that the path to a command be fully-qualified. The `shell` provider closely resembles the behavior of the `exec` type in Puppet 0.25.x.
1922 83 Matt Robinson
1923 83 Matt Robinson
Bug #5670:
1924 83 Matt Robinson
1925 83 Matt Robinson
 Failed resources don't improperly trigger a refresh
1926 83 Matt Robinson
1927 83 Matt Robinson
Feature #2331:
1928 83 Matt Robinson
1929 83 Matt Robinson
 New macports provider
1930 83 Matt Robinson
1931 83 Matt Robinson
# 2.6.7
1932 84 Jacob Helwig
1933 83 Matt Robinson
2.6.7 is a maintenance release in the 2.6.x branch.
1934 85 Jacob Helwig
1935 85 Jacob Helwig
## Notable Features and Bug Fixes
1936 85 Jacob Helwig
1937 85 Jacob Helwig
### Inventory Service Available
1938 83 Matt Robinson
1939 83 Matt Robinson
The inventory service is a way to track facts for all nodes.  Preliminary documentation can be found [here](https://github.com/puppetlabs/puppet-docs/blob/master/source/guides/inventory_service.markdown), which will be finalized by the time 2.6.7 is released.
1940 83 Matt Robinson
1941 83 Matt Robinson
### Plugin sync works when using tags
1942 83 Matt Robinson
1943 83 Matt Robinson
Bug #5073 This fixes a regression from 0.25.x
1944 83 Matt Robinson
1945 83 Matt Robinson
###  Don't truncate remotely-sourced files on 404
1946 83 Matt Robinson
1947 83 Matt Robinson
Bug #4922 Now 404s just cause a normal failure without affecting the file
1948 83 Matt Robinson
1949 1
### Storeconfigs compatibility with older version of Puppet
1950 85 Jacob Helwig
1951 83 Matt Robinson
Bug #5428 Upgrading from 0.25.x caused problems with the data format that storeconfigs used, and previously you had to delete your old storeconfigs data to work with 2.6.x.  2.6.7 can now work with the old storeconfigs data.
1952 83 Matt Robinson
1953 83 Matt Robinson
### Selectors now can use hashes
1954 83 Matt Robinson
1955 1
Ticket #5516  Example:
1956 83 Matt Robinson
1957 85 Jacob Helwig
    $int = { 'eth0' => 'bla' }
1958 83 Matt Robinson
    $foo = $int['eth0'] ? {
1959 83 Matt Robinson
      'bla' => 'foo',
1960 83 Matt Robinson
       default => 'bleh'
1961 83 Matt Robinson
    }
1962 83 Matt Robinson
1963 83 Matt Robinson
### Hashes can now be multiple levels deep
1964 83 Matt Robinson
1965 83 Matt Robinson
Bug #6269  The following now works:
1966 83 Matt Robinson
1967 83 Matt Robinson
    $hash = { 'a' => { 'b' => { 'c' => 'it works' } } }
1968 83 Matt Robinson
    $out = $hash['a']['b']['c']
1969 85 Jacob Helwig
1970 83 Matt Robinson
###  Documented autorequire relationships
1971 85 Jacob Helwig
1972 83 Matt Robinson
Ticket #6606
1973 83 Matt Robinson
1974 83 Matt Robinson
### Better support for multiple key attributes
1975 83 Matt Robinson
1976 83 Matt Robinson
Bugs #5661 #5662 #5605
1977 83 Matt Robinson
1978 83 Matt Robinson
### Better error message when realizing a non-existent virtual resource
1979 83 Matt Robinson
1980 83 Matt Robinson
Bug #5392 The error message you used to get when realizing a bogus virtual resource didn't give you any indication of what was happening to cause the error.  Now it should be much faster to figure out that the virtual resource was bad.
1981 83 Matt Robinson
1982 83 Matt Robinson
### Noop no longer suppresses error codes
1983 83 Matt Robinson
1984 83 Matt Robinson
Bug #6322  Running in noop mode used to always return 0.  It will now return the same exit code that a regular run would if possible
1985 83 Matt Robinson
1986 83 Matt Robinson
###  Settings Propagate Environment
1987 83 Matt Robinson
1988 83 Matt Robinson
Bug #6513  The code in settings did not always propagate the environment, creating situations in which inconsistent results were produced
1989 83 Matt Robinson
1990 83 Matt Robinson
### Able to create system users
1991 83 Matt Robinson
1992 83 Matt Robinson
Ticket #2645 You can now create users like when running `useradd -r` if you specify `system => true` on a user resource.
1993 83 Matt Robinson
1994 67 James Turnbull
### The reports directory is now automatically created
1995 81 Jacob Helwig
1996 81 Jacob Helwig
Bug #5794 If the reports directory didn't exist the report creation used to fail until it was manually added
1997 81 Jacob Helwig
1998 81 Jacob Helwig
###  DESTDIR in install.rb now warns that it's deprecated in favor of `--destdir`
1999 81 Jacob Helwig
2000 81 Jacob Helwig
Ticket #5724
2001 81 Jacob Helwig
2002 81 Jacob Helwig
### Allow disabling of default SELinux context detection for files
2003 81 Jacob Helwig
2004 81 Jacob Helwig
Ticket #3999
2005 81 Jacob Helwig
2006 81 Jacob Helwig
### Add `_search` REST API aliases for plural GET requests
2007 81 Jacob Helwig
2008 81 Jacob Helwig
Ticket #6376 The plural form creates problems when the name of the indirection is already plural, e.g. “facts” pluralizes to “factss”
2009 81 Jacob Helwig
2010 81 Jacob Helwig
# 2.6.6
2011 82 Jacob Helwig
2012 81 Jacob Helwig
2.6.6 is a maintenance release in the 2.6.x branch.
2013 67 James Turnbull
2014 1
## Notable Features and Bug Fixes
2015 81 Jacob Helwig
2016 64 Nick Fagerlund
### No longer audit recursive files
2017 71 Nick Fagerlund
2018 68 James Turnbull
Bug #6418: Files with the "source" parameter set are automatically set to audit
2019 78 Jesse Wolfe
2020 78 Jesse Wolfe
The audit functionality was activated unexpectedly on file resources that use the "source" parameter. This could cause spurrious notify events.  These notifications could trigger unintended refreshes of subscribed resources.
2021 78 Jesse Wolfe
2022 78 Jesse Wolfe
### No longer truncate files when given an invalid checksum
2023 78 Jesse Wolfe
2024 78 Jesse Wolfe
Bug #6541: File type truncates target when filebucket can not retrieve hash
2025 71 Nick Fagerlund
2026 1
In the case where a file resource had content specified using an invalid checksum (Eg: "{md5}not-a-checksum") or the valid checksum of a file not contained in the filebucket, the file would end up being truncated.  This is now properly reported as an error, instead of zeroing out the file.
2027 72 Nick Fagerlund
2028 68 James Turnbull
# 2.6.5
2029 71 Nick Fagerlund
2030 71 Nick Fagerlund
2.6.5 is a maintenance release in the 2.6.x branch.
2031 71 Nick Fagerlund
2032 1
## Notable Features and Bug Fixes
2033 69 James Turnbull
2034 69 James Turnbull
### Faster Passenger support
2035 69 James Turnbull
2036 68 James Turnbull
Bug #6257: Rack POST and PUT request handling is very slow.
2037 68 James Turnbull
2038 71 Nick Fagerlund
The speed of the Rack HTTP handler has been dramatically improved. This should prevent timeouts that some users were experiencing when running under Passenger.
2039 1
2040 1
### Parameterised class support in external node classifiers
2041 71 Nick Fagerlund
2042 71 Nick Fagerlund
Bug #5045: External node classifiers should be able to specify parameters for parameterized classes
2043 71 Nick Fagerlund
2044 71 Nick Fagerlund
External node classifiers can now declare parameterized classes (with parameters). To declare the following parameterized class:
2045 71 Nick Fagerlund
2046 71 Nick Fagerlund
    class foo($foobar='default', $foobaz, $fooblah) {
2047 1
      notify { 'foobar': message => $foobar }
2048 71 Nick Fagerlund
      notify { 'foobaz': message => $foobaz }
2049 1
      notify { 'fooblahfirst': message => $fooblah[0] }
2050 71 Nick Fagerlund
      notify { 'fooblahsecond': message => $fooblah[1] }
2051 1
    }
2052 71 Nick Fagerlund
2053 1
...your external node classifier should return the following YAML:
2054 72 Nick Fagerlund
2055 1
    classes:
2056 85 Jacob Helwig
        foo:
2057 1
          foobar: onesie
2058 71 Nick Fagerlund
          foobaz: twosie
2059 71 Nick Fagerlund
          fooblah:
2060 71 Nick Fagerlund
              - one
2061 71 Nick Fagerlund
              - two
2062 71 Nick Fagerlund
2063 85 Jacob Helwig
### New puppet inspect application
2064 71 Nick Fagerlund
2065 1
Puppet now includes puppet inspect, an application which sends inspection reports to the puppet master. Inspection reports document the current state of resource attributes which marked for auditing in the most recently applied catalog, and are useful in certain pre-existing workflows.
2066 71 Nick Fagerlund
2067 1
### `$name` can now be used to set default values in defined resource types
2068 72 Nick Fagerlund
2069 1
Feature #5061: should be able to access ($name, $module_name, $title) from within defined resources type parameter list
2070 71 Nick Fagerlund
2071 71 Nick Fagerlund
The `$name` variable is now resolved within the scope of the resource being declared, rather than the enclosing scope. This enables usages like:
2072 71 Nick Fagerlund
2073 71 Nick Fagerlund
    define audited_file($filename = $name) {
2074 72 Nick Fagerlund
        file { $filename:
2075 71 Nick Fagerlund
            audit => all,
2076 85 Jacob Helwig
        }
2077 71 Nick Fagerlund
    }
2078 71 Nick Fagerlund
2079 71 Nick Fagerlund
    audited_file { "/etc/hosts": }
2080 72 Nick Fagerlund
2081 71 Nick Fagerlund
### Managed resource attributes can now be audited
2082 85 Jacob Helwig
2083 71 Nick Fagerlund
Bug #5408: Puppet should allow audited attributes to also be managed
2084 71 Nick Fagerlund
2085 71 Nick Fagerlund
The audit metaparameter can now be used on attributes which are managed by Puppet.
2086 72 Nick Fagerlund
2087 71 Nick Fagerlund
### Manifests can now specify arbitrary data for file contents
2088 85 Jacob Helwig
2089 71 Nick Fagerlund
Bug #5261: Need a way to transmit binary data for file contents in manifests
2090 71 Nick Fagerlund
2091 71 Nick Fagerlund
Previous versions of Puppet would experience errors when file contents contained invalid UTF8.
2092 72 Nick Fagerlund
2093 71 Nick Fagerlund
### Puppet agent reliably writes valid cache YAML for very large catalogs
2094 71 Nick Fagerlund
2095 71 Nick Fagerlund
Bug #5755: Unable to load puppet generated catalog via YAML.load_file
2096 73 Nick Fagerlund
2097 71 Nick Fagerlund
In Puppet 2.6.3 and 2.6.4, puppet agent would sometimes write invalid YAML to its cache when serializing extremely large catalogs, and subsequent tasks attempting to consume this YAML would fail. This has been fixed.
2098 85 Jacob Helwig
2099 71 Nick Fagerlund
### The environment column in storeconfigs is no longer corrupted
2100 71 Nick Fagerlund
2101 71 Nick Fagerlund
Bug #4487: Environment column in hosts table updating incorrectly
2102 72 Nick Fagerlund
2103 71 Nick Fagerlund
A bug which corrupted the environment column in storeconfigs databases has been fixed.
2104 85 Jacob Helwig
2105 71 Nick Fagerlund
### Mount resource on AIX has been improved
2106 79 Jesse Wolfe
2107 79 Jesse Wolfe
Bug #5681: Puppet mount module Puppet::Provider::Mount does not properly parse AIX mount command output
2108 79 Jesse Wolfe
2109 79 Jesse Wolfe
### Puppet resource can now manage files
2110 71 Nick Fagerlund
2111 71 Nick Fagerlund
Bug #3165: Ralsh can't manage files
2112 85 Jacob Helwig
2113 71 Nick Fagerlund
The puppet resource shell can now manage file resources.
2114 71 Nick Fagerlund
2115 71 Nick Fagerlund
### Generating puppet.conf with `--genconfig` no longer sets genconfig = true
2116 85 Jacob Helwig
2117 71 Nick Fagerlund
Bug #5914: Genconfig returns genconfig=true
2118 71 Nick Fagerlund
2119 71 Nick Fagerlund
Using the `--genconfig` command line option now generates fully usable puppet.conf content.
2120 85 Jacob Helwig
2121 71 Nick Fagerlund
Bug #5977: Puppet applications in multiple directories.
2122 71 Nick Fagerlund
2123 71 Nick Fagerlund
Setting RUBYLIB should no longer have the potential to break finding puppet sub-commands.
2124 85 Jacob Helwig
2125 71 Nick Fagerlund
### License is now GPLv2
2126 71 Nick Fagerlund
2127 71 Nick Fagerlund
Previous versions of Puppet were licensed as GPL version 2 or greater; the license is now specified as GPL version 2.
2128 71 Nick Fagerlund
2129 71 Nick Fagerlund
### Filebucket API can now provide diffs of file contents
2130 71 Nick Fagerlund
2131 71 Nick Fagerlund
The filebucket service can now diff file contents specified by MD5 checksum. From [the REST API documentation](http://docs.puppetlabs.com/guides/rest_api.html):
2132 77 Nan Liu
2133 71 Nick Fagerlund
    GET /{environment}/file_bucket_file/md5/{checksum}?diff_with={checksum}
2134 75 Nick Fagerlund
2135 75 Nick Fagerlund
No tools using this feature are currently shipping; however, a future version of Puppet Dashboard will support viewing diffs of arbitrary file content revisions.
2136 71 Nick Fagerlund
2137 1
### Report format has changed; report formats are now versioned
2138 75 Nick Fagerlund
2139 71 Nick Fagerlund
The report format has been made more consistent, more documentatable, and less redundant. Report formats are now versioned, and inspection reports are now supported with the `kind` attribute.
2140 71 Nick Fagerlund
2141 1
See the wiki for details:
2142 75 Nick Fagerlund
2143 75 Nick Fagerlund
* [[Report Format 0]]
2144 75 Nick Fagerlund
* [[Report Format 1]]
2145 68 James Turnbull
* [[Report Format 2]]
2146 80 Jacob Helwig
2147 80 Jacob Helwig
### "user" type now takes -1 to disable password aging
2148 80 Jacob Helwig
2149 80 Jacob Helwig
Bug #6061: password_max_age can not be set to null or -1
2150 66 Nick Fagerlund
2151 66 Nick Fagerlund
### Time and timestamp checksum options have been removed from the "file" type
2152 66 Nick Fagerlund
2153 85 Jacob Helwig
These attributes, deprecated in 0.25.0, have been removed.
2154 66 Nick Fagerlund
2155 63 James Turnbull
### "file" type now accepts POSIX files with multiple slashes
2156 1
2157 66 Nick Fagerlund
Bug #6091: Fix Posix file paths with multiple slashes
2158 66 Nick Fagerlund
2159 63 James Turnbull
Valid POSIX file paths with multiple slashes are now usable.
2160 61 James Turnbull
2161 61 James Turnbull
### Document the `--apply` and `--compile` options to `puppet apply` and `puppet master`
2162 61 James Turnbull
2163 61 James Turnbull
Feature #3646: Updated documentation for `puppet apply`, and `puppet master`.
2164 62 James Turnbull
2165 62 James Turnbull
# 2.6.4
2166 62 James Turnbull
2167 62 James Turnbull
2.6.4 is a security release in the 2.6.x branch and contains only
2168 62 James Turnbull
security related bug fixes and one update to copyright information.
2169 62 James Turnbull
2170 1
# 2.6.3
2171 1
2172 66 Nick Fagerlund
2.6.3 is a maintenance release in the 2.6.x branch and contains only
2173 66 Nick Fagerlund
bug fixes and no new features.
2174 66 Nick Fagerlund
2175 66 Nick Fagerlund
# 2.6.2
2176 66 Nick Fagerlund
2177 66 Nick Fagerlund
This release is largely a maintenance release for the 2.6.x cycle
2178 66 Nick Fagerlund
2179 66 Nick Fagerlund
## Types and Providers
2180 66 Nick Fagerlund
2181 66 Nick Fagerlund
### User type now manages password age
2182 85 Jacob Helwig
2183 61 James Turnbull
We've add a new feature to user providers <code>manages_password_age</code>, along with the new properties <code>password_min_age</code> and <code>password_max_age</code> to the user type. These represent password minimum and maximum age in days. The useradd and user_role_add providers now support these new properties.
2184 50 James Turnbull
2185 50 James Turnbull
### User type now manages user expiry
2186 51 James Turnbull
2187 51 James Turnbull
We've add a new feature to user providers, <code>manages_expiry</code>, along with a new property, <code>expiry</code>.  The <code>expiry</code> property is specified in the form of YYYY-MM-DD and sets an expiration date for an account.
2188 50 James Turnbull
2189 50 James Turnbull
An example of these new features:
2190 55 James Turnbull
2191 55 James Turnbull
    user { "james":
2192 50 James Turnbull
      password_min_age => '10',
2193 50 James Turnbull
      password_max_age => '30',
2194 50 James Turnbull
      expiry => '2010-09-30',
2195 50 James Turnbull
      ...
2196 50 James Turnbull
      ensure => present,
2197 85 Jacob Helwig
    }
2198 85 Jacob Helwig
2199 50 James Turnbull
# 2.6.1
2200 50 James Turnbull
2201 85 Jacob Helwig
This release is largely a maintenance release for 2.6.0 but also includes basic support for running Puppet under JRuby.
2202 50 James Turnbull
2203 85 Jacob Helwig
## Functions
2204 50 James Turnbull
2205 50 James Turnbull
### Extlookup
2206 85 Jacob Helwig
2207 52 James Turnbull
R.I. Pienaar's extlookup function has been added to core.  This is an initial import of this function.  Additional functionality, including YAML and JSON backends, will be added in future releases.
2208 52 James Turnbull
2209 52 James Turnbull
This is a parser function to read data from external files, this version
2210 52 James Turnbull
uses CSV files but the concept can easily be adjust for databases, yaml
2211 85 Jacob Helwig
or any other queryable data source.
2212 50 James Turnbull
2213 50 James Turnbull
The object of this is to make it obvious when it's being used, rather than
2214 50 James Turnbull
magically loading data in when an module is loaded I prefer to look at the code
2215 85 Jacob Helwig
and see statements like:
2216 50 James Turnbull
2217 50 James Turnbull
    $snmp_contact = extlookup("snmp_contact")
2218 85 Jacob Helwig
2219 50 James Turnbull
The above snippet will load the snmp_contact value from CSV files, this in its
2220 50 James Turnbull
own is useful but a common construct in puppet manifests is something like this:
2221 52 James Turnbull
2222 52 James Turnbull
    case $domain {
2223 85 Jacob Helwig
       "myclient.com": { $snmp_contact = "John Doe <john@myclient.com>" }
2224 50 James Turnbull
       default:        { $snmp_contact = "My Support <support@my.com>" }
2225 50 James Turnbull
    }
2226 85 Jacob Helwig
2227 54 Uwe Stuehler
Over time there will be a lot of this kind of thing spread all over your manifests
2228 85 Jacob Helwig
and adding an additional client involves grepping through manifests to find all the
2229 54 Uwe Stuehler
places where you have constructs like this.
2230 54 Uwe Stuehler
2231 54 Uwe Stuehler
This is a data problem and shouldn't be handled in code, a using this function you
2232 54 Uwe Stuehler
can do just that.
2233 52 James Turnbull
2234 50 James Turnbull
First you configure it in site.pp:
2235 50 James Turnbull
2236 50 James Turnbull
    $extlookup_datadir = "/etc/puppet/manifests/extdata"
2237 85 Jacob Helwig
    $extlookup_precedence = ["%{fqdn}", "domain_%{domain}", "common"]
2238 50 James Turnbull
2239 50 James Turnbull
The array tells the code how to resolve values, first it will try to find it in
2240 85 Jacob Helwig
web1.myclient.com.csv then in domain_myclient.com.csv and finally in common.csv
2241 50 James Turnbull
2242 85 Jacob Helwig
Now create the following data files in /etc/puppet/manifests/extdata like this:
2243 85 Jacob Helwig
2244 50 James Turnbull
   domain_myclient.com.csv:
2245 50 James Turnbull
     snmp_contact,John Doe <john@myclient.com>
2246 85 Jacob Helwig
     root_contact,support@%{domain}
2247 50 James Turnbull
     client_trusted_ips,192.168.1.130,192.168.10.0/24
2248 50 James Turnbull
2249 50 James Turnbull
   common.csv:
2250 85 Jacob Helwig
     snmp_contact,My Support <support@my.com>
2251 50 James Turnbull
     root_contact,support@my.com
2252 50 James Turnbull
2253 85 Jacob Helwig
Now you can replace the case statement with the simple single line to achieve
2254 50 James Turnbull
the exact same outcome:
2255 85 Jacob Helwig
2256 50 James Turnbull
    $snmp_contact = extlookup("snmp_contact")
2257 50 James Turnbull
2258 85 Jacob Helwig
The obove code shows some other features, you can use any fact or variable that
2259 50 James Turnbull
is in scope by simply using %{varname} in your data files, you can return arrays
2260 50 James Turnbull
by just having multiple values in the csv after the initial variable name.
2261 85 Jacob Helwig
2262 50 James Turnbull
In the event that a variable is nowhere to be found a critical error will be raised
2263 50 James Turnbull
that will prevent your manifest from compiling, this is to avoid accidentally putting
2264 50 James Turnbull
in empty values etc.  You can however specify a default value:
2265 50 James Turnbull
2266 55 James Turnbull
    $ntp_servers = extlookup("ntp_servers", "1.${country}.pool.ntp.org")
2267 55 James Turnbull
2268 55 James Turnbull
In this case it will default to "1.${country}.pool.ntp.org" if nothing is defined in
2269 55 James Turnbull
any data file.
2270 55 James Turnbull
2271 55 James Turnbull
You can also specify an additional data file to search first before any others at use
2272 55 James Turnbull
time, for example:
2273 55 James Turnbull
2274 55 James Turnbull
    $version = extlookup("rsyslog_version", "present", "packages")
2275 57 James Turnbull
    package{"rsyslog": ensure => $version }
2276 57 James Turnbull
2277 57 James Turnbull
This will look for a version configured in packages.csv and then in the rest as configured
2278 50 James Turnbull
by $extlookup_precedence if it's not found anywhere it will default to "present", this kind
2279 21 James Turnbull
of use case makes puppet a lot nicer for managing large amounts of packages since you do not
2280 1
need to edit a load of manifests to do simple things like adjust a desired version number.
2281 1
2282 1
### md5
2283 33 James Turnbull
2284 33 James Turnbull
An md5 hashing function
2285 33 James Turnbull
2286 33 James Turnbull
## Documentation
2287 33 James Turnbull
2288 1
Migration of internal Restructured Text Documentation to Markdown
2289 33 James Turnbull
2290 33 James Turnbull
## Types and Providers
2291 33 James Turnbull
2292 1
Added http_refresh and cost parameters to the yumrepo type
2293 33 James Turnbull
2294 85 Jacob Helwig
# 2.6.0
2295 33 James Turnbull
2296 85 Jacob Helwig
## Language
2297 33 James Turnbull
2298 1
### Support for parameterised classes
2299 33 James Turnbull
2300 33 James Turnbull
The Rowlf release provides an extension to the existing class
2301 33 James Turnbull
syntax to allow parameters to be passed to classes. This brings
2302 33 James Turnbull
classes more in line with definitions, with the significant
2303 33 James Turnbull
difference that definitions have multiple instances whilst classes
2304 1
remain singletons.
2305 33 James Turnbull
2306 33 James Turnbull
To create a class with parameters you can now specify:
2307 33 James Turnbull
2308 33 James Turnbull
    class apache($version) {
2309 33 James Turnbull
2310 33 James Turnbull
    ... class contents ...
2311 85 Jacob Helwig
2312 33 James Turnbull
    }
2313 85 Jacob Helwig
2314 33 James Turnbull
Classes with parameters are NOT added using the include function
2315 33 James Turnbull
but rather the resulting class can then be included more like a
2316 1
definition:
2317 32 James Turnbull
2318 34 James Turnbull
    node webserver {
2319 1
        class { apache: version => "1.3.13" }
2320 34 James Turnbull
    }
2321 64 Nick Fagerlund
2322 64 Nick Fagerlund
Like definitions, you can also specify default parameter values in
2323 64 Nick Fagerlund
your class like so:
2324 34 James Turnbull
2325 34 James Turnbull
    class apache($version="1.3.13",$home="/var/www") {
2326 85 Jacob Helwig
2327 64 Nick Fagerlund
    ... class contents ...
2328 64 Nick Fagerlund
2329 85 Jacob Helwig
    }
2330 34 James Turnbull
2331 34 James Turnbull
### New relationship syntax
2332 34 James Turnbull
2333 34 James Turnbull
You can now specify relationships directly in the language:
2334 34 James Turnbull
2335 85 Jacob Helwig
2336 64 Nick Fagerlund
    File[/foo] -> Service[bar]
2337 64 Nick Fagerlund
2338 85 Jacob Helwig
2339 1
Specifies a normal dependency while:
2340 34 James Turnbull
2341 85 Jacob Helwig
2342 64 Nick Fagerlund
    File[/foo] ~> Service[bar]
2343 64 Nick Fagerlund
2344 85 Jacob Helwig
2345 34 James Turnbull
Specifies a subscription.
2346 34 James Turnbull
2347 34 James Turnbull
You can also do relationship chaining, specifying multiple
2348 1
relationships on a single line:
2349 85 Jacob Helwig
2350 64 Nick Fagerlund
2351 64 Nick Fagerlund
    File[/foo] -> Package[baz] -> Service[bar]
2352 85 Jacob Helwig
2353 34 James Turnbull
2354 34 James Turnbull
Note that while it's confusing, you don't have to have all of the arrows be the same direction:
2355 85 Jacob Helwig
2356 64 Nick Fagerlund
2357 64 Nick Fagerlund
    File[/foo] -> Service[bar] <~ Package[baz]
2358 64 Nick Fagerlund
2359 64 Nick Fagerlund
2360 85 Jacob Helwig
This can provide some succinctness at the cost of readability.
2361 34 James Turnbull
2362 20 James Turnbull
You can also specify full resources, rather than just resource references:
2363 20 James Turnbull
2364 28 Luke Kanies
2365 28 Luke Kanies
    file { "/foo": ensure => present } -> package { bar: ensure => installed }
2366 28 Luke Kanies
2367 28 Luke Kanies
2368 28 Luke Kanies
But wait! There's more!  You can also specify a subscription on either side of the relationship marker:
2369 28 Luke Kanies
2370 28 Luke Kanies
2371 85 Jacob Helwig
    yumrepo { foo: .... }
2372 64 Nick Fagerlund
    package { bar: provider => yum, ... }
2373 64 Nick Fagerlund
    Yumrepo <| |> -> Package <| provider == yum |>
2374 85 Jacob Helwig
2375 32 James Turnbull
2376 28 Luke Kanies
This, finally, provides easy many to many relationships in Puppet, but it also opens the door to massive dependency cycles.  This last feature is a very powerful stick, and you can considerably hurt yourself with it.
2377 28 Luke Kanies
2378 28 Luke Kanies
### Run Stages
2379 85 Jacob Helwig
2380 64 Nick Fagerlund
Run Stages are a way for you to provide coarse-grained ordering in your manifests without having to specify relationships to every resource you want in a given order.  It's most useful for setup work that needs to be done before the vast majority of your catalog even works - things like configuring yum repositories so your package installs work.
2381 64 Nick Fagerlund
2382 64 Nick Fagerlund
Run Stages are currently (intentionally) a bit limited - you can only put entire classes into a run stage, you can't put individual resources there.
2383 64 Nick Fagerlund
2384 64 Nick Fagerlund
There's a <code>main</code> stage that resources all exist in by default; if you don't use run stages, everything's in this, but it doesn't matter to you.  You can define new stages via the new <code>stage</code> resource type:
2385 64 Nick Fagerlund
2386 85 Jacob Helwig
2387 58 Todd Zullinger
    stage { pre: before => Stage[main] }
2388 20 James Turnbull
2389 1
2390 31 Luke Kanies
Here we've used the <code>before</code> metaparameter but you could also use <code>after</code>, <code>require</code>, etc to establish the necessary relationships between stages.
2391 31 Luke Kanies
2392 31 Luke Kanies
Now you just specify that your class belongs in your new run stage:
2393 31 Luke Kanies
2394 1
2395 31 Luke Kanies
    class yum { ... }
2396 31 Luke Kanies
    class redhat {
2397 85 Jacob Helwig
      ...
2398 64 Nick Fagerlund
      class { yum: stage => pre }
2399 64 Nick Fagerlund
    }
2400 64 Nick Fagerlund
2401 85 Jacob Helwig
2402 1
This will make sure that all of the resources in the <code>yum</code> are applied before the main stage is applied.
2403 1
2404 30 James Turnbull
Note that we're using the new parameterized classes here - this is necessary because of the class-level limitations of Run Stages.  These limitations are present because of the complication of trying to untangle resource dependencies across stage boundaries if we allowed arbitrary resources to specify stages.
2405 30 James Turnbull
2406 1
On a related note, if you specify a stage for a given class, you should specify as few as possible explicit relationships to or from that class.  Otherwise you risk a greater chance of dependency cycles.
2407 1
2408 85 Jacob Helwig
This can all be visualized relatively easily using the <code>\-\-graph</code> option to <code>puppetd</code> and opening the graphs in OmniGraffle or GraphViz.
2409 1
2410 85 Jacob Helwig
Specifying the ordering of Run Stages also works much better when specified using the new relationship syntax, too:
2411 64 Nick Fagerlund
2412 64 Nick Fagerlund
2413 85 Jacob Helwig
    stage { [pre, post]: }
2414 1
    Stage[pre] -> Stage[main] -> Stage[post]
2415 1
2416 1
2417 1
This way it's very easy to see at a glance exactly how the stages are ordered.
2418 64 Nick Fagerlund
2419 64 Nick Fagerlund
### Support for hashes in the DSL
2420 64 Nick Fagerlund
2421 1
This brings a new container syntax to the Puppet DSL: hashes.
2422 64 Nick Fagerlund
2423 1
Hashes are defined like Ruby Hashes:
2424 1
2425 1
2426 1
    { key1 => val1, ... }
2427 1
2428 1
2429 1
The Hash keys are strings but hash values can be any possible right values admitted in Puppet DSL (i.e. a function call or a variable)
2430 85 Jacob Helwig
2431 85 Jacob Helwig
Currently it is possible:
2432 56 James Turnbull
2433 56 James Turnbull
* to assign hashes to a variable: <pre>
2434 56 James Turnbull
$myhash = { key1 => "myval", key2 => $b }</pre>
2435 56 James Turnbull
* to access hash members (recursively) from a variable containing a hash (works for array too): <pre>
2436 56 James Turnbull
$myhash = { key => { subkey => "b" }}
2437 56 James Turnbull
notice($myhash[key][subkey]]</pre>
2438 56 James Turnbull
* to use hash member access as resource title
2439 56 James Turnbull
* to use hash in default definition parameter or resource parameter if the type supports it (none for the moment).
2440 56 James Turnbull
2441 56 James Turnbull
It is not possible to use an hash as a resource title. This might be possible once we support compound resource title.
2442 85 Jacob Helwig
2443 85 Jacob Helwig
### The "in" syntax
2444 56 James Turnbull
2445 56 James Turnbull
From Puppet 2.6.0 you can also use the "in" syntax.  This operator allows
2446 56 James Turnbull
you to find if the left operand is in the right one. The left operand must
2447 56 James Turnbull
be a string, but the right operand can be:
2448 85 Jacob Helwig
2449 56 James Turnbull
* a string
2450 39 James Turnbull
* an array
2451 38 Luke Kanies
* a hash (the search is done on the keys)
2452 39 James Turnbull
2453 38 Luke Kanies
This syntax can be used in any place where an expression is supported:
2454 85 Jacob Helwig
2455 64 Nick Fagerlund
    $eatme = 'eat'
2456 64 Nick Fagerlund
    if $eatme in ['ate', 'eat'] {
2457 64 Nick Fagerlund
    ...
2458 64 Nick Fagerlund
    }
2459 64 Nick Fagerlund
2460 64 Nick Fagerlund
    $value = 'beat generation'
2461 85 Jacob Helwig
    if 'eat' in $value {
2462 38 Luke Kanies
      notice("on the road")
2463 85 Jacob Helwig
    }
2464 64 Nick Fagerlund
2465 64 Nick Fagerlund
### Pure Ruby Manifests
2466 64 Nick Fagerlund
2467 64 Nick Fagerlund
Puppet now supports pure Ruby manifests as equivalent to Puppet's custom language.  That is, you can now have Ruby programs along side your Puppet manifests.  As is our custom, it's a limited first version, but it covers most of the specification functionality of the current language.  For instance, here's a simple ssh class:
2468 85 Jacob Helwig
2469 38 Luke Kanies
2470 38 Luke Kanies
    hostclass :ssh do
2471 38 Luke Kanies
      package "ssh", :ensure => :present
2472 44 James Turnbull
      file "/etc/ssh/sshd_config", :source => "puppet:///ssh/sshd_config", :require => "Package[ssh]"
2473 85 Jacob Helwig
      service :sshd, :ensure => :running, :require => "File[/etc/ssh/sshd_config]"
2474 64 Nick Fagerlund
    end
2475 64 Nick Fagerlund
2476 64 Nick Fagerlund
2477 64 Nick Fagerlund
Similar to the 'hostclass' construct here, you can specify defined resource types:
2478 85 Jacob Helwig
2479 38 Luke Kanies
    define "apache::vhost", :ip, :docroot, :modperl => false do
2480 38 Luke Kanies
      file "/etc/apache2/sites-enabled/#{@name}.conf", :content => template("apache/vhost.erb")
2481 85 Jacob Helwig
    end
2482 64 Nick Fagerlund
2483 64 Nick Fagerlund
2484 85 Jacob Helwig
As you can see from this code, the parameters for the resources become instance variables inside of the defined resource types (and classes, now that we support parameterized classes).
2485 38 Luke Kanies
2486 85 Jacob Helwig
We can do nodes, too:
2487 64 Nick Fagerlund
2488 64 Nick Fagerlund
2489 85 Jacob Helwig
    node "mynode" do
2490 38 Luke Kanies
      include "apache"
2491 38 Luke Kanies
    end
2492 1
2493 1
2494 1
Ruby has become a first-class citizen alongside the existing external DSL.  That means anywhere you can put a manifest, you should be able to put ruby code and have it behave equivalently.  So, the 'ssh' class above could be put into '$modules/ssh/manifests/init.rb', the apache vhost type should be placed in '$modules/apache/manifests/vhost.rb', and the node should probably be in your 'site.pp' file.  You can also apply ruby manifests directly with puppet:
2495 85 Jacob Helwig
2496 64 Nick Fagerlund
2497 64 Nick Fagerlund
    puppet -e mystuff.rb
2498 64 Nick Fagerlund
2499 64 Nick Fagerlund
2500 64 Nick Fagerlund
Note that the Ruby support does not yet cover all of the functionality in Puppet's language.  For instance, there is not yet support for overrides or defaults, nor for resource collections.  Virtual and exported resources are done using a separate method:
2501 85 Jacob Helwig
2502 64 Nick Fagerlund
    virtual file("/my/file", :content => "something")
2503 64 Nick Fagerlund
2504 85 Jacob Helwig
2505 60 James Turnbull
All of the standard functions are also pulled into Ruby and should work fine -- e.g., 'include', 'template', and 'require'.
2506 60 James Turnbull
2507 60 James Turnbull
### Support for an elsif syntax
2508 60 James Turnbull
2509 60 James Turnbull
Allows use of an elsif construct:
2510 60 James Turnbull
2511 60 James Turnbull
      if $server == 'mongrel' {
2512 60 James Turnbull
          include mongrel
2513 85 Jacob Helwig
      } elsif $server == 'nginx' {
2514 60 James Turnbull
          include nginx
2515 60 James Turnbull
      } else {
2516 60 James Turnbull
          include thin
2517 60 James Turnbull
      }
2518 60 James Turnbull
2519 60 James Turnbull
2520 60 James Turnbull
### Audit Metaparameter
2521 60 James Turnbull
2522 60 James Turnbull
Puppet now supports an audit metaparameter in the style of Tripwire.
2523 60 James Turnbull
2524 60 James Turnbull
Using this new metaparameter we can specify our resource like:
2525 60 James Turnbull
2526 60 James Turnbull
    file { '/etc/hosts':
2527 60 James Turnbull
       audit => [ owner, group, mode ],
2528 60 James Turnbull
    }
2529 4 James Turnbull
2530 4 James Turnbull
Now instead of changing each value (though you can change it too if you wish) Puppet will instead generate auditing log messages, which are available in your standard Puppet reports:
2531 8 James Turnbull
2532 4 James Turnbull
    audit change: previously recorded value owner root has been changed to owner james
2533 1
2534 1
This allows you to track any changes that occur on resources under management on your hosts. You can specify this audit metaparameter for any resource and all their attributes and track users, groups, files, services and the myriad of other resources Puppet can manage.
2535 1
2536 1
You can also specify the special value of all to have Puppet audit every attribute of a resource rather than needing to list all possible attributes, like so:
2537 1
2538 24 James Turnbull
    file { '/etc/hosts':
2539 24 James Turnbull
       audit => all,
2540 24 James Turnbull
    }
2541 24 James Turnbull
2542 24 James Turnbull
You can also combine the audited resources with managed resources allowing you to manage some configuration items and simply track others. It is important to remember though, unlike many file integrity systems, that your audit state is not protected by a checksum or the like and is stored on the client in the state.yaml file. In future releases we will look at protecting and centralising this state data.
2543 24 James Turnbull
2544 25 James Turnbull
### Case and Selectors now support undef
2545 24 James Turnbull
2546 26 James Turnbull
The case and selector statements now support the undef syntax (see \#2818).
2547 26 James Turnbull
2548 26 James Turnbull
## Stored Configuration
2549 26 James Turnbull
2550 26 James Turnbull
Support is now added for using Oracle databases as a back-end for
2551 26 James Turnbull
your stored configuration.
2552 1
2553 1
## Facts
2554 40 James Turnbull
2555 40 James Turnbull
There are three new facts available in manifests:
2556 4 James Turnbull
2557 4 James Turnbull
* `$clientcert` - the name of the client certificate
2558 1
* `$module_name` - the name of the current module (see #1545)
2559 4 James Turnbull
* `$caller_module_name` - the name of the calling module (see #1545)
2560 4 James Turnbull
2561 85 Jacob Helwig
In addition all `puppet.conf` configuration items are now available as facts in your manifests.  These can be accessed using the structure:
2562 4 James Turnbull
2563 1
    $settings::setting_name
2564 15 James Turnbull
2565 15 James Turnbull
Where setting_name is the name of the configuration option you'd like to retrieve.
2566 1
2567 20 James Turnbull
## Types and Providers
2568 15 James Turnbull
2569 17 James Turnbull
Basic Windows support has been introduced...
2570 16 James Turnbull
2571 16 James Turnbull
A new provider for pkg has been added to support Solaris and
2572 16 James Turnbull
OpenSolaris (pkgadd).
2573 16 James Turnbull
2574 16 James Turnbull
A new package provider has been added to support AIX package management.
2575 16 James Turnbull
2576 16 James Turnbull
The augeas type has added the 'incl' and 'lens' parameters. These parameters allow loading a file anywhere on the filesystem; using them also greatly speeds up processing the resource.
2577 16 James Turnbull
2578 16 James Turnbull
## Binaries and Configuration
2579 16 James Turnbull
2580 16 James Turnbull
### Single Binary
2581 15 James Turnbull
2582 37 James Turnbull
Puppet is now available as a single binary with sub-arguments for the functions previously provided by the seperate binaries (the existing binaries remain for backwards compatibility).  This includes renaming several Puppet functions to better fit an overall model.
2583 37 James Turnbull
2584 15 James Turnbull
List of binary changes
2585 15 James Turnbull
2586 1
* puppetmasterd     ->   puppet master
2587 1
* puppetd           ->   puppet agent
2588 1
* puppet            ->   puppet apply
2589 59 James Turnbull
* puppetca          ->   puppet cert
2590 1
* ralsh             ->   puppet resource
2591 1
* puppetrun         ->   puppet kick
2592 1
* puppetqd          ->   puppet queue
2593 1
* filebucket        ->   puppet filebucket
2594 1
* puppetdoc         ->   puppet doc
2595 1
* pi                ->   puppet describe
2596 42 James Turnbull
2597 42 James Turnbull
This also results in a change in the puppet.conf configuration file.  The sections, previously things like [puppetd], now should be renamed to match the new binary names.  So [puppetd] becomes [agent].  You will be prompted to do this when you start Puppet. You will be prompted to do this when you start Puppet with a log message for each section that needs to be renamed.  This is merely a warning - existing configuration file will work unchanged.
2598 58 Todd Zullinger
2599 42 James Turnbull
### New options
2600 42 James Turnbull
2601 42 James Turnbull
A new option is available, ca\_name, to specify the name to use for
2602 42 James Turnbull
the Certificate Authority certificate. It defaults to the value of
2603 42 James Turnbull
the certname option (see
2604 42 James Turnbull
[http://projects.puppetlabs.com/issues/1507](http://projects.puppetlabs.com/issues/1507)).
2605 36 James Turnbull
2606 15 James Turnbull
A new option, dbconnections, is now available that specifies a
2607 15 James Turnbull
limit for the number of database connections made to remote
2608 58 Todd Zullinger
databases (postgreSQL, MySQL).
2609 1
2610 1
A new option, dbport, is now available that specifies the database port for remote database connections.
2611 58 Todd Zullinger
2612 43 Teyo Tyree
There's also a new option/feature that lets the puppet client use HTTP
2613 15 James Turnbull
compression (\-\-http_compression):
2614 1
2615 15 James Turnbull
Allow http compression in REST communication with the master. This setting might improve performance for agent -> master
2616 1
communications over slow WANs. Your puppetmaster needs to support compression (usually by activating some settings in a reverse-proxy in front of the puppetmaster, which
2617 1
rules out webrick).
2618 1
2619 1
It is harmless to activate this settings if your master doesn't support compression, but if it supports it, this setting might reduce  on high-speed LANs.
2620 1
2621 15 James Turnbull
### Binary changes
2622 15 James Turnbull
2623 15 James Turnbull
The puppetd (or puppet agent) binary now supports the \-\-detailed-exitcodes option
2624 15 James Turnbull
available in the puppet binary.
2625 58 Todd Zullinger
2626 1
The puppet agent will now create the ssl when passed the \-\-noop option.
2627 1
2628 1
Certificates cleaned with puppetca (or puppet cert) are now also revoked.
2629 1
2630 15 James Turnbull
The puppetca (puppet cert) and puppetd (puppet agent) binaries now have support for certificate
2631 15 James Turnbull
fingerprinting and support for specifying digest algorithms. To
2632 15 James Turnbull
display the fingerprint of a client certificate use:
2633 15 James Turnbull
2634 1
    $ puppetd --fingerprint
2635 58 Todd Zullinger
2636 4 James Turnbull
or
2637 4 James Turnbull
2638 4 James Turnbull
    $ puppet agent --fingerprint
2639 4 James Turnbull
2640 4 James Turnbull
To specify a particular digest algorithm use \-\-digest DIGESTNAME.
2641 8 James Turnbull
2642 1
To fingerprint a certificate with puppetca use:
2643 23 James Turnbull
2644 23 James Turnbull
    $ puppetca --fingerprint host.example.com
2645 23 James Turnbull
2646 23 James Turnbull
or
2647 23 James Turnbull
2648 23 James Turnbull
    $ puppet cert --fingerprint host.example.com
2649 23 James Turnbull
2650 23 James Turnbull
Also supported is the \-\-digest option.
2651 23 James Turnbull
2652 23 James Turnbull
The puppetdoc binary now documents inheritance between nodes, shows classes added via the require function and resources added via the realize function.
2653 23 James Turnbull
2654 45 Andrei Pozolotin
## Functions
2655 45 Andrei Pozolotin
2656 45 Andrei Pozolotin
The regsubst function now takes arrays as input (see \#2491).
2657 45 Andrei Pozolotin
2658 45 Andrei Pozolotin
## Reports
2659 45 Andrei Pozolotin
2660 45 Andrei Pozolotin
There is a new report type called `http`.  If you specify:
2661 45 Andrei Pozolotin
2662 45 Andrei Pozolotin
    reports = http
2663 49 Andrei Pozolotin
2664 45 Andrei Pozolotin
Then the new report processor will make a HTTP POST of the report in YAML format to a specified URL.  By default this URL is the report import URL for a local Puppet Dashboard installation.  You can override this with the new `reporturl` setting.
2665 45 Andrei Pozolotin
2666 45 Andrei Pozolotin
    reports = http
2667 45 Andrei Pozolotin
    reporturl = http://yoururl/post/
2668 45 Andrei Pozolotin
2669 45 Andrei Pozolotin
## Puppet Runner
2670 45 Andrei Pozolotin
2671 46 Andrei Pozolotin
In order for this to run at all:
2672 46 Andrei Pozolotin
2673 46 Andrei Pozolotin
    puppetrun --foreground --host XXX
2674 46 Andrei Pozolotin
2675 47 Andrei Pozolotin
you must alter auth.conf to include:
2676 48 Andrei Pozolotin
2677 46 Andrei Pozolotin
    path /run
2678 1
    method save
2679 1
    allow *
2680 47 Andrei Pozolotin
2681 47 Andrei Pozolotin
otherwise you will receive:
2682 47 Andrei Pozolotin
2683 47 Andrei Pozolotin
    Host $PUPPET failed: Error 403 on SERVER: Forbidden request: $MASTER(X.X.X.X) access to /run/$PUPPET [save] authenticated  at line 101
2684 46 Andrei Pozolotin
2685 46 Andrei Pozolotin
2686 45 Andrei Pozolotin
## Incompatibilities
2687 13 James Turnbull
2688 5 James Turnbull
PID files for puppet and master used to be named:
2689 5 James Turnbull
2690 5 James Turnbull
    puppetd.pid
2691 5 James Turnbull
    puppetmasterd.pid
2692 5 James Turnbull
2693 5 James Turnbull
new names are:
2694 5 James Turnbull
2695 5 James Turnbull
    agent.pid
2696 5 James Turnbull
    master.pid
2697 6 James Turnbull
2698 6 James Turnbull
2699 5 James Turnbull
2700 5 James Turnbull
2701 5 James Turnbull
2702 5 James Turnbull
# 0.25.5
2703 5 James Turnbull
2704 5 James Turnbull
## Binaries and Configuration
2705 5 James Turnbull
2706 5 James Turnbull
The default location for Puppet's dynamic files, the $vardir option,
2707 5 James Turnbull
has changed from /var/puppet to /var/lib/puppet. This is already the
2708 5 James Turnbull
default for the Fedora EPEL and Debian/Ubuntu packages and brings
2709 5 James Turnbull
Puppet into FHS compliance.
2710 5 James Turnbull
2711 5 James Turnbull
The default factpath is now $vardir/lib/facter/.
2712 5 James Turnbull
2713 5 James Turnbull
The "use_cached_catalog" option is available.  This determines whether to only use the cached catalog rather than compiling a new catalog on every run.  Puppet can be run with this enabled by default and then selectively disabled when a recompile is desired.  The option defaults to false.
2714 5 James Turnbull
2715 1
## Functions
2716 1
2717 1
The generate function now sets the working directory to the
2718 1
directory containing the specified command.
2719 5 James Turnbull
2720 1
## Types and Providers
2721 1
2722 1
You can now specify checksum => none in the file type to disable
2723 1
file check-summing.
2724 1
2725 1
## Error Messages
2726 1
2727 1
The "warning: Value of 'preferred_serialization_format' ('pson') is
2728 1
invalid, using default ('yaml')" is now a debug level message.
2729 1
2730 1
# 0.25.4
2731 1
2732 1
## Binaries and Configuration
2733 1
2734 1
- Pre- and Post- transaction hooks.
2735 1
2736 1
These hooks allow you to specify commands that should be run pre
2737 1
and post a Puppet configuration transaction. They are set with the
2738 1
prerun\_command and postrun\_command settings in the puppet.conf
2739 1
configuration file:
2740 1
2741 1
    prerun_command = /bin/runbeforetransaction
2742 1
    postrun_command = /bin/runaftertransaction
2743 1
2744 1
The command must exit with 0, i.e. succeed, otherwise the
2745 1
transaction will fail - if the pre command fails before the
2746 1
transaction is run and if the post command fails at the end of the
2747 1
transaction.
2748 1
2749 1
# 0.25.3
2750 1
2751 1
No major notes.
2752 1
2753 1
# 0.25.2
2754 1
2755 1
## Binaries and Configuration
2756 1
2757 1
Puppet now has the manage\_internal\_file\_permissions option which
2758 1
allows you to enable or disable Puppet management of internal
2759 1
files, for example those in /var/lib/puppet. When false Puppet will
2760 18 James Turnbull
NOT manage these files. Defualt is true.
2761 1
2762 1
The puppetdoc binary now works with Regex node names
2763 1
2764 1
Fix for temporary file issues
2765 1
([https://bugzilla.redhat.com/show\_bug.cgi?id=502881](https://bugzilla.redhat.com/show_bug.cgi?id=502881))
2766 1
2767 1
## Types and Providers
2768 1
2769 1
Cron type now supported on AIX
2770 1
2771 1
Mailist type is now working again
2772 1
2773 1
SELinux now supports contexts with upper case titles
2774 1
2775 1
When setting aliases using the host and sshkey types now use the host\_aliases attribute rather than alias.
2776 1
2777 1
## Error Messages
2778 1
2779 1
File serving permissions error messages enhanced
2780 1
2781 1
The debug format message has been changed and clarified from:
2782 1
2783 1
    debug: Format s not supported for Puppet::FileServing::Metadata; has not implemented method 'from_s'
2784 1
2785 1
to:
2786 1
2787 1
    debug: file_metadata supports formats: b64_zlib_yaml marshal pson raw yaml; using pson
2788 1
2789 1
## Dependencies
2790 1
2791 1
When running the tests you no longer need to use RSpec version
2792 1
1.2.2 but rather versions including and newer than.
2793 1
2794 1
## LDAP
2795 1
2796 1
There are now valid and proper OIDs in the LDAP puppet.schema that
2797 1
are unique and registered for Puppet.
2798 1
2799 1
# 0.25.1
2800 1
2801 1
## Functions
2802 1
2803 1
We've clarified that the new 'require' function only works for
2804 1
0.25.x clients. If the function is specified with 0.24.x or earlier
2805 1
clients the class will be included but the inherent dependency will
2806 1
not be created. A warning message will be generated informing you
2807 1
of this.
2808 1
2809 1
## Language
2810 1
2811 1
Node regular expression matching rules have been clarified you can
2812 1
see the rules
2813 1
[[Language\_Tutorial#matching-nodes-with-regular-expressions|Language
2814 1
Tutorial]] .
2815 1
2816 1
## Types and Providers
2817 1
2818 1
The Nagios serviceescalation type now supports the use of the
2819 1
servicegroup\_name attribute.
2820 1
2821 1
## Binaries and Configuration
2822 1
2823 1
The Puppet gem now installs all binaries to the 'bin' directory
2824 1
because Gems lack support for both a bin and sbin directory. Facter
2825 1
(version later than 1.5.1) is now also a dependency for the gem.
2826 1
2827 1
# 0.25.0
2828 1
2829 1
## Migration to REST
2830 1
2831 1
There are substantial changes in Puppet 0.25.0 and more changes to
2832 1
come in the future. Most of the changes in 0.25.0 are internal
2833 1
refactoring rather than behavioural. The 0.25.0 release should be
2834 1
fully backwards compatible behaviourally with the 0.24.x branch.
2835 1
2836 1
This means a 0.25.0 master will be able to manage 0.24.x clients.
2837 1
You will need, however, to upgrade both your master and your
2838 1
clients to take advantage of all the new features and the
2839 1
substantial gains in performance offered by 0.25.0.
2840 1
2841 1
The principal change is the introduction of Indirected REST to
2842 1
replace XML-RPC as the underlying Puppet communications mechanism.
2843 1
2844 1
This is a staged change with some functions migrated in this
2845 1
release and some in the next release. In the first stage of the
2846 1
Indirected REST implementation the following functions have been
2847 1
migrated:
2848 1
2849 1
-   Certificates
2850 1
-   Catalogue
2851 1
-   Reports
2852 1
-   Files
2853 1
2854 1
In 0.26.0 (the next release) the following remaining functions will
2855 1
be migrated:
2856 1
2857 1
-   Filebucket
2858 1
-   Resource handler
2859 1
-   Runner handler
2860 1
-   Status handler
2861 1
2862 1
The new REST implementation also comes with authorisation
2863 1
configuration in a similar style to the namespaceauth used for
2864 1
XML-RPC. This new authorisation is managed through the auth.conf
2865 1
file (there is an example file in the conf directory of the
2866 1
tarball). This does not yet fully replace the namespaceauth.conf
2867 1
file but will when the remaining handlers are migrated to REST. It
2868 1
works in a similar way to the namespaceauth.conf file and the
2869 1
example file contains additional documentation.
2870 1
2871 1
As a result of the introduction of REST and other changes you
2872 14 James Turnbull
should see substantial performance improvements in this release.
2873 1
These particularly include improvements in:
2874 1
2875 1
-   File serving
2876 14 James Turnbull
-   The performance of large graphs with lots of edges
2877 1
-   Stored configuration (see also Puppet Queuing below)
2878 1
2879 1
Other new features include (this is not a complete list - please
2880 1
see the Roadmap for all tickets closed in this release):
2881 1
2882 1
## Deprecations
2883 1
2884 1
Custom types and facts in modules have been moved from the
2885 1
module/plugins to module/lib. Please rename your directories.
2886 1
2887 1
The modules share and the module name must now be specified in source attributes of the
2888 1
file type, i.e:
2889 85 Jacob Helwig
2890 1
    file { "file":
2891 1
        source => "puppet://server/modules/module_name/file",
2892 1
    }
2893 1
2894 1
Binary-specific configuration files, such as puppetd.conf or
2895 1
puppetmasterd.conf are now totally deprecated and ignored.
2896 1
2897 1
## New Language Features
2898 1
2899 1
Regular expression matching is now possible in node definitions:
2900 1
2901 1
    node /web|db/ {
2902 1
        include blah
2903 1
    }
2904 1
2905 1
    node /^(foo|bar)\.example\.com$/ {
2906 1
        include blah
2907 1
    }
2908 1
2909 1
Puppet now also allows regular expressions in if statements with
2910 1
the use of the =\~ (match) and !\~ (not match) operators:
2911 1
2912 1
    if $uname =~ /Linux|Debian/ {
2913 1
       ...
2914 1
    }
2915 1
2916 1
Also available are ephemeral variables ($0 to $9) in the current
2917 1
scope which contain regex captures:
2918 1
2919 1
    if $uname =~ /(Linux|Debian)/ {
2920 85 Jacob Helwig
        notice("this is a $1 system")
2921 1
    }
2922 1
2923 1
Similar functionality is available in case and selector
2924 1
statements:
2925 1
2926 1
    $var = "foobar"
2927 1
    case $var {
2928 1
        "foo": {
2929 1
             notify { "got a foo": }
2930 1
        }
2931 1
        /(.*)bar$/: {
2932 1
             notify{ "hey we got a $1": }
2933 1
        }
2934 1
    }
2935 1
2936 1
    $val = $test ? {
2937 1
            /^match.*$/ => "matched",
2938 1
            default => "default"
2939 1
    }
2940 1
2941 1
## New functions
2942 1
2943 1
There are four new functions:
2944 1
2945 1
require - Similar to the include function but creates a dependency
2946 1
on the required class in the current class. This means the required
2947 1
class will be loaded before the current class is processed.
2948 1
2949 1
split - allows you to split strings and arrays
2950 1
2951 1
versioncmp - allows you to compare versions
2952 1
2953 1
shellquote - Quote and concatenate arguments for use in the shell,
2954 1
for example as part of Exec type commands.
2955 1
2956 1
## Configuration Versioning
2957 1
2958 1
A new configuration option, config\_version, is now available:
2959 58 Todd Zullinger
2960 1
    config_version = /usr/local/bin/return_version
2961 80 Jacob Helwig
2962 1
The option allows you to specify a command that returns a version
2963 65 Nick Fagerlund
for the configuration that is being applied to your hosts. The
2964 1
command should return a string, such as a version number or name.
2965 1
2966 1
Puppet then runs this command at compile time. Each resource is
2967 80 Jacob Helwig
marked with the value returned from this command. This value is
2968 1
also added to the log instance, serialised and sent along with any
2969 8 James Turnbull
report generated. This allows you to parse your report output and
2970 1
ascertain which configuration version was used to generate the
2971 1
resource.
2972 1
2973 1
## Command Line Compile & Apply
2974 1
2975 1
Puppet now has the capability to compile a catalogue and output it
2976 1
in JSON from the Puppet master. You can do this via the `--compile`
2977 1
command line option.
2978 1
2979 1
    # puppetmasterd --compile nodename
2980 1
2981 1
Corresponding with this feature is the ability to apply a JSON
2982 1
configuration from the puppet binary using the `--apply` option.
2983 1
2984 58 Todd Zullinger
    $ puppet --apply cataloguefile
2985 1
2986 1
Or you can use - to read the JSON in from standard input. Puppet
2987 1
will then compile and apply the configuration.
2988 1
2989 1
## Thin Stored Configuration
2990 1
2991 1
0.25.0 also introduces the concept of "thin" stored configurations.
2992 1
This is a version of stored configuration that only stores the
2993 1
facts and exported resources in the database. This will perform
2994 1
better than full stored configuration but because not all resources
2995 1
are available this may not suit all purposes.
2996 1
2997 1
Thin stored configurations are initiated by setting the
2998 1
thin\_storeconfigs option on the Puppet master or on the
2999 1
puppetmasterd command line using \-\-thin\_storedconfigs.
3000 1
3001 1
## Puppet Queuing
3002 1
3003 1
There is a new binary called puppetqd that supports queuing for
3004 1
stored configurations. You can read about how it works and how to
3005 1
implement it at:
3006 1
3007 1
[[Using Stored Configuration]]
3008 1
3009 1
Further documentation is in the README.queuing file in the
3010 1
tarball.
3011 1
3012 1
## Application Controller
3013 1
3014 1
All the logic has been moved out of the binary commands and added
3015 1
to an Application Controller. You can see the controller code at
3016 1
lib/puppet/application.rb and the logic for each application at
3017 1
lib/puppet/application/binaryname.rb.
3018 1
3019 1
## Types and Providers
3020 1
3021 1
The return values from the Exec type can now be specified as an
3022 1
array.
3023 1
3024 1
The SMF and daemontools service providers can now import a
3025 1
configuration file.
3026 1
3027 1
The mailist type is now supported on Red Hat, CentOS and Fedora
3028 1
distributions
3029 1
3030 1
The NetInfo provider has been deprecated for OSX in favour of the
3031 1
Directory Services provider.
3032 1
3033 1
## Binary Location Move
3034 1
3035 1
To bring Puppet more in line with general packaging standards the
3036 1
puppetd, puppetca, puppetrun, puppetmasterd, and puppetqd binaries
3037 1
now reside in the sbin directory rather than the bin directory when
3038 1
installed from the source package.
3039 1
3040 1
## Passenger
3041 1
3042 1
Ensure you have the latest version of the config.ru file from the
3043 1
ext/rack/files/ directory in the tarball.
3044 1
3045 1
## Rails
3046 1
3047 1
Rails versions up to 2.3.x are now supported. Rails version 2.2.2
3048 1
or greater is required.
3049 1
3050 1
# 0.24.9
3051 1
3052 1
## Binaries and Configuration
3053 1
3054 1
Fix for temporary file issues
3055 1
([https://bugzilla.redhat.com/show\_bug.cgi?id=502881](https://bugzilla.redhat.com/show_bug.cgi?id=502881))
3056 1
3057 1
# 0.24.8
3058 1
3059 1
## Functions
3060 1
3061 1
Added sprintf function
3062 1
3063 1
Added regsubst function
3064 1
3065 1
# 0.24.7
3066 1
3067 1
## Binary and Configuration
3068 1
3069 1
The puppetdoc binary has been updated to output manifest and module
3070 1
documentation
3071 1
3072 1
Removed conf/debian directory and Debian packaging information now
3073 1
maintained downstream
3074 1
3075 1
The puppetca binary can now clean unsigned certificates
3076 1
3077 1
Removed all the vendor gems
3078 1
3079 1
Added Rake tasks to support continuous integration
3080 1
3081 1
## Types and Providers
3082 1
3083 1
Added augeas type
3084 1
3085 1
Added MCX type
3086 1
3087 1
Add the macauthorization type
3088 1
3089 1
Add the directoryservice type
3090 1
3091 1
Deprecated the NetInfo nameservice provider
3092 1
3093 1
Added zfs, zpool types and branded zones support to the zones type
3094 1
3095 1
Added uninstall functionality to yum provider
3096 1
3097 1
Added preseed support to apt provider's uninstall and purge
3098 1
functions
3099 1
3100 1
Added versionable feature to the RPM provider
3101 1
3102 1
Replaced SELInux calls to binaries with Ruby SELinux bindings
3103 1
3104 1
Updates to the Nagios types
3105 1
3106 1
## Language and Facts
3107 1
3108 1
Added support for @doc type and manifest documentation support
3109 1
3110 1
Added multiline comment support
3111 58 Todd Zullinger
3112 1
Classes and nodes should set $name variables
3113 1
3114 1
## Functions
3115 1
3116 1
Add inline\_template function
3117 1
3118 8 James Turnbull
## Stored Configuration
3119 1
3120 1
The environment has been added to the stored configuration database
3121 1
structure. You will need to specify the dbmigrate = true in your
3122 58 Todd Zullinger
puppet.conf to ensure your database is upgraded to the new schema.
3123 1
3124 1
## Errata
3125 1
3126 1
\#1922: Severe breakage when using parser functions with complex
3127 1
arguments.
3128 1
3129 1
# 0.24.6
3130 1
3131 58 Todd Zullinger
## Dependencies
3132 1
3133 1
\#1553: Depends on Facter 1.5
3134 1
3135 1
## Binary and Configuration
3136 1
3137 1
Added \-\-detailed-exits option to puppet binary that adds specific
3138 58 Todd Zullinger
exit codes after runs.
3139 1
3140 58 Todd Zullinger
Log messages are now tagged with the log level, making it easier to
3141 58 Todd Zullinger
match messages in the tagmail report.
3142 1
3143 1
Added support for running Puppet inside a Rack application
3144 1
(mod\_rails) with Passenger and Apache
3145 1
3146 1
Fixed the puppetca \-\-clean \-\-all binary so that both signed and
3147 8 James Turnbull
unsigned certificates are cleaned.
3148 1
3149 8 James Turnbull
Moved individual functions out of functions.rb into
3150 1
lib/puppet/parser/functions directory. New functions should be
3151 1
created in this directory.
3152 1
3153 8 James Turnbull
Added the -P/\-\-ping option to puppetrun.
3154 1
3155 8 James Turnbull
Allow specification of \-\-bindir \-\-sbindir \-\-sitelibdir \-\-mandir
3156 1
\-\-destdir in installation
3157 8 James Turnbull
3158 1
## Language and Facts
3159 1
3160 8 James Turnbull
Allow multiple overrides in one statement
3161 1
3162 1
Fixed \#1585 - Allow complex 'if' and variable expressions
3163 1
3164 8 James Turnbull
Fixed \#1584 - Added support for appended variables
3165 1
3166 8 James Turnbull
## Types and Providers
3167 1
3168 1
Feature \#1624 - Added RBAC roles to solaris user provider
3169 1
3170 1
Fixed \#1586 - Specifying "fully qualified" package names in Gentoo
3171 1
3172 8 James Turnbull
Fixed \#1530 - ssh\_authorized\_keys provider does not crash anymore
3173 1
on SSH type 1 keys
3174 1
3175 1
Fixes \#1455 - Adds HP-UX support for user type
3176 1
3177 1
Added daemontools and runit providers for service type
3178 1
3179 58 Todd Zullinger
Fixed \#1508 - Added HP-UX package provider
3180 58 Todd Zullinger
3181 1
Fixed \#1456 - add proxy configuration capability to yum repo
3182 1
3183 1
# 0.24.5
3184 1
3185 1
## Binary and Configuration
3186 1
3187 1
Added the catalog_format configuration option which accepts the
3188 1
yaml or marshal options. This option allows you to switch the
3189 1
catalog formatting from YAML to Marshal. Marshal formatting should
3190 1
provide significant performance enhancement over YAML.
3191 1
3192 1
The return code from waitpid now right shifted 8 bits.
3193 1
3194 1
Added support for the \-\-all option to puppetca \-\-clean. If puppetca
3195 1
\-\-clean \-\-all is issued then all client certificates are removed.
3196 1
3197 1
## Environments
3198 58 Todd Zullinger
3199 1
The default environment is now production.
3200 1
3201 1
## Types and Providers
3202 1
3203 1
The interface type is buggy and has been disabled.
3204 1
3205 1
A native type type for managing ssh authorized\_keys files is
3206 1
available
3207 1
3208 1
The gem package type can now specify source repositories.
3209 1
3210 1
The service type now supports HP-UX.
3211 1
3212 1
On Red Hat instead of deleting the init scripts (with chkconfig
3213 1
\-\-del) we disable it with chkconfig service off, and do the same
3214 1
for enable => true;
3215 1
3216 1
Added LDAP providers for users and groups.
3217 1
3218 1
## Functions
3219 1
3220 1
Added SHA1 function from DavidS to core
3221 1
3222 1
## Language and Facts
3223 1
3224 1
Facts in plugin directories should now be autoloaded, as long as
3225 1
you're using Facter 1.5.
3226 1
3227 1
Aliases to titles now work for resources.
3228 1
3229 1
Modified the 'factpath' setting to automatically configure Facter
3230 1
to load facts there if a new enough version of Facter is used.
3231 1
3232 1
## Modules
3233 1
3234 1
Templates in the templatedir are preferred to module templates.
3235 1
3236 1
## LDAP
3237 1
3238 1
Removed support for the 'node\_name' setting in LDAP and external
3239 1
node lookups.
3240 1
3241 1
## Nodes
3242 1
3243 1
Removed support for 'default' nodes in external nodes. LDAP nodes
3244 1
now use the certificate name, the short name, and 'default', but
3245 1
external nodes just use the certificate name and any custom
3246 1
terminus types will use just the certificate name.
3247 1
3248 1
## Virtual and Exported/Collected Resources
3249 1
3250 1
Exporting or collecting resources no longer raises an exception
3251 1
when no storeconfigs is enabled, it just produces a warning.
3252 1
3253 1
# 0.24.4
3254 1
3255 1
## Binary and Configuration
3256 1
3257 1
The http keep-alive is now disabled by default. There is now a
3258 1
constant in Puppet::Network::HttpPool that will disable or enable
3259 1
this feature but it you enable it you may be at risk of corruption,
3260 1
especially in file serving.
3261 1
3262 1
The yamldir is automatically created by the server now that it's in
3263 1
the puppetmasterd section rather than a separate yaml section.
3264 1
3265 1
## Types and Providers
3266 1
3267 1
In the OpenBSD package provider, assume a source ending in a /
3268 1
indicates it is a directory, and pass it to pkg\_add via PKG\_PATH.
3269 1
Allows pkg\_add to resolve dependencies, and make it possible to
3270 1
specify packages without version numbers.
3271 1
3272 1
Provider suitability is now checked at resource evaluation time,
3273 1
rather than resource instantiation time. This means that you don't
3274 1
catch your "errors" as early, but it also means you should be able
3275 1
to realistically configure a whole host in one run.
3276 1
3277 1
## Documentation
3278 1
3279 1
Puppet now has man pages available. These are recreated at each
3280 1
release. They are located in the man directory and are installed
3281 1
into mandir.
3282 1
3283 1
# 0.24.3
3284 1
3285 1
## Languages and Facts
3286 1
3287 1
Downloading plugins and facts now ignores noop. Note that this
3288 1
changes the behaviour of a resource's noop setting. The resources
3289 1
noop setting will now alway override the global setting
3290 1
(previously, whichever was true would win).
3291 1
3292 1
Host names can now have dashes anywhere.
3293 1
3294 1
## Binaries and Configuration
3295 1
3296 1
The CA serial file will no longer ever be owned by root.
3297 1
3298 1
## External Nodes
3299 1
3300 1
External node commands can specify an environment and Puppet will
3301 1
now use it.
3302 1
3303 1
## LDAP Nodes
3304 1
3305 1
LDAP nodes now support environments, and the schema has been
3306 1
updated accordingly.
3307 1
3308 1
# 0.24.2
3309 1
3310 1
## Plugins
3311 1
3312 1
Autoloading now searches the plugins directory in each module, in
3313 1
addition to the libdir directory. The libdir directory is also
3314 1
deprecated, but supported for now to give people a chance to
3315 1
convert.
3316 1
3317 1
## Virtual Resources
3318 1
3319 1
Virtual defined types are no longer evaluated. This introduces a
3320 1
behaviour change, in that you previously could realize a resource
3321 1
within a virtual defined resource, and now you must realize the
3322 1
entire defined resource, rather than just the contained resource.
3323 1
3324 1
## Tags
3325 1
3326 1
The full name of qualified classes and the class parts are now
3327 1
added as tags. This is supported by the new Tagging module.
3328 1
3329 1
## Binaries and Configuration
3330 1
3331 1
The rundir directory permissions are again set to 1777.
3332 1
3333 1
The yamldir setting has been moved to its own yaml section. This
3334 1
should keep the yamldir from being created on clients.
3335 1
3336 1
## Language and Facts
3337 1
3338 1
Classes can once again be included multiple times.
3339 1
3340 1
Exec resources must now have unique names, although the commands
3341 1
can still be duplicated. This is easily accomplished by just
3342 1
specifying a unique name with whatever (unique or otherwise)
3343 1
command you need.
3344 1
3345 1
There is a change in Puppet's parser - the order of statement
3346 1
evaluation is no longer changed. This means case statements can now
3347 1
set variables that can be used by other variables.
3348 1
3349 1
## Types and Providers
3350 1
3351 1
Added built-in support for Nagios types using Naginator to parse
3352 1
and generate the files.
3353 1
3354 1
The package type (and Puppet overall) is now compatible with gems
3355 1
1.0.1.
3356 1
3357 1
You can now copy links using the file type.
3358 1
3359 1
Removed the loglevels from the valid values for logoutput in the
3360 1
exec resource type -- the log levels are specified using the
3361 1
loglevel parameter, not logoutput.
3362 1
3363 1
# 0.24.1
3364 1
3365 1
## Binaries and Configuration
3366 1
3367 1
Removed the ability to disable http keep-alive.
3368 1
3369 1
Removed warning about deprecated explicit plugins mounts.
3370 1
3371 1
# 0.24.0 (misspiggy)
3372 1
3373 1
## External Nodes
3374 1
3375 1
External node support now requires that you set the node\_terminus
3376 1
setting to exec:
3377 1
3378 1
    node_terminus = exec
3379 1
3380 1
External nodes can now co-exist with manifest-based nodes.
3381 1
Previously you had to select one or the other.
3382 1
3383 1
## LDAP Nodes
3384 1
3385 1
LDAP nodes can now co-exist with manifest-based nodes. Previously
3386 1
you had to select one or the other.
3387 1
3388 1
## Plugins
3389 1
3390 1
Added plugins mount - see PluginsInModules on the wiki for
3391 1
information.
3392 1
3393 1
## Certificates
3394 1
3395 1
Certificates now always specify a subjectAltName, but it defaults
3396 1
to \*\`, meaning that it doesn't require DNS names to match.&nbsp;
3397 1
You can override that behaviour by specifying a value for the
3398 58 Todd Zullinger
\`\`certdnsnames configuration option which will then require that
3399 1
hostname as a match.
3400 1
3401 1
The behaviour of the certdnsnames setting has changed. It now
3402 1
defaults to an empty string, and will only be used if it is set to
3403 1
something else. If it is set, then the host's FQDN will also be
3404 1
added as an alias. The default behaviour is now to add puppet and
3405 1
puppet.$domain as DNS aliases when the name for the cert being
3406 1
signed is equal to the signing machine's name, which will only be
3407 1
the case for CA servers. This should result in servers always
3408 1
having the alias set up and no one else, but you can still override
3409 1
the aliases if you want.
3410 1
3411 1
## Mongrel
3412 1
3413 1
Changed the behaviour of \-\-debug to include Mongrel client
3414 1
debugging information. Mongrel output will be written to the
3415 1
terminal only, not to the puppet debug log.
3416 1
3417 1
## Language and Facts
3418 58 Todd Zullinger
3419 1
The node scope is now above all other scopes besides the main
3420 58 Todd Zullinger
scope, which should help make its variables visible to other
3421 58 Todd Zullinger
classes, assuming those classes were not included in the node's
3422 58 Todd Zullinger
parent.
3423 1
3424 1
Relationship metaparameters :notify, :require, :subscribe, and
3425 58 Todd Zullinger
:before now stack when they are collecting metaparameter values
3426 1
from their containers. For instance, if a resource inside a
3427 1
definition has a value set for require, and you call the definition
3428 1
with require, the resource gets both requires, where before it
3429 1
would only retain its initial value.
3430 1
3431 1
## Binaries and Configuration
3432 1
3433 1
Added the \-\-no-daemonize option to puppetd and puppetmasterd which
3434 1
prevents both binaries from daemonizing. If you use daemontools or
3435 1
runit you must pass the \-\-no-daemonize to puppetd and
3436 1
puppetmasterd. Additionally, the default behavior of \-\-verbose and
3437 1
\-\-debug no longer cause puppetd and puppetmasterd to not
3438 1
daemonize.
3439 1
3440 1
The \-\-use-nodes and \-\-no-nodes options are now obsolete. Puppet
3441 1
automatically detects when nodes are defined, and if they are
3442 1
defined it will require that a node be found, else it will not look
3443 1
for a node nor will it fail if it fails to find one.
3444 1
3445 1
You now must specify an environment and you are required to specify
3446 1
the valid environments for your site.
3447 1
3448 1
The http\_enable\_post\_connection\_check added as a configuration
3449 1
option for puppetd. This defaults to true, which validates the
3450 1
server SSL certificate against the requested host name in new
3451 1
versions of Ruby.
3452 58 Todd Zullinger
3453 1
## Types and Providers
3454 1
3455 1
Added k5login type.
3456 1
3457 1
Removed type and running as valid attributes from the service types
3458 1
as they are both deprecated.
3459 1
3460 1
Modified how services manage their list of paths. Services now
3461 1
default to the paths specified by the provider classes.
3462 1
3463 1
# 0.23.2
3464 1
3465 1
## Binaries and Configuration
3466 1
3467 1
The \-\-gen\_config option now generates a configuration with all
3468 1
parameters under a heading that matches the relevant process name,
3469 1
rather than keeping section headings.
3470 1
3471 1
## Types and Providers
3472 1
3473 1
Added support for managing interfaces on Red Hat.
3474 1
3475 1
# 0.23.1 (beaker)
3476 1
3477 1
## Language and Facts
3478 1
3479 1
You can now specify relationships to classes, which work exactly
3480 1
like relationships to defined types:
3481 1
3482 1
    require => Class[myclass]
3483 1
3484 1
This works with qualified classes, too.
3485 1
3486 58 Todd Zullinger
Added the +> syntax to resources, so parameter values can be added
3487 1
to.
3488 1
3489 1
Hostnames can now be double quoted.
3490 1
3491 1
Both class and node names must both now be unique, for example you
3492 1
cannot have a node and class with the same name.
3493 1
3494 1
## Exported/Collected Resources
3495 1
3496 1
You can now do simple queries in a collection of exported
3497 1
resources. You still cannot do multi-condition queries, though.
3498 1
3499 1
## Binaries and Configuration
3500 1
3501 1
Running puppetca with \-\-clean now exits with a non-zero code if it
3502 1
cannot find any host certificates to clean.
3503 1
3504 1
The Rails log level can now be set via the rails\_loglevel
3505 1
parameter.
3506 1
3507 1
Puppet clients now have http proxy support.
3508 1
3509 1
## Types and Providers
3510 1
3511 1
Added the maillist type for managing mailing lists.
3512 1
3513 1
Added a mailalias type for managing mail aliases.
3514 1
3515 1
## Modules
3516 1
3517 1
Added autoloading of modules - you can now 'include' classes from
3518 1
modules without ever needing to specifically load them.
3519 1
3520 1
## Plugins
3521 1
3522 1
The configuration client now pulls libraries down to $libdir, and
3523 1
all autoloading is done from there with full support for any
3524 1
reloadable file, such as types and providers. This is not backward
3525 1
compatible -- if you're using pluginsync you'll need to disable it
3526 1
on your clients until you can upgrade them.
3527 1
3528 1
# 0.23.0
3529 1
3530 1
## Functions
3531 1
3532 1
Fixed functions so that they accept most other rvalues as valid
3533 1
values.
3534 1
3535 1
## Nodes
3536 1
3537 1
From 0.23.0 only ONE node source can be used - you can either use
3538 1
LDAP, code, or an external node program, but not more than one.
3539 1
3540 1
## LDAP Nodes
3541 1
3542 1
LDAP node support has two changes, first, the "ldapattrs" attribute
3543 1
is now used for setting the attributes to retrieve from the server
3544 1
(in addition to required attributes), and second, all retrieved
3545 1
attributes are set as variables in the top scope. This means you
3546 1
can set attributes on your LDAP nodes and they will automatically
3547 58 Todd Zullinger
appear as variables in your configurations.
3548 1
3549 1
## External Nodes
3550 1
3551 1
External node support has been completely rewritten - this breaks
3552 1
compatibility with earlier versions and older external node scripts
3553 1
will not work. External node scripts must now generate a YAML dump
3554 1
of a hash, with "classes" and "parameters" keys. The classes should
3555 1
be an array, and the parameters should be a hash. The external node
3556 1
program has no support for parent nodes -- the script must handle
3557 1
that on its own.
3558 1
3559 1
## Stored Configuration
3560 8 James Turnbull
3561 1
Reworked the database schema used to store configurations with the
3562 8 James Turnbull
\-\-storeconfigs option.
3563 1
3564 1
## File Locations
3565 1
3566 1
Changed the location of the classes.txt to the state directory.
3567 1
3568 1
Moved puppetd and puppetmasterd to sbin.
3569 1
3570 1
## Types and Providers
3571 1
3572 1
Added a package provider called appdmg able to install .app
3573 1
packages on .dmg files on OS X.
3574 1
3575 1
Added fink package provider (\#642), as provided by 'do'.
3576 1
3577 1
Marked the dpkg package provider as versionable (\#647).
3578 1
3579 1
## Language and Facts
3580 58 Todd Zullinger
3581 1
Added an 'undef' keyword, which will evaluate to "" within strings
3582 1
but when used as a resource parameter value will cause that
3583 1
parameter to be evaluated as undefined.
3584 1
3585 1
Tags, definitions, and classes can now be a single character.
3586 1
3587 1
## Binaries and Configuration
3588 1
3589 1
Significantly reworking configuration parsing. Executables all now
3590 1
look for puppet.conf rather than the older configuration
3591 58 Todd Zullinger
binary-specific configuration files. The old-style configuration
3592 1
files will be parsed if they are present, although they throw a
3593 1
deprecation warning.
3594 1
3595 1
Transaction summaries are now available with the \-\-summarize
3596 1
option. These are useful for getting a quick idea of what happened
3597 1
in a transaction. Currently only useful on the client or with the
3598 1
puppet interpreter.
3599 1
3600 1
Added the dynamicfact configuration option; any facts in a
3601 1
comma-separated list will be ignored when comparing facts to see if
3602 1
they have changed and thus whether a recompile is necessary.
3603 1
3604 1
Added a splay option to randomly distribute client connections. The
3605 1
value is random but cached. It defaults to the runinterval but can
3606 1
be tuned with \-\-splaylimit. It's disabled when running under \-\-test
3607 1
in puppetd.
3608 1
3609 1
# 0.22.4
3610 1
3611 1
## Modules
3612 1
3613 1
Modules no longer return directories in the list of found
3614 1
manifests.
3615 1
3616 1
## Types and Providers
3617 1
3618 1
The crontab provider now defaults to root when there is no USER set
3619 1
in the environment.
3620 1
3621 1
The useradd provider for the user type can now manage passwords. No
3622 1
other providers can, at this point.
3623 1
3624 1
## Language and Facts
3625 1
3626 1
Added a syntax for referring to variables defined in other classes
3627 1
(e.g., $puppet::server).
3628 1
3629 1
# 0.22.3
3630 1
3631 1
## Binaries and Configuration
3632 1
3633 1
Added a stand-alone filebucket client, named filebucket.
3634 1
3635 1
## Types and Providers
3636 1
3637 1
The -M option is no longer added when home directories are being
3638 1
managed on Red Hat with the user type.
3639 1
3640 1
# 0.22.2 (grover)
3641 1
3642 1
## Language and Facts
3643 1
3644 1
Definitions now support both 'name' and 'title', just like any
3645 1
other resource type.
3646 1
3647 1
Import statements can now specify multiple comma-separated
3648 1
arguments:
3649 1
3650 1
    import apache, mongrel, squid
3651 1
3652 1
Changed the servername fact set on the server to use the server's
3653 1
fqdn, instead of the short-name.
3654 1
3655 1
## File Locations
3656 1
3657 58 Todd Zullinger
Changing the location of the configuration cache. It now defaults
3658 1
to being in the state directory, rather than in the configuration
3659 1
directory.
3660 1
3661 1
## Mongrel
3662 1
3663 1
Support for Mongrel added. Currently you need to start each
3664 1
individual process and it requires you setup a proxy in front of
3665 1
the mongrel processes.
3666 1
3667 1
## Binaries and Configuration
3668 1
3669 1
Renamed x2puppet to ralsh.
3670 1
3671 1
The bind address for puppetmasterd can now be specified with
3672 1
\-\-bindaddress.
3673 1
3674 1
Added the ignorecache option to tell puppetd to ignore the cache
3675 1
and force a recompile.
3676 1
3677 1
## Certificate Authorities
3678 1
3679 1
You can now run seperate Certificate Authorities rather than using
3680 1
the inbuilt CA.
3681 1
3682 1
## Functions
3683 1
3684 1
Added a file() function to read in files with no interpolation. The
3685 1
first found file has its content returned.
3686 1
3687 1
Added the generate() function which sets values to the result of an
3688 1
external command.
3689 1
3690 1
Functions can now be called with no arguments.
3691 1
3692 1
## Types and Providers
3693 1
3694 1
When doing file recursion, ensure only affects the top-level
3695 1
directory.
3696 1
3697 1
Users can now manage their home directories, using the managehome
3698 1
parameter.
3699 1
3700 1
Using the package type you can now purge apt and dpkg packages.
3701 1
3702 1
Made up2date the default for RHEL \< 4 and yum the default for the
3703 1
rest.
3704 1
3705 1
The yum provider now supports versions.
3706 1
3707 1
Switched apt/aptitide to using "apt-cache policy" instead of
3708 1
"apt-cache showpkg" for determining the latest available version.
3709 1
3710 1
States have been renamed to Properties.
3711 1
3712 1
# 0.22.1 (kermit)
3713 1
3714 1
## Resource Relationships
3715 1
3716 1
Explicit relationships now override automatic relationships,
3717 1
allowing you to manually specify deletion order when removing
3718 1
resources.
3719 1
3720 1
Resources with dependencies can now be deleted as long as all of
3721 1
their dependencies are also being deleted.
3722 1
3723 1
## Language and Facts
3724 1
3725 1
Downcasing of facts can be selectively disabled.
3726 1
3727 1
## Types and Providers
3728 1
3729 1
The netinfo mounts provider was commented out, because it really
3730 1
doesn't work at all.
3731 1
3732 1
# 0.22.0
3733 1
3734 1
## Types and Providers
3735 1
3736 1
Added the resources type which includes the ability to purge
3737 1
unwanted resources.
3738 1
3739 1
All providers now directly execute commands instead of going
3740 1
through a sub-shell - this means arguments don't need to be quoted
3741 1
or escaped.
3742 1
3743 1
## Stored Configuration
3744 1
3745 1
Export and collect updated making the database incompatible with
3746 1
the 0.20 version. You will need to re-create your database.
3747 1
3748 1
## Language and Facts
3749 1
3750 1
Facts are no longer down-cased and the language is
3751 1
case-insensitive.
3752 1
3753 1
# 0.20.0
3754 1
3755 1
## Virtual and Exported/Collected Resources
3756 1
3757 1
Virtual resources are now represented by single sigils, @user, and
3758 1
exported/collected resources are represented by double sigils,
3759 1
@@sshkey.
3760 1
3761 1
## Resource Relationships
3762 1
3763 1
Resources relationships are now identified by capitalizing the
3764 1
resource like so:
3765 1
3766 1
    File["/etc/passwd"]