On Oct 29, 2:50 am, Jean Baptiste FAVRE
<[email protected]> wrote:
> Hello Andrew,
> Thanks for your answer.
>
> Infact, pkgrepo *is* already like you suggest:
> class pkgrepo {
> Nginx::Vhost["website.domain.tld"] -> Class['Pkgrepo']
> include pkgrepo::install,pkgrepo::config
>
> }
>
> Just forget about Nginx::Vhost["packages.iscoolapp.com"] and replace it
> wherever you see it with Nginx::Vhost["website.domain.tld"] (my bad for
> the typo).
>
> And, that's why I don't understand because
> "Nginx::Vhost['website.domain.tld'] -> Class['Pkgrepo']" is supposed to
> make vhost applied before pkgrepo. But in my output examples, package
> reprepro definied in pkgrepo::install got installed before vhosts is set up.
>
> About setting require for pkgrepo::repository, I will try asap.
> My first thought was to specify dependencies between classes in "root"
> class (ie, in pkgrepo and not in pkgrepo::install) for readability purpose.
> But, it that case, I could specify it pkgrepo::repository since it
> defined in node definition. Just wonder why I did not tought about it
> before :-/
>
> Will let you updated right after my tests.
>
> Regards,
> JB
>
> On 29/10/2011 09:26, Andrew Hendry wrote:
>
>
>
> > Hi Jean,
>
> > Is Nginx::Vhost["packages.iscoolapp.com"] getting set up somewhere
> > else in your code?
>
> > If not should your pkgrepo be like this?
> > class pkgrepo {
> > Nginx::Vhost["website.domain.tld"] -> Class['Pkgrepo']
> > include pkgrepo::install,pkgrepo::config
> > }
>
> > Or
>
> > pkgrepo::repository { "test":
> > docroot => "/var/www/website.domain.tld",
> > gpgkeyid => "C78033BD",
> > require => Nginx::Vhost["website.domain.tld"],
> > }
>
> > Good luck.
>
> > On Oct 29, 12:41 am, Jean Baptiste Favre
> > <[email protected]> wrote:
> >> Hello,
> >> There's something I don't understand with classes dependency.
> >> I saw many thread about this subject, but still can not figure how it
> >> works exactly.
>
> >> I'm trying to setup a debian package repository. For that, I need:
> >> - a vhost, served by nginx
> >> - repo managment tools as well as GPG key copied into directory tree
>
> >> So, that makes 2 classes:
> >> include nginx
> >> include pkgrepo
>
> >> "nginx" class install nginx package and provide a define to deal with
> >> vhost definition:
> >> nginx::vhost { 'website.domain.tld':
> >> port => 80,
> >> docroot => '/var/www',
> >> priority => 00,
> >> }
> >> This define will create directory /var/www/website.domain.tld as well as
> >> deploying vhost file in /etc/nginx/sites-enabled/00-website.domain.tld
>
> >> "pkgrepo" class will install repo managment tools and deploy repository
> >> GPG key in /var/www/website.domain.tld/key.gpg
>
> >> Therefore, it will require vhost to be created before being able to copy
> >> GPG key.
>
> >> Here's my setup:
> >> node nodetest {
> >> include nginx
> >> nginx::vhost { 'website.domain.tld':
> >> port => 80,
> >> docroot => '/var/www',
> >> priority => 00,
> >> }
> >> include pkgrepo
> >> pkgrepo::repository { "test":
> >> docroot => "/var/www/website.domain.tld",
> >> gpgkeyid => "C78033BD",
> >> }}
>
> >> And for classes definition, I got:
> >> class pkgrepo {
> >> Nginx::Vhost["packages.iscoolapp.com"] -> Class['Pkgrepo']
> >> include pkgrepo::install,pkgrepo::config
>
> >> }
>
> >> Problem is, when I try to executed it twice, I don't alway have
> >> dependency respected. For sure, I'm doing something wrong, but can not
> >> figure what. Bellow are the execution output.
>
> >> Best regards,
> >> Jean Baptiste Favre
>
> >> Wrong behaviour:
> >> # /usr/sbin/puppetd --no-daemonize --logdest console --onetime --verbose
> >> --preferred_serialization_format marshal
> >> notice: Ignoring --listen on onetime run
> >> info: Caching catalog for nodetest
> >> info: Applying configuration version '1319805719'
> >> notice: /Stage[main]/Pkgrepo::Install/Package[reprepro]/ensure: ensure
> >> changed 'purged' to 'present'
> >> notice:
> >> /Stage[main]//Node[nodetest]/Nginx::Vhost[website.domain.tld]/File[/etc/ngi
> >> nx/sites-enabled/00-website.domain.tld]/ensure:
> >> defined content as '{md5}bad3fd5741e335516e2e51aaefe2963c'
> >> info:
> >> /Stage[main]//Node[nodetest]/Nginx::Vhost[website.domain.tld]/File[/etc/ngi
> >> nx/sites-enabled/00-website.domain.tld]:
> >> Scheduling refresh of Service[nginx]
> >> notice: /Stage[main]/Nginx::Service/Service[nginx]: Triggered 'refresh'
> >> from 1 events
> >> notice: Finished catalog run in 6.25 seconds
>
> >> Good behaviour:
> >> # /usr/sbin/puppetd --no-daemonize --logdest console --onetime --verbose
> >> --preferred_serialization_format marshal
> >> notice: Ignoring --listen on onetime run
> >> info: Caching catalog for nodetest
> >> info: Applying configuration version '1319805719'
> >> notice:
> >> /Stage[main]//Node[nodetest]/Nginx::Vhost[website.domain.tld]/File[/etc/ngi
> >> nx/sites-enabled/00-website.domain.tld]/ensure:
> >> defined content as '{md5}bad3fd5741e335516e2e51aaefe2963c'
> >> info:
> >> /Stage[main]//Node[nodetest]/Nginx::Vhost[website.domain.tld]/File[/etc/ngi
> >> nx/sites-enabled/00-website.domain.tld]:
> >> Scheduling refresh of Service[nginx]
> >> notice: /Stage[main]/Pkgrepo::Install/Package[reprepro]/ensure: ensure
> >> changed 'purged' to 'present'
> >> notice: /Stage[main]/Nginx::Service/Service[nginx]: Triggered 'refresh'
> >> from 1 events
> >> notice: Finished catalog run in 6.23 seconds- Hide quoted text -
Your setup is a bit strange in using arrow syntax within a class to
declare a dependency of that class itself, though I'm not sure that
shouldn't work. Instead, the key problem may be capitalization: to
the best of my knowledge, when you reference a resource you must
capitalize the resource *type*, but not the resource name, thus I
think you should use
Nginx::Vhost["website.domain.tld"] -> Class['pkgrepo']
Nevertheless, it shouldn't just fail silently. If you see nothing
relevant in either the master or the client's log about the
relationship not being honored, the resource not being found, or a
dependency cycle being detected, then you should file a ticket about
that.
Meanwhile, there are a couple of alternative, more conventional ways
to define your relationship. For example, you might find this to work
more reliably:
node nodetest {
include nginx
# NOTE relocation:
include pkgrepo
nginx::vhost { 'website.domain.tld':
port => 80,
docroot => '/var/www',
priority => 00,
# NOTE:
require => Class['pkgrepo']
}
pkgrepo::repository { "test":
docroot => "/var/www/website.domain.tld",
gpgkeyid => "C78033BD",
}
}
John
--
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.