stratos-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Akila Ravihansa Perera <raviha...@wso2.com>
Subject Re: Create a base Puppet module
Date Sun, 13 Apr 2014 04:20:48 GMT
Hi Nirmal,

I think I may have not clearly explained the reasons behind the suggested
structure. So I'll list down some of the problems we have in the current
cartridge creation process. These are not major issues but would be nice to
make it cleaner before the release :-)

As for the installation of Puppet master/agent, we don't need zip, unzip or
wget (or anything). The puppetinstall script just do a simple "apt-get
install puppet/puppetmaster". We need wget just to download this
puppetinstall and config shell scripts from Stratos Git repo. We can
transfer those scripts to the instance via ssh from another machine. But
still, Puppet does *not* install wget anyway, it just *assumes* wget is
already installed (we only need that to download installation scripts from
Stratos Git repo). Usually wget is already present in almost every
distribution.

1. zip/unzip has to be installed *manually* in the current workflow [1]
But this can be done via Puppet. It makes no sense to let users install
zip/unzip manually when we're using Puppet.

2. While I was trying to include zip/unzip package to a Puppet module, I
couldn't find a base *class* to add this. I know we have a base *node* but
the official Puppet documentation says we should not include package
declarations in node blocks (nodes.pp).

3. Therefore we need a base class to include all those common tools. We can
consider Stratos agent, zip, unzip, tar and Java as common tools. I believe
every cartridge instance must have those?

4. Currently we don't have a base *class* to include those packages. I
could include that to Java class since it is being required by all other
*nodes* but it will be a very ugly dependency.

5. Actually I tried doing that (and it works too), but when I try to create
a php cartridge it throws this "package already defined error". Further
investigation revealed that php class has included "zip/unzip" package,
hence it doesn't allow any other class to include that package....that
doesn't make any sense to include zip/unzip only in php class.

5. In each *node* declaration, we have this "require java" and "class
{'agent'}" statements. If we are using inheritance, we don't need this in
every node, IMO. We could move that to base node block.

If you're convinced this needs to be re-factored, I could work on a patch.
Otherwise, apologies for the noise.

[1] -
https://cwiki.apache.org/confluence/display/STRATOS/4.0.0+Creating+a+Cartridge+Image+on+EC2+or+OpenStack


Thanks.


On Sat, Apr 12, 2014 at 6:47 PM, Nirmal Fernando <nirmal070125@gmail.com>wrote:

> We already have a 'base' node AFAIS and all the other nodes inherited from
> that.
>
>
> On Sat, Apr 12, 2014 at 1:52 PM, Akila Ravihansa Perera <
> ravihansa@wso2.com> wrote:
>
>>
>> On Sat, Apr 12, 2014 at 1:02 PM, Nirmal Fernando <nirmal070125@gmail.com>wrote:
>>
>>>
>>>
>>>
>>> On Sat, Apr 12, 2014 at 12:49 PM, Akila Ravihansa Perera <
>>> ravihansa@wso2.com> wrote:
>>>
>>>> Hi Nirmal,
>>>>
>>>> We don't need zip/unzip to install Puppet. Actually I managed to
>>>> install a default node without zip/unzip by adding package { 'unzip':
>>>> ensure => installed } to Puppet Java module.
>>>>
>>>
>>> Well, we still need wget? :-)
>>>
>>
>> Not really...we need wget just to download installation scripts. This can
>> be done via ssh :-)
>>
>
> SSH from where?
>
>>
>>>> What I'm trying to address is the redundant code in current Puppet
>>>> master module structure. Currently we have "require java", class
>>>> {'agent':} on each module, which can be avoided by creating a base module
>>>> and other modules can inherit stuff from this.
>>>>
>>>> For eg. php module has  package { 'zip': ensure => installed }
>>>> dependency, and also Java module need this package as well. Instead of
>>>> putting these common tools in individual classes we can create a base class
>>>> and others will inherit stuff from this.
>>>>
>>>
>>> :-) if you check the nodes.pp file, we already leverage puppet
>>> inheritance.
>>>
>>
>> Yes, but Puppet classes do not :-)
>>
>>>
>>>> If you're interested, I can create a patch for this to be reviewed.
>>>>
>>>
>>> It's better if you test it fully for all the existing scenarios
>>> (judgemental) and I think these improvements can go for 4.1 but not for
>>> 4.0, since we're wrapping up 4.0 and this is not a blocker.
>>>
>>
>> Absolutely :-)
>>
>> How about we add zip/unzip packages + Stratos agent class declaration
>> (common tools) to a base *class* and have other *classes* inherit from that?
>>
>>>
>>>>
>>>> On Sat, Apr 12, 2014 at 12:17 PM, Nirmal Fernando <
>>>> nirmal070125@gmail.com> wrote:
>>>>
>>>>> Hi Akila,
>>>>>
>>>>> If you have a look at the current nodes.pp file, Dinesh have already
>>>>> added a default section, which will be used to create a base image with
>>>>> minimal software (without wget, zip).
>>>>>
>>>>> What problems you are trying to address here? Is it to avoid the
>>>>> redundant code in nodes.pp file? Cause to install puppet you need these
>>>>> wget etc. packages, hence no point of adding it in the default node.
>>>>>
>>>>>
>>>>>
>>>>> On Sat, Apr 12, 2014 at 11:15 AM, Akila Ravihansa Perera <
>>>>> ravihansa@wso2.com> wrote:
>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> I was thinking that we could simplify cartridge creation process
by
>>>>>> creating a base Puppet module which would install common tools like
zip,
>>>>>> unzip, tar, wget and also include Java module in this base module.
>>>>>>
>>>>>> Basically, the module structure will be like this (not tested);
>>>>>>
>>>>>> node /base/ {
>>>>>>
>>>>>>     <declarations here>
>>>>>>
>>>>>> }
>>>>>>
>>>>>>
>>>>>> class base {
>>>>>>
>>>>>>    package { 'unzip': ensure => installed }
>>>>>>    package { 'tar': ensure => installed }
>>>>>>    package { 'wget': ensure => installed }
>>>>>>
>>>>>>    class {'java'}
>>>>>>    class {'agent':}
>>>>>>
>>>>>>    Class['java'] ~> Class['agent']
>>>>>>
>>>>>> }
>>>>>>
>>>>>>
>>>>>> Then other Stratos module can include this
>>>>>>
>>>>>> node /lb/ inherits base {
>>>>>>   class {'lb': maintenance_mode   => 'norestart',}
>>>>>> }
>>>>>>
>>>>>> This will remove lot of redundancy and ugly dependencies we have
>>>>>> now....WDYT?
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Akila Ravihansa Perera
>>>>>> Software Engineer
>>>>>> WSO2 Inc.
>>>>>> http://wso2.com
>>>>>>
>>>>>> Phone: +94 77 64 154 38
>>>>>> Blog: http://ravihansa3000.blogspot.com
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Best Regards,
>>>>> Nirmal
>>>>>
>>>>> Nirmal Fernando.
>>>>> PPMC Member & Committer of Apache Stratos,
>>>>> Senior Software Engineer, WSO2 Inc.
>>>>>
>>>>> Blog: http://nirmalfdo.blogspot.com/
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Akila Ravihansa Perera
>>>> Software Engineer
>>>> WSO2 Inc.
>>>> http://wso2.com
>>>>
>>>> Phone: +94 77 64 154 38
>>>> Blog: http://ravihansa3000.blogspot.com
>>>>
>>>
>>>
>>>
>>> --
>>> Best Regards,
>>> Nirmal
>>>
>>> Nirmal Fernando.
>>> PPMC Member & Committer of Apache Stratos,
>>> Senior Software Engineer, WSO2 Inc.
>>>
>>> Blog: http://nirmalfdo.blogspot.com/
>>>
>>
>>
>>
>> --
>> Akila Ravihansa Perera
>> Software Engineer
>> WSO2 Inc.
>> http://wso2.com
>>
>> Phone: +94 77 64 154 38
>> Blog: http://ravihansa3000.blogspot.com
>>
>
>
>
> --
> Best Regards,
> Nirmal
>
> Nirmal Fernando.
> PPMC Member & Committer of Apache Stratos,
> Senior Software Engineer, WSO2 Inc.
>
> Blog: http://nirmalfdo.blogspot.com/
>



-- 
Akila Ravihansa Perera
Software Engineer
WSO2 Inc.
http://wso2.com

Phone: +94 77 64 154 38
Blog: http://ravihansa3000.blogspot.com

Mime
View raw message