On 8 Oct 2018, at 17:05, Henrik Lindberg <[email protected]> wrote:
>
> 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 ?
Clearly I got up too early this morning. Of course nginx::server is a resource,
and I want to instantiate a whole bunch of them. And what I mean with $mytitle
is exactly that - the $title of the instantiated resource. So in this case I
would like to say that the log file name is a product of the instantiated
resource's title, which means I can create a lot of them following
"my-fine-443-server", and they'd all have log file names based on the resource
title. In this case, my-fine-443-server would have (in our world)
/var/log/nginx/my-fine-443-server.access.log. A "my-less-fine-8443-server"
instance would then get /var/log/nginx/my-less-fine-8443-server.access.log, and
so on and so forth.
Taking this example a bit further (correcting for some syntax errors in my
original sample above):
nginx::server {
default:
access_log => "${nginx::logdir}/${title}.log",
ssl_port => $listen_port,
...,
;
'my-fine-443-server':
listen_port => 443,
;
}
$title would normally refer to the class in which I create these resources, so
that variable is useless. Similarly, the $listen_port in the default: section
is not yet specified - but I'd prefer not to have to type it for each instance
since it's just the nginx module that for some reason requires me to specify
both - but they'll always be the same value.
We use hiera for a lot of our defaults, but these are context-specific defaults
that cannot be set in hiera - and strictly I mostly want them for style and
reduced duplication of code (with associated risks of mistakes when creating
dozens of server or location resources).
.........
> Best advice; be explicit about defaults, and get them via hiera and use APL.
We're using hiera a *lot*. I guess part of the problem is that our
environment(s) isn't (aren't) as homogenous as we would like (to think they
are)..
Thanks for your attempts to understand me :)
/Eirik
--
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/481CEBF4-F8B5-41E5-ACAF-BB45C7DCAD06%40anduin.net.
For more options, visit https://groups.google.com/d/optout.