Hi Gino,

The good news with a work in progress is that you can start all over again ;)

What you are trying to call is a define:

http://docs.puppetlabs.com/learning/definedtypes.html

http://docs.puppetlabs.com/guides/language_guide.html#resource-collections

I would also take a look at this:
http://docs.puppetlabs.com/puppet/2.7/reference/modules_fundamentals.html

Here's what I would do now.

1. Remove the import classes in site.pp
2. Make a module called base (or whatever name you want)
  mkdir -p /etct/puppet/modules/base/manifests
3. Create an init.pp file and copy your existing package requirements into it.
4. In your apt module (modules/apt/manifests) create an init.pp
This can be like (for now):
class apt {
}
5. Change your update exec to a class in the file apt_update.pp
Like so:
class apt::apt_update {
 exec { .....}
}

Now in your base module you would have something like this:
class base {
  include apt::apt_update
  Package [ require => Exec['apt_update']
  ]

  $package_list = ['a', 'b']

  package {$package_list: }
}

Something like that should work - but hopefully you'll get the idea.  You can 
still use defines in require statements but the syntax is different (see docs).

Cheers,
Den
On 30/03/2012, at 12:50, Gino Lisignoli <[email protected]> wrote:

> I'm stupidly new to puppet and have taken over someone's 
> "in-progress-to-be-completed" implementation of puppet.
> I'm trying to see how I can run apt-get update before any package installs. 
> I've googled around found some articles but they don't seem to work (or 
> rather I most likely don't understand them). 
> 
> The situation I have is:
> 
> Contains our sites
> /etc/puppet/manifests/sites.pp
> ==============================
> import "classes/*"
> import "common"
> 
> node "TestBaseServer" {
>         include ssh_keys
>         include puppet
>         include test_apt
>         include base_software
>         include profile
>         include core_servers_software
>         include admin_tools
>         include core_servers_config
>         include build_servers_software
>         include exim
> }
> 
> The basic list of packages to be installed
> /etc/puppet/manifest/classes/base_software
> ==========================================
> class base_software {
>         Package {
>                 require => [Class['test_apt'],Class['apt::update']]
>         }
>         package { "debian-keyring": ensure => latest }
>         package { "vim": ensure => latest }
>         package { "ethtool": ensure => latest }
>         package { "tcpdump": ensure => latest }
>         package { "rsync": ensure => latest }
> }
> 
> The class I have create.
> /etc/puppet/modules/apt/manifests/update.pp
> ============================================
> define apt::update {
>         exec {'/usr/bin/apt-get update':}
> }
> 
> 
> root@zvsv02:~# puppetd --test --noop
> err: Could not retrieve catalog from remote server: Error 400 on SERVER: 
> Could n
> ot find class apt::update at /etc/puppet/manifests/classes/base_software:6 on 
> no
> de zvsv02.opus.co.nz
> 
> So what I'm not sure about the current system is while I have defined the 
> class in /etc/puppet/module/apt/manifests, the file that is trying to use the 
> defined class is in /etc/puppet/manifests/classes
> 
> I'm not really sure exactly how this is supposed to work. If I'm reading the 
> documentaton right, then everything in the modules should be self contained, 
> so I'm guessing calling apt::update from /etc/puppet/manifests/classes while 
> the class sits in /etc/puppet/modules/apt won't work? I can replace the line: 
> [Class['test_apt'],Class['apt::update']] 
> With: [Class['test_apt'],Class['apt']] and it finds the 'apt' class fine.
> 
> I'm confused.
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Puppet Users" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to 
> [email protected].
> For more options, visit this group at 
> http://groups.google.com/group/puppet-users?hl=en.

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Users" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/puppet-users?hl=en.

Reply via email to