Issue #15813 has been updated by Charlie Sharpsteen.
A note: The array unboxing only happens at the end of compilation when `catalog.to_resource` is called to prepare the catalog for delivery to the agent. The upshot is that this behavior won't affect things like templates that are executed server-side by the master during compilation, but will affect things like providers that are evaluated by agents using the transformed catalog. ---------------------------------------- Bug #15813: Deprecate and eliminate magic parameter array handling https://projects.puppetlabs.com/issues/15813#change-95471 * Author: Josh Cooper * Status: Accepted * Priority: Normal * Assignee: * Category: language * Target version: * Affected Puppet version: 0.23.0 * Keywords: parameter property array munge validate * Branch: ---------------------------------------- Puppet's parser will automatically de-arrayify single element arrays for parameters (and properties). See `lib/puppet/parser/resource.rb` <pre> result[p] = if v.is_a?(Array) and v.length == 1 v[0] else v end </pre> As a result when writing a custom type, the parameter's validate and munge methods may receive an array or string depending on what values were specified in the manifest. This leads to idioms such as: <pre> munge do |value| # I don't really know how this is happening. value = value.shift if value.is_a?(Array) </pre> and <pre> munge do |value| value = [value] unless value.is_a?(Array) </pre> However, the magic only happens when parsing a manifest, not when writing tests that create resources. For example: <pre> $ puppet apply -e "exec { '/bin/true': environment => [ 'foo=bar']}" values = [values] unless values.is_a? Array (rdb:1) values "foo=bar" </pre> But: <pre> $ irb >> require 'puppet' >> Puppet::Type.type(:exec).new(:command => '/bin/true', :environment => >> ['foo=bar']) values = [values] unless values.is_a? Array (rdb:1) values ["foo=bar"] </pre> If a parameter only accepts a single argument, then the DSL should support this easily, e.g. `newparam(:timeout, :array => false)` See also #6746 and <https://github.com/puppetlabs/puppet/commit/46252b5bb858a1f2b87cc8646f3a59f935c58061> -- You have received this notification because you have either subscribed to it, or are involved in it. To change your notification preferences, please click here: http://projects.puppetlabs.com/my/account -- You received this message because you are subscribed to the Google Groups "Puppet Bugs" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/puppet-bugs. For more options, visit https://groups.google.com/groups/opt_out.
