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.

Reply via email to