On 16/12/11 19:48, Tim Mooney wrote: > In regard to: Re: [Puppet Users] new user: need Conditional statement...: > >>> Obviously I had a syntax error here because case statement is not >>> happy within the resource. >> >> That's why the documentation says to use a selector. >> >>> So, what's a recommended puppet way to do something like this? thx in >>> advance. >> >> file { >> "somefile" : >> ensure => $hasfile ? { >> "true" => present, >> default => absent >> }, >> source => "puppet:///somefile", >> owner => "root", >> } >> >> Please note that "true" is not strictly equivalent to the bareword true >> in the puppet language :) > > Ah, perfect segue. I had been meaning to follow up to John Bollinger > when he earlier posted something similar that also had 'true' quoted. > > I've been through the style guide and several other areas in the > documentation and I can't find any recommendations on whether it's better > to use bare > > true > false > > or whether it's better to quote them. This is specifically for use in > parameterized classes. For example: > > foo.bar.edu.pp: > > node 'foo.bar.edu' { > > class {'rhel': > version => '5', > ipv6_enabled => true, > } > } > > rhel/manifests/init.pp: > > class rhel($version, $ipv6_enabled='default') { > include rhel::common > > case $ipv6_enabled { > true: { > class {'network': ipv6 => true } > } > false: { > class {'network': ipv6 => false } > } > default: { > case $version { > '5': { > class {'network': ipv6 => false } > } > '6': { > class {'network': ipv6 => true } > } > default: { fail("only version 5 and 6 of rhel are currently > supported")} > } > } > } > } > > > In other words, our default for RHEL 5 is ipv6 disabled, on RHEL 6 it's > ipv6 enabled, but the default can be overridden for either. > > The problem is that we had to be very careful to make certain that we > didn't quote true or false in some places and leave them as barewords > elsewhere, or it just wouldn't work. Mixing quoted & nonquoted gave us > unreliable and unexpected results.
Exactly. If you intend your options to be boolean use the barewords true and false. > This brings me back to the questions: where in the docs is this covered, > and what are the recommendations for whether we should (or shouldn't) be > quoting true & false when passing them around into parameterized classes > and testing them in selectors? I don't know if it's covered in the documentation. Puppet has the notion of true/false (ie the boolean). Any puppet conditional expression can evaluate to either true or false. On the other hande "true" is a string containing the word true. "false" is a string containing the word false. It is not a boolean. But that's where things get difficult: if "false" { notice("false is true") } This will print "false is true". The same for $str = "false" if $str { notice("false is true") } But, case $str { true: { notice("true") } false: { notice("false as bool") } "false": { notice("false as str") } } will print "false as str". So "false" != false and is not == to true. But when converted as a boolean any strings becomes true, and that's what happen in our if example. We track this issue in the following ticket: http://projects.puppetlabs.com/issues/5648 -- Brice Figureau My Blog: http://www.masterzen.fr/ -- You received this message because you are subscribed to the Google Groups "Puppet Users" group. To post to this group, send email to puppet-users@googlegroups.com. To unsubscribe from this group, send email to puppet-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en.