On 2018-10-08 08:44, Eirik Øverby wrote:
Hi,
Sorry for hijacking this thread, but it caught my interest.
My scenario is that I'd like to re-use the title of an nginx server instance
in, say, the log file for that server instance. However, since I don't want to
touch the nginx module itself, it seems I have to wrap its server class in one
of my own to allow setting this kind of defaults - but I have found no way to
use $title in this way.
The best would be if I could do something like this - assuming nginx::server is
a module class already defined:
nginx::server {
default:
$access_log => "${nginx::logdir}/${mytitle}.log",
...,
;
'my-fine-443-server':
listen_port => 443,
;
}
Here it would also be helpful if I could somehow re-use the default values in
the individual instances too - I might not know what the default values are,
but I would know what to do with them (append '.log' for instance, or set
listen_port to the same value as ssl_port or vice versa).
Even being able to do the following would be better than what we're currently
doing, which is repeating the fully-typed access log line (and all the other
similar entries) for every instance:
nginx::server { 'my-fine-443-server':
$access_log => "${nginx::logdir}/${mytitle}.log",
listen_port => 443,
}
Not sure how I could use functions here either, as I want this to happen at
instantiation time, not in the module itself.
Am I hoping for too much? Missed something?
I have a bit of a hard time following this. You say assuming
"nginx::server" is a class, but then it looks like it is a resource
since it is instantiated with a title. Also don't understand what
$mytitle is - is that supposed to be $title ?
(so, having complained ;-) some more perhaps useful tips follows...)
If you configure defaults for what you are wrapping via hiera, you can
lookup the defaults in your wrapper.
If you want to assign multiple things at once. Here is an example:
class original($foo, $bar, $etc) { }
class { 'original':
foo => 10,
bar => 20,
etc => 30,
}
// multi-assign from declared class, assigns all variables on the left
// from the class - variables must exist in the class or an error is
// raised
[$foo, $bar, $etc] = Class['original']
notice "${foo}, ${bar}, ${etc}"
There are tickets with a feature request to be able to say things like
"my class takes the exact same parameters as some other class". We do
not have an idea for what that would look like at this point. There is a
Like[T] data type in the process of being added, but it would need to
(very tediously) be repeated for every parameter. New syntax in the
language would be needed to support this a better way (i.e. very long
fuse on that...)
Best advice; be explicit about defaults, and get them via hiera and use APL.
Hope something of this is of value.
Best,
- henrik
/Eirik
On 7 Oct 2018, at 11:35, Henrik Lindberg <henrik.lindb...@puppet.com> wrote:
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.
--
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/ppfrj2%2426d%241%40blaine.gmane.org.
For more options, visit https://groups.google.com/d/optout.