On Jan 27, 2009, at 5:45 AM, nicolas wrote: > > Hello, > > I'm currently prototyping the use of Puppet to manage a bunch of > home-made applications on a lot of servers. > As our applications evolves frequently and multiples versions can > be used at the same time, we use classes that include version in their > name, like "myApplication_1-2-0" > > A typical application class like "myApplication_1-2-0" contains for > example a package to install, some configuration files as templates, a > crontab, a service definition and a mount point > > When I want to deploy version 1-3-0 of my application on a node, to > replace version 1-2-0, the standard way to do with puppet, as I > understand it, would be : > - node initially contains "include myApplication_1-2-0" > - I edit node to contains "include myApplication_1-2-0::remove" > where myApplication_1-2-0::remove is a class that removes everything > myApplication_1-2-0 installed > - I apply the config to node > - I edit the node to contains "include myApplication_1-3-0" > - I apply the config to node > > But on node, there is the localconfig.yaml file (usually in /var/lib/ > puppet/) that contains everything needed to know what should be > removed when myApplication_1-2-0 is installed. > I was thinking of automating this step like this : > - retrieve config from master > - retrieve local config (in localconfig.yaml) > - if an application has not the same version on the master and > locally then > a) change everything to absent for version which is locally > installed > b) apply this, so local version is removed > c) then apply config from master, so new version is installed > > Do you think it's a good approach ? > If not, do you know an alternate ways to manage applications that have > several versions ?
I think it'd be easier to make your installation classes configurable - have something like a definition built up with a switch for installation and removal: define myapp($ensure) { package { "myapp-$name": ensure => $ensure } ... } Then you install one version: myapp { "3.0": ensure => present } And remove the other: myapp { "2.0": ensure => absent } This requires more work on your buildup, and would also require that the resource list in each class be unique, but you'll need that anyway, I think. -- I don't know the key to success, but the key to failure is trying to please everybody. -- Bill Cosby --------------------------------------------------------------------- Luke Kanies | http://reductivelabs.com | http://madstop.com --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Puppet Users" group. To post to this group, send email to puppet-users@googlegroups.com To unsubscribe from this group, send email to puppet-users+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en -~----------~----~----~----~------~----~------~--~---