Verschiedene Puppenmodule mit einer gemeinsamen Ressource

7

Ich schreibe bestimmte Module für die verschiedenen Rollen meiner Server. Also habe ich eine Puppe und ein Puppen-Dashboard- Modul. Das Puppenmodul stellt sicher, dass die Puppe korrekt installiert ist. Das Puppen-Dashboard macht natürlich dasselbe für das Puppen-Dashboard.

Beide Module benötigen die passende Quelle für Puppetlabs (übrigens verwende ich https://github.com/puppetlabs/puppet-apt ). Ich habe also die folgende definierte Ressource in Puppet und Puppet-Dashboard- Modul:

    apt::source { "puppetlabs":
      location          => "http://apt.puppetlabs.com",
      release           => "squeeze",
      repos             => "main",
      required_packages => true,
      include_src       => false,
      key               => "4BD6EC30",
      key_server        => "pgp.mit.edu",
    }

Jetzt erhalte ich den folgenden Fehler auf meinem Agenten:

err: Could not retrieve catalog from remote server: Error 400 on SERVER: Duplicate declaration: Apt::Source[puppetlabs] is already declared in file /etc/puppet/modules/puppet/manifests/base.pp at line 27; cannot redeclare at /etc/puppet/modules/puppet-dashboard/manifests/init.pp:42 on node server123

Die einzelnen Module sind unabhängig voneinander. Daher halte ich es für richtig, die Abhängigkeit dieser passenden Quelle in jedem Modul separat festzulegen.

Eine Problemumgehung wäre, eine Quelle von puppetlabsnach puppetlabs2oder etw umzubenennen . so wie das. Aber es muss eine andere Lösung geben.

Ich bin gespannt auf Ihre Antworten!

Mehr
quelle

Antworten:

4

Immer wenn ich dieses Problem habe (besonders häufig bei Paketen), ordne ich die Ressource einfach einer Klasse zu:

class git {
    package { 'git': ensure => installed, }
}

Dann füge ich die Klasse hinzu, anstatt die Ressource zu definieren.

Nächstes Problem: Sie werden aber von verschiedenen Modulen verwendet! Ja, entweder in commonoder in einem anderen modulspezifischen allgemeinen Modul (z. B. puppet-common).

Daniel C. Sobral
quelle
2

Es gibt verschiedene Möglichkeiten, dies zu beheben. Ich würde Ihre apt-Quelle persönlich in eine separate Klasse aufteilen und dann ein Include oder eine Vererbung (je nach Situation) verwenden, um diese Klasse dorthin zu ziehen, wo immer Sie sie benötigen.

Tim Brigham
quelle