Here: 
http://www.devco.net/archives/2012/12/13/simple-puppet-module-structure-redux.php
it explains that "modules that have configuration should be configurable in 
a single way and single place",
and I agree.

However, as configuration grows in complexity, this means that the entry 
point would have an enourmous list of parameters,
that need to be propagated down to its dependencies.
for instance, myapp takes a $jmxtrans_output, which it passes to tomcat, 
which it passes to jmxtrans::connection.
and if I have more dependencies like this one, myapp would not take 4 
parameters, but far too many.

what is a proper way to inject $jmxtrans_output to jmxtrans::connection 
without requiring to declare it in myapp nor tomcat?

I could declare to do $jmxtrans_output a global variable, but that is ugly.
what if I have myapp1, and myapp2, which uses two differents 
$jmxtrans_output?


node 'mynode' {
  $tomcat_conf = {
    hostname     => 'host1.example.com',
    port         => 8080,
    jmx_port     => 9200,
    jmx_username => 'my_tomcat_jmx_username',
    jmx_password => 'my_tomcat_jmx_password',
  }

  $jmxtrans_output = {
    host          => 'graphite_dev.example.com',
    port          => 2003,
    username      => 'my_graphite_username',
    password      => 'my_graphite_password',
  }

  class { myapp: 
    tomcat_conf       => $tomcat_conf,
    jmxtrans_output   => $jmxtrans_output,
    market            => 'US',
    products          => ['p1', 'p2', 'p3']
  }
}

class myapp($tomcat_conf, $jmxtrans_output, $market, $products) {
  # it installs several packages, as tomcat, imagemagick... and 
configuration files...

  class { tomcat: 
    tomcat_conf      => $tomcat_conf,
    jmxtrans_output  => $jmxtrans_output,
  }

  # package { imagemagik: ensure => installed }

  # ...
}


class tomcat($tomcat_conf, $jmxtrans_output) {
  # package { tomcat: ensure => installed }
  # config file, using $tomcat_conf.{hostname, port, jmx_port, 
jmx_username, jmx_password}
  #...

  $tomcat_jmx = {
    host          => $tomcat_conf[hostname],
    port          => $tomcat_conf[jmx_port],
    username      => $tomcat_conf[jmx_username],
    password      => $tomcat_conf[jmx_password],
  }

  jmxtrans::connection { $name:
    input            => $tomcat_jmx,
    output           => $jmxtrans_output,
    template_source  => "myapp/tomcat_jmxtrans.json.erb",
#   require         => Class[jmxtrans]
  }
}


# todo: replace $template_source with $objects (the objects to be 
monitored, instead of passing a full template)
define jmxtrans::connection ($input, $output, $template_source) {
  notify {"jmxtrans::connection::input: $input": }
  notify {"jmxtrans::connection::output: $output": }

  file { "/tmp/jmxtrans_${hostname}_${name}.json":
    content => "template that uses \ninput_host: 
${input[host]}\ninput_port: ${input[port]}\ninput_username: 
${input[username]}\ninput_password: ${input[password]}\noutput_host: 
${output[host]}\noutput_port: ${output[port]}\noutput_username: 
${output[username]}\noutput_password: ${output[password]}\n",
#   content => template(template_source),
  }
}


-- 
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/1e11d0f5-0b85-404a-a71c-e76fcce80eb1%40googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to