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 <dbm...@gmail.com> 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 puppet-users+unsubscr...@googlegroups.com.
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 puppet-users+unsubscr...@googlegroups.com.
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