Interesting... All your comments are very valuable and I definitely see 
some differences

I'll test some of your suggestions and see how it goes.

Thanks for taking the time to answer!

Cheers!

Juan

On Monday, February 10, 2014 7:15:28 PM UTC, Ramin K wrote:
>
> On 2/9/2014 11:37 PM, JuanBrein wrote: 
> > THanks and great post by the way! 
> > 
> > I think we are pretty much on the same thinking behind. You don't add 
> > the "package"  resource directly but using create_resources from hiera 
> > is almost the same thing. THe only difference is that your way is more 
> > flexible as you can add / remove packages just changing data and not 
> > code. But if you know beforehand what are the requires and you think 
> > they'll be static in the long term I prefer that to be on the code side 
> > so my hiera data looks small compact relevant and tidy. 
>
>         You'll have better luck if you data is large and your code is 
> small and 
> tidy. :-) There are cases where adding a Package or File resource 
> without any lookup or generalization is the right choice. In cases like 
> your PHP module example where you know you'll need more than one and 
> probably 10-15 which will need updating as the webapp increases in 
> functionality I'd go with a data driven solution. 
>
> > My problem is with the file resources and templates. if if you have a 
> > decent amount of different applications you'll end up with a super 
> > profile class. It'll contain all different type of files and templates 
> > and too many sub profile modules. Some companies have more than 200 
> > different applications type with an average of 2 to 4 config files to be 
> > deployed by app. I know some of them could be moved to "rpms" but is 
> > normal to have at least 1 config file managed by templates. DO you think 
> > it is good to have a profile class with say 300 400 files from different 
> > applications? 
>
>         I'm not sure I understand the problem as you describe it. Each 
> application should or likely runs on its own server, vm, container, or 
> whatever. That's going to limit the actual number of profiles applied to 
> that node to a reasonable amount. In my system the most complex role or 
> hostgroup has 18 profiles which apply 46 modules and manages 332 File 
> resources of actual config (no large dir sync nonsense). That looks 
> reasonably complex to me unless you're building some sort of junk drawer 
> monstrosity of a multifunction server. 
>
> > That's where I prefer to use a different pattern and that is one profile 
> > class per application: ie: 
> > 
> > profile_webapp 
> > profile_alpha_app 
> > profile_gamma_app 
> > etc... 
> > 
> > And sometimes when needed use the repo->config->install->service 
> pattern. 
> > 
> > Do you see any cons on that approach? 
> > 
> > Thanks! 
> > Juan 
>
>         Without seeing a real example of what you're doing it sounds like 
> most 
> of your code should be in a module that is then included by a profile. I 
> can't think of any reasons to be declaring a Service in a profile class. 
> Enabling it, yes. Adding additional config, yes. Declaring, no. 
>
>         Taking the example of Apache yet again, your Apache module should 
> install Apache, minimally configure it, and start it if so set in your 
> code or data. That's it. No modules, no vhosts, or anything beyond a 
> minimal config by default. Because it does so little you can include it 
> anywhere and add the additional site specific config on top. Because it 
> does so little you can share it without someone needing to immediately 
> rip your system's idiosyncrasies out of it. 
>
> Ramin 
>
> > On Monday, February 10, 2014 6:48:55 AM UTC, Ramin K wrote: 
> > 
> >     On 2/9/2014 4:47 AM, JuanBrein wrote: 
> >      > 
> >      > 
> >      > I've been using puppet on different companies and implementing 
> >     the roles 
> >      > / profile pattern on some of them. 
> >      > 
> >      > In theory the patter works very well but in practice I usually 
> face 
> >      > challenges that I sort out implementing my own designs / 
> >     solutions. I 
> >      > would like to know how you guys deal with that in case you do. 
> >      > 
> >      > **Say you have a typical LAMP stack and you have to deploy a web 
> >     app so 
> >      > my classes would look something like this (super simplified 
> >     version): 
> >      > 
> >      > *Modules:* 
> >      > 
> >      > class apache { //puppetlabs class } 
> >      > class mysql { //puppetlabs class } 
> >      > etc./. 
> >      > 
> >      > *Profile*: 
> >      > 
> >      > class profile::webapp { 
> >      > 
> >      >    class 'apache' 
> >      >    class 'mysql' 
> >      > 
> >      >    $name = hiera('webapp::name') 
> >      >    apache::vhost {$webapp::name:} 
> >      > 
> >      > } 
> >      > 
> >      > *Roles:* 
> >      > 
> >      > class role::prod_web { 
> >      >    include 'base' 
> >      >    include 'profile::webapp' 
> >      > } 
> >      > 
> >      > Now some of the questions I face: 
> >      > 
> >      > 1- Say thate for whatever reason the profile::webap requires a 
> >     specific 
> >      > package... ie php-apc that is not covered by the apache module. 
> The 
> >      > roles / profile states that you should always reference modules. 
> >     Would 
> >      > you guys create a new class just to include a resource? What I 
> >     usually 
> >      > end up doing is to add that package into the profile for the sake 
> of 
> >      > simplicity. 
> >      > 
> >      > 2- Sometimes modules from puppetlabs or other contributors lacks 
> >     of some 
> >      > functionality. Say for example you need to deploy a file under 
> >      > /etc/sysconfig. I wouldn't place that file under the profile 
> >     class as 
> >      > that is used for multiple profiles definitions. However creating 
> >     a new 
> >      > module for just a single file seams like too much of an overhead. 
> >     What I 
> >      > usually do is I split up the profile module into multiple profile 
> >      > modules and use the repo -> install -> config -> service pattern. 
> >     That 
> >      > allows me to create a file / template where to place my specific 
> >      > resources for that profile and still consume data from hiera to 
> >      > customize the behaviour. 
> >      > 
> >      > 3- The problem with point 2 is that you might end up with too 
> many 
> >      > profile classes and some of them might include a simple reference 
> >     to a 
> >      > module. That is not much of a problem to me as I prefer to have 
> >     my files 
> >      > attached to the right profile module rather than having multiple 
> >     files 
> >      > on a single profile module... or multiple modules with just a 
> >     couple of 
> >      > files. 
> >      > 
> >      > Cheers! 
> >      > Juan Breinlinger 
> > 
> > 
> >     1. profiles::php with create_resources around a Package resource 
> that 
> >     pulls in php-apc, php-mcrypt, php-gd, and all the other usual 
> suspects 
> >     based on Hiera data. When was the last time anyone needed just one 
> PHP 
> >     module? Also not a terrible place to set apc.ini and other config 
> >     files. 
> > 
> >     2. profile::myrole and yeah I add the resource directly particularly 
> if 
> >     it'll never ever conflict with another module. Also a good place to 
> >     pull 
> >     in very simple modules. I'm not a fan of breaking things up into 
> more 
> >     specific subclasses within a profile::class. 
> > 
> >     3. See #2 
> > 
> >              I recently took a crack at writing some examples of profile 
> >     uses as 
> >     well as philosophizing on good profile classes. Probably needs 
> another 
> >     hour of editing, but might be helpful in its current state. 
> >     
> https://ask.puppetlabs.com/question/5235/what-goes-in-the-profile-part-of-roleprofile/
>  
> >     <
> https://ask.puppetlabs.com/question/5235/what-goes-in-the-profile-part-of-roleprofile/>
>  
>
> > 
> > 
> >     Ramin 
> > 
> > -- 
> > 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 [email protected] <javascript:>. 
> > To view this discussion on the web visit 
> > 
> https://groups.google.com/d/msgid/puppet-users/b8ad138c-e10e-454e-8151-3239ce1e37b1%40googlegroups.com.
>  
>
> > For more options, visit https://groups.google.com/groups/opt_out. 
>
>

-- 
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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/puppet-users/202e5ffe-2db7-413e-b570-2b72d76c6fd7%40googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to