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

Reply via email to