On 8 Oct 2018, at 17:05, Henrik Lindberg <henrik.lindb...@puppet.com> 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 puppet-users+unsubscr...@googlegroups.com.
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