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 puppet-users+unsubscr...@googlegroups.com.
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