Thanks for sharing the implementation details Akila! I did some refinements
to the README.md files.

I tried out WSO2AS module and it is working as expected. Great work! It
seems like we still need to copy the product distribution to the
<product-puppet-module>/files folder. Copying it to
<puppet-home>/files/packs did not work.

@DevOps Team: It would be great if you guys can review the improvements we
have done.

Thanks


On Tue, Sep 6, 2016 at 5:21 PM, Akila Ravihansa Perera <raviha...@wso2.com>
wrote:

> Hi,
>
> We have already created separate GitHub repos for Puppet modules so that
> the Puppet module can be shipped as part of a product release. All common
> resources and classes are still in wso2base Puppet module. We have
> refactored the module structure which I'll highlight below;
>
> Please refer to wso2base module [1] and  wso2as module [2] which we have
> implemented as a reference. We will discuss any improvements needed and
> replicate the same structure for other modules.
>
>  - No more Hiera lookups in init.pp
>    All Hiera lookups have been moved to params classes in wso2base and
> product module. All common parameters across products are defined in
> wso2base/params.pp and product specific ones are defined in corresponding
> product Puppet module
>
>  - Do Hiera lookups only when enabled via a facter
>    wso2base/params.pp lookup a facter named "use_hieradata" and decide
> whether to take default values defined directly in params.pp or to perform
> Hiera lookups. It would have been ideal if Hiera lookups are all done in a
> separate layer (for eg: using roles and profiles pattern), but one problem
> is users will have to write their own profiles module to use Hiera.
> Maintaining profiles in our side would be an overhead. This is still open
> to suggestions.
>
>  - Class parameters to override defaults in params.pp
>    Earlier Puppet modules were tightly coupled with Hiera so that users
> were unable to simply include the module from site.pp and run it. Now all
> the variables are defined as class parameters which takes common values
> from wso2base/params.pp [4]. Default values for any product specific
> parameters are kept in <product-module>/params.pp. For eg: [5]
>
> Any user can now simply do the following in site.pp
>
> class java -> class wso2as
>
> Above manifest will configure wso2as using default configuration (vanilla
> pack). Default values can be overridden by passing values. For eg: to set a
> port offset of 10
>
> $ports = {
>     offset => 10
> }
> class java ->
> class  { 'wso2as':
>    ports => $ports
> }
>
>  - Class dependencies and containment
>   All base classes are contained in product module main class to enforce
> the class dependency order [6].
>
>  - Data type validation
>    To enforce that parameters passed are in expected format and to help
> with troubleshooting we have added validations in wso2base module which
> checks whether data types passed for each parameter is correct [7].
>
>  - Vagrant setup
>    We have moved out the Vagrantfile, site.pp and hiera.yaml files to a
> separate repo named "puppet-commons" [3]. This repo will contain any Puppet
> related artifact which does not belong to a Puppet module. It has a
> setup.sh shell script to create the PUPPET_HOME directly by cloning Puppet
> module GitHub repos and merging Hieradata. Details about this setup.sh
> script will be discussed in a separate thread.
>
> Any developer who wants to try out a Puppet module can do so by performing
> following steps;
> 1. Git clone puppet-commons
> 2. Run setup.sh
> 3. Provide PUPPET_HOME when prompted by setup.sh
> 4. Provide JDK file location product pack location when prompted
> 5. Goto puppet-commons/vagrant
> 6. Run vagrant up
>
> Note that we have not fully implemented the end-to-end flow yet.
>
> [1] https://github.com/wso2/puppet-base
> [2] https://github.com/wso2/puppet-as
> [3] https://github.com/wso2/puppet-commons
> [4] https://github.com/wso2/puppet-base/blob/master/manifests/params.pp
> [5] https://github.com/wso2/puppet-as/blob/master/manifests/params.pp#L29
> [6] https://github.com/wso2/puppet-as/blob/master/manifests/init.pp#L115
> [7] https://github.com/wso2/puppet-base/blob/master/
> manifests/init.pp#L55-L86
>
> Thanks.
>
> --
> Akila Ravihansa Perera
> WSO2 Inc.;  http://wso2.com/
>
> Blog: http://ravihansa3000.blogspot.com
>



-- 
*Imesh Gunaratne*
Software Architect
WSO2 Inc: http://wso2.com
T: +94 11 214 5345 M: +94 77 374 2057
W: https://medium.com/@imesh TW: @imesh
lean. enterprise. middleware
_______________________________________________
Dev mailing list
Dev@wso2.org
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to