Re: [Puppet Users] Puppet + APT, I am lost...

Mathias Gug
Tue, 31 Aug 2010 21:34:18 -0000

Hi,

Excerpts from Martijn Grendelman''s message of Tue Aug 31 16:02:43 -0400
2010:
> Hi Nigel Kersten,
>
> >> What I would like, is for Puppet to run `aptitude update` before
it
> >> installs or upgrades packages. That doesn''t seem out of
the ordinary to
> >> me, but I can''t make it work in Puppet.
> >>
> >> The approach I like best, is this one:
> >>
> >>    class apt-update {
> >>        exec { "/usr/bin/aptitude update":
> >>            refreshonly => true,
> >>        }
> >>    }
> >>
> >>    define apt_package($ensure="latest") {
> >>        include apt-update
> >>        package { $name:
> >>            ensure  => $ensure,
> >>            require => Class["apt-update"],
> >>        }
> >>    }
> >>
> >>    apt_package { "foo":
> >>    }
> >>
> >> but that doesn''t work, it doesn''t run apt-update
before installing ''foo'',
> >> because of the "refreshonly => true". If I remove it,
it works, but then
> >> `aptitude update` is run on /every/ Puppet run, which is worse
than not
> >> running it at all.
> >>
> >> Is it at all possible to achieve what I want with Puppet? If so,
how?
> >
> > Why do you want to run this before every package install? That will
> > add a fair bit of overhead. I don''t quite understand the
desire to run
> > before every package install, and yet not simply have it run once
> > before all package installs.
>
> I am not sure how I said I want to do an update before /every/ package
> install. Once at the start of a Puppet-run, /IF/ one or more packages
> need to be installed, would suffice.
>

You may run into a chicken-egg problem. Packages that are configured as
"ensure => latest" can only be upgraded by puppet if the local apt
cache
files are up-to-date.

IOW puppet relies on the local apt files to figure out if packages need
to be updated. And to get new local apt files apt-get update needs to be
run.

--
Mathias Gug
Ubuntu Developer  http://www.ubuntu.com