If you are on a reasonably modern Puppet version you should do it like this:

class myclass(
  String $base_dir,
  Optional[String] $conf_dir = "${base_dir}/conf"
) {
}

I tested it as well:

  class myclass(
    String $base_dir,
    Optional[String] $conf_dir = "${base_dir}/conf"
  ) {
    notice "base_dir = ${base_dir}, conf_dir = ${conf_dir}"
  }
  class { myclass: base_dir => 'yay' }

With the result:

  Notice: Scope(Class[Myclass]): base_dir = yay, conf_dir = yay/conf

And when executed like this:

  class myclass(
    String $base_dir,
    Optional[String] $conf_dir = "${base_dir}/conf"
  ) {
    notice "base_dir = ${base_dir}, conf_dir = ${conf_dir}"
  }
  class { myclass: base_dir => 'yay', conf_dir => 'not yay' }

The result is:

  Notice: Scope(Class[Myclass]): base_dir = yay, conf_dir = not_yay

Which I think is what you wanted.

If the logic you need for coming up with a default value is complex, it can be written as a function to which you present the input as arguments. The above could have been written:

function mymodule::conf_default(String $base) { "${base}/conf" }
class myclass(
  String $base_dir,
  Optional[String] $conf_dir = mymodule::conf_default($base_dir)
) {
}

Which for the case you showed is total overkill, but good to know if
you need something more complex in another place in your code.

Hope this helps.
Best,
- henrik



On 2018-10-06 18:15, 'Dan White' via Puppet Users wrote: > You need to do like 
this:

class myClass (
String $base_dir,
Optional[String] $conf_dir,
) {
     if $myClass::conf_dir == undef {
       $myClass::actual_conf_dir = "$myClass::base_dir/conf”
     } else {
         $myClass::actual_conf_dir = $myClass::conf_dir
     }

     … and then use $myClass::actual_conf_dir in the template
}

On Oct 3, 2018, at 12:41 PM, Jody Des Roches <[email protected]> wrote:

I'd like to set default values for parameters that will be passed to epp 
templates.  However, the default value is based on another parameter.  I 
understand that variables are immutable but this is a parameter that shouldn't 
be touched unless it wasn't set.

Here is an example construct with a few of my syntax attempts.

class myClass (
String $base_dir,
Optional[String] $conf_dir,
) {
#Attempt 1: Failed
if $myClass::conf_dir == undef { $myClass::conf_dir = "$myClass::base_dir/conf" 
}

#Attempt 2: Failed
if !$myClass::conf_dir { $myClass::conf_dir = "$myClass::base_dir/conf" }

#Attempt 3: Failed
unless $myClass::conf_dir { $myClass::conf_dir = "$myClass::base_dir/conf" }
}

--
You received this message because you are subscribed to the Google Groups "Puppet 
Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/puppet-users/8e2db8c1-7353-4360-adc5-00713e1c0214%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.



--

Visit my Blog "Puppet on the Edge"
http://puppet-on-the-edge.blogspot.se/

--
You received this message because you are subscribed to the Google Groups "Puppet 
Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/puppet-users/ppcjse%24qmf%241%40blaine.gmane.org.
For more options, visit https://groups.google.com/d/optout.

Reply via email to