Thought I'd just post some manifest code for what people have already
described to give you some ideas.

The following is a parameterised class where you can either use the
site default, or pass in any version of Puppet you want:

class puppet($request_version = "") {
  #everything needs common!
  include common

 
######################################################################
  #
  # !!! VERY IMPORTANT VARIABLE !!!
  #
  #The exact version (including release number) of the Puppet package
  #to install. Updating this will upgrade Puppet SITE WIDE!
  #
  #If you want to upgrade one node, pass the class include the
  #'request_version' variable like so:
  # node foo { class {fh_puppet: request_version => "9.8.7" } }
  if $request_version == "" {
    $puppet_version = "2.6.2-1"
  } else {
    $puppet_version = $request_version
  }
 
######################################################################

  #We build the Puppet RPMs ourselves so we need our internal
repository
  realize Managed_yumrepo[internal]

  package{"puppet":
    ensure => $puppet_version,
  }

  #The puppetd service, restart when the package changes so we're not
running
  #old versions of the daemon.
  service { "puppet":
    enable     => true,
    ensure     => running,
    hasstatus  => true,
    hasrestart => true,
    subscribe  => Package["puppet"],
  }
  ...
}

I use Ruby Enterprise for Puppet Masters, so have created my own
define to install/upgrade Gems in the Ruby Enterprise environment:

#use the Ruby Enterprise Gem installer for a given Gem name
define entgempackage($version = "") {
  $gemcmd = "/opt/ruby-enterprise/bin/gem"
  #If no version is specified, attempt to install any version of the
named gem.
  #This will not upgrade Gems.
  if $version == "" {
    $cmd = "$gemcmd install $name"
    exec { "$cmd":
      unless => "/usr/bin/test `$gemcmd list $name | grep $name | wc -
l` -eq 1",
      logoutput => "on_failure",
    }
  }
  #otherwise, install the supplied version. If the gem is already
installed,
  #the gem will be updated instead of installed along side the current
version.
  else {
    $cmd = "/bin/bash -c 'if [[ `$gemcmd list $name | grep $name | wc -
l` -eq 1 ]]; then if [[ `$gemcmd list $name | grep $version | wc -l` -
eq 0 ]]; then $gemcmd update $name -v $puppet; fi; else $gemcmd
install $name -v $version; fi'"
    exec { "$cmd":
      unless => "/usr/bin/test `$gemcmd list $name | grep $version |
wc -l` -gt 0",
      logoutput => "on_failure",
    }
  }
}

And then a class for the Puppet Master:

class puppet::master inherits puppet {
  include common
  include httpd::ssl
  include subversion
  include ruby_enterprise::passenger

  #The puppet version variable can't come from the parent class as the
RPM version
  #contains a release number and this is not handled by Gem (they
don't have
  #release numbers).
  $puppet_gem_version = "2.6.2"
  entgempackage { "puppet":
    version => $puppet_gem_version,
    require => Entgempackage["passenger"],
    notify  => Service["httpd"],
  }
  ...
}


On Oct 8, 9:15 pm, Forrie <for...@gmail.com> wrote:
> I'm just beginning with Puppet.  One issue I've run into is updates.
> As my nodes expand, updating each individual node via my manual method
> becomes daunting.
>
> Could someone share their recipe or procedure for using the puppet
> master to distribute updates of puppet to the client nodes?   I would
> guess using a "gem" would be easier.   Updating puppet on the master
> node isn't much of a problem via source, though perhaps I should
> consider the "gem" there as well?
>
> Thanks.

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Users" group.
To post to this group, send email to puppet-us...@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.

Reply via email to