layout | toc_levels | title |
---|---|---|
default |
1234 |
Puppet 4.5 Release Notes |
This page lists the changes in Puppet 4.5 and its patch releases.
Puppet's version numbers use the format X.Y.Z, where:
- X must increase for major backwards-incompatible changes
- Y can increase for backwards-compatible new functionality
- Z can increase for bug fixes
Read the Puppet 4.0 release notes, since they cover breaking changes since Puppet 3.8.
Also of interest: the Puppet 4.4 release notes and Puppet 4.3 release notes.
Released July 20, 2016.
A minor bug fix release in the Puppet 4.5 series.
- PUP-4904: Previously, the command
puppet describe -s ssh_authorized_key
produced garbage output because of long lines of text. This has been fixed.
Released June 14, 2016.
A bug fix release in the Puppet 4.5 series.
-
PUP-6279: It was not possible to call the type() function using postfix notation, for example
1.type()
would not work, buttype(1)
did. Now both work. -
Error handling for attempts to form relationships with undef resources was improved in PUP-6028. This led to a problem with code using
create_resources
and the stdlib functionsensure_resource
,ensure_resources
, andensure_packages
. This combination could feed an undef resource reference into the catalog, and is now always treated as an error.The problem manifests itself as the error message:
No title provided and "" is not a valid resource reference
For more information, see PUP-6385.
Released June 1, 2016.
A bug fix release in the Puppet 4.5 series.
A regression was found that caused undef to be equal to a literal undef when running on JRuby. This in turn is caused in what appears to be a discrepancy in the implementations of String and Symbol in MRI vs. JRuby.
Users writing Ruby code should be aware that String == Symbol
is different than Symbol == String
and that the safe way to make such comparisons until discrepancies are solved (or before Puppet 5.0.0) should compare symbols using :undef.equal?(x)
rather than :undef == x
(which will fail), and x == :undef
(since that triggers a slower code path on JRuby).
-
PUP-6354: The Enum type did not make a unique set of its entries, which could lead to surprises when iterating its content, for example
Enum[a,b,a]
would contain 'a' twice. -
PUP-6339: If data in a module using "data in modules" depended on node/fact/compilation specific input it would not get the correct data if environment timeout was set to greater than 0. It would instead produce the value for the node for which a catalog was compiled in that environment's life cycle. Modules having only static data were not affected by this problem.
-
PUP-6321: A regression from Puppet 4.4 caused types that used autorequire to fail when the referenced set contained undef entries. This could also be the cause of other errors, although none have been reported at this time.
-
PUP-6320: A bad type mismatch message was produced when size constraint on Array was not met. It now clearly states that it was the size of the array that caused the failure.
-
PUP-6319: A bad type mismatch message was produced when size constraint on hash was not met. It now clearly states that it was the size of the hash that caused the failure.
Released May 17, 2016.
Using puppet module generate
now creates an examples directory instead of a tests directory.
Accessing data in nested structures could be difficult and required conditional logic to test for missing or optional parts of a structure. Three functions have been added to make such tasks easier; 'dig', 'then' and 'lest', which also combine nicely with the existing 'with' and 'assert_type' functions.
The functionality of the dig function is similar to the .
notation used to access details in lookups.
SemVer and SemVerRange have been added to the Puppet Type System. This makes it possible to directly work with version related values in the Puppet language. Given version strings are validated and comparison operators (<, >, <=, =>, ==, !=, =, !), as well as the in-operator and case expression option matching works with these objects.
Instances of SemVer and SemVerRange are created with the new
function support which also supports directly calling the type. As an example a new SemVer can be created like this:
SemVer('>=1.0.0 <2.0.0')
The lookup CLI tool and lookup function now handles lookup of keys with a .
(dot) as a sub-lookup. Previously dots in keys were used verbatim. After this change it is required to quote the key (or part of the key) to get verbatim lookup of a key containing dots. It is now also possible to have Hiera style interpolation in data - thus making Hiera 3.x data files fully compatible with the new data in environments and modules implementation.
It is now possible to create new instances of types by calling the function new
or by directly calling a type (an upper case name) e.g. MyType.new(<args-by-position>)
, or MyType({ <args-by-name>})
.
With the new --strict=[warn, error, ignore]
option in Puppet 4.5.0 you get warnings (or errors) when there is an attempt to set the same hash key more than once in the same hash.
Turning on --strict
also turns on --strict_variables
.
This enables Puppet to be as picky as possible when parsing, validating and compiling a catalog. Additional strictness may be introduced in minor releases (x.y) but not in maintenance releases (x.y.z).
The --strict option now also raises an error if a class is redefined. The existing behavior of two classes with the same name silently being merged is now deprecated and will be removed in the next major release. The result of the current (now deprecated) behavior depends on the order the definitions are loaded, and if the class was included before or after the merge.
The 4.x Function API for Ruby functions now has a mechanism that allows defining local complex types. This helps avoid long strings and repetition when specifying the data types of function parameters.
A new setting has been added called always_retry_plugins
. It defaults to true, which is generally the correct behavior for the agent. Puppet Server will set it to false to take advantage of some additional caching for failures during loading of types. Users that are using passenger will want to set this in their config.ru by adding a line such as Puppet[:always_retry_plugins] = false
.
The always_retry_plugins
setting also replaces the always_cache_features
setting, which is now deprecated. If users are setting always_cache_features
to true, they will want to replace that with always_retry_plugins=false
.
It is now possible to assign to multiple variables at once from the corresponding variables in a class scope by using the syntax:
[ $var1, $var2 ] = Class['classfoo::params']
Which has the same effect as:
$var1 = $clasfoo::params::var1
$var2 = $clasfoo::params::var2
An error is raised if the referenced variables do not exist as a variable or parameter in the referenced class.
Previously, all non data types were considered to be a resource type. The introduction of type aliases made it possible to validate all type references. This means that references to undefined types will be caught everywhere during compilation, not just when attempting to create a resource of that type or when forming a relationship.
The default location of hiera.yaml has changed to the $confdir
. Puppet now looks for hiera.yaml in $codedir
first, then $confdir
.
-
PUP-5844: In preparation for future features in Puppet, the abstract type
Object
has been added to the type system. -
PUP-6099: Previously, mount resources didn't generate automatic dependencies for associated file resources (via autorequires logic). This improvement adds those automatic dependencies.
- PUP-6122: The
resource_types
endpoint has been deprecated in favor of theenvironment_classes
endpoint in Puppet Server.
-
PUP-5802: Previously, a bug in the yum provider would cause it to incorrectly interpret epoch values of package versions as 0. Now the epoch is properly parsed from the version string.
-
PUP-4760: Managing service resources will no longer query their status if knowledge of that status is not needed, such as when 'ensure' is not specified in the resource. This provides a small performance improvement.
-
PUP-6251: Changes to the representation of empty array and hashes led to problems in that it became impossible to state these types. Both
Array[0,0]
, andArray[T, 0,0]
resulted in errors. -
PUP-5979: A regression was detected in the
regsubst
function in that it used to support a hash replacement mapping, but this broke in 4.x. The functionality is now restored. -
PUP-6142: Warnings from ModuleLoader regarding unresolved module dependencies are now controlled by the Puppet
--strict
setting. When set to 'off', no warnings or errors are produced for unresolved dependencies, and when set to 'warning' one warning per unresolved module is issued per lifetime of a compile service. When set to error, compilation will stop with an error. -
PUP-5992: The Puppet service resource type supports attributes
start
,stop
, andstatus
, that when set, specify commands to start, stop and test the status (running or stopped) of the service. Thestatus
attribute was not overriding the default behvavior. With this fix it now does. -
PUP-3740: Puppet 4 introduced a requirement on Ruby 1.9.3 or greater, however the gemfile didn't properly state that requirement. As of Puppet 4.5.0 it now does.
-
PUP-6059: A potential race condition verifying file checksums on GlusterFS has been fixed.
-
PUP-6120: The Pip package provider's
ensure=latest
is now done with pip, so it can be done with custom PyPI repositories. -
PUP-6050: The lookup command line tool did not handle the
--unpack-arrays
option correctly and it did not work at all because of this. There were also other minor problems with the documentation that are now fixed.
Note: The
--unpack-arrays
option has strange behavior, even though it now "works" this experimental feature will be removed in the next maintenance release.
-
PUP-6157: Error messages and other output of data type information could sometimes display a Variant type having only a single variant. While correct, this verbose output is now reduced to that single type.
-
PUP-6230: A regression was fixed where explicit nil values in Hiera data files used in modules and environments were turned into an empty hash by mistake.
-
PUP-6132: Puppet 4.4.0 introduced a new library for managing Mac plists, but as a side-effect it degraded formatting when updating those files. Restored prettier formatting.
-
PUP-5968: Comparing symbols to strings (or other types) in Ruby code is deprecated. This functionality was provided by a monkey patch in a Ruby dependency that Puppet no longer requires.
-
PUP-5616: With puppet device, one could declare a resource which would never converge. In addition, some underlying errors were caught and not shown to the user. Both are fixed here.
-
PUP-5353: Previously, the Puppet service resource attempted to enable or disable static services on systemd. This resulted in erroneous change notifications.
This fix corrects the problem. Changing the
enable
parameter for a static service no longer triggers a change and adebug
message is logged." -
PUP-5296, PUP-5825: Previously, SysVinit services running on RedHat systems which use systemd as the default init system were not being properly queried for
enable
status by the systemd provider. The provider has been updated to use a backwards-compatiblesystemctl
command to ensure all services can be properly queried. -
PUP-5025: Previously, if the ensure property for a yum/dnf package contained an epoch tag, then Puppet would consider the resource to always be out of sync and would try to reinstall the package. Puppet now takes into account the epoch tag when comparing the current and desired versions.
-
PUP-2744: Previously, SysVinit services running on RedHat systems which use systemd as the default init system were mishandled by Puppet. Instead of using the RedHat service provider and
chkconfig
to query services, Puppet fell back to the parent init provider and omitted theenable
status. This has been fixed by ensuring the RedHat provider is always used for these services instead.