Yes. Plus, we will modify agent's init.pp and add custom templates (if any) in each cartridge module.
On Tue, Aug 19, 2014 at 7:02 PM, Chamila De Alwis <[email protected]> wrote: > So in the agent's push_templates defined type we'll replace *content => > template("agent/${name}.erb")* with *content => > template("${module}/${name}.erb")*? > > > Regards, > Chamila de Alwis > Software Engineer | WSO2 | +94772207163 > Blog: code.chamiladealwis.com > > > > > On Tue, Aug 19, 2014 at 4:54 PM, Rajkumar Rajaratnam <[email protected]> > wrote: > >> Hi, >> >> Currently we are having an agent puppet module, which includes all agent >> extensions (puppet/modules/agent/templates/extensions/*). >> >> All the cartridges need these extensions, but with different behaviors >> (implementation of these extensions could be different from cartridge to >> cartridge). For example, if it is a php cartridge, we need to do certain >> stuffs when the instance is started. If it is a mysql cartridge, we want to >> do something else. With current puppet module structure, we have to >> hard-code cartridge types in extensions to achieve specific behavior based >> on cartridge. >> >> For example, in instance-started extension; >> >> <%- if @type == 'mysql' -%> >> <%= scope.function_template(['agent/extensions/addons/_mysql.erb']) -%> >> <%- end -%> >> >> <%- if @type == 'ruby' -%> >> <%= scope.function_template(['agent/extensions/addons/_ruby.erb']) -%> >> <%- end -%> >> >> IMO, this is not a proper way. >> >> I guess the proper way is to have some default extensions in agent module >> and allow cartridges to override and/or add more extensions specific to >> them. This way, we don't have to hard-code anything in agent extensions. >> Modules which need custom extension behavior can override default >> extensions and/or add more extensions. If they don't override an extension, >> default extension will be copied to the instance. >> >> I am thinking of implementing it as below; >> >> We introduce two optional parameters to agent class. >> $templates : templates which needs to be overridden >> $module : which module to look up for these templates >> >> node /ruby/ inherits base { >> require java >> class {'agent': >> module => 'ruby', >> templates => >> ['bin/stratos.sh','extenstions/instance-started.sh'], >> } >> class {'ruby':} >> Class['stratos_base'] -> Class['java'] -> Class['ruby'] ~> >> Class['agent'] >> } >> >> We keep these templates in the relevant module (ruby in this case) with >> appropriate directory structure (ruby/templates/agent/extensions and >> ruby/templates/agent/bin) and pass these to the agent class, which will >> copy right extensions (default + custom) to the instance. >> >> WDYT about this approach? >> >> Thanks >> >> -- >> Rajkumar Rajaratnam >> Software Engineer | WSO2, Inc. >> Mobile +94777568639 | +94783498120 >> > > -- Rajkumar Rajaratnam Software Engineer | WSO2, Inc. Mobile +94777568639 | +94783498120
