-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
Having only one primitive in a group is a perfectly valid use case. For example, one might have constraints related to an arbitrary number of primitives created with create_resources, and the simplest way of doing that is to place them all of them in a group, and have the constraint point to that. Disallowing the possibility of ending up with just one primitive in the group does not make much sense. Update the check to allow 1-element arrays. Also, remove a misleading comment that also looks like it was copied from some other code that talked about colocations, not groups. Fixes issue voxpupuli#152.
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -21,13 +21,21 @@ module Puppet | |
desc "An array of primitives to have in this group. Must be listed in the | ||
order that you wish them to start." | ||
|
||
# We want this to be an array, even if it has only one | ||
# value. Prior to 4.x (and unless using the future parser in | ||
# 3.x), Puppet would munge single-parameter arrays into scalar | ||
# values. See also | ||
# https://tickets.puppetlabs.com/browse/PUP-1299. | ||
munge do |value| | ||
value = [value] unless value.is_a?(Array) | ||
end | ||
|
||
# Have to redefine should= here so we can sort the array that is given to | ||
# us by the manifest. While were checking on the class of our value we | ||
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong.
fghaas
Author
Owner
|
||
# are going to go ahead and do some validation too. The way Corosync | ||
# colocation works we need to only accept two value arrays. | ||
# are going to go ahead and do some validation too. | ||
def should=(value) | ||
super | ||
raise Puppet::Error, "Puppet::Type::Cs_Group: primitives property must be at least a 2-element array." unless value.is_a? Array and value.length > 1 | ||
raise Puppet::Error, "Puppet::Type::Cs_Group: primitives property must be at least a 1-element array." unless value.is_a? Array and value.length >= 1 | ||
@should | ||
end | ||
end | ||
|
3 comments
on commit 01eea7d
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok, clearly my Ruby-fu is insufficient here. If someone could explain to this Ruby-newbie why the error message still pops up after inserting the munge
bit (which I cargo-culted from https://tickets.puppetlabs.com/browse/PUP-1299), I'd be grateful.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Barring feedback from @hunner, here are some assumptions.
- Overriding
should=
to raise this exception was done to work around some weird issue. - This is not quite a clean approach though, because a
validate
hook should do that instead (and used to!) - Since this validation hack evades the usual type instance lifecycle, it may raise before your
munge
ever has a chance to take effect.
TL;DR, try reverting ead27ab. If this doesn't help, the validation might have to take into account that non-array values are acceptable (since they will get munged eventually).
I keep forgetting which happens first - munge
or validate
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sorry, suddenly just adding an ocf:heartbeat:Dummy
resource to the group looks that much more appealing.
Wait, what?
munge
hookvalidate
is for, though.Something is weird. This was changed in ead27ab but the motivation eludes me. Remember that one, @hunner?