Perché il burattino può richiedere each pacchetto solo una volta?

Nel definire le dependencies in una class each Package può essere definito globalmente una sola volta. Ho una gerarchia di configuration e alcuni pacchetti devono essere installati in tutte le macchine (che vanno alla configuration predefinita), ma altri devono essere installati solo su alcune categorie di macchine. Come devo controllare se quel pacchetto è già in una macchina quando la minaccia di Puppet è come una dichiarazione duplicata?

  Duplicate declaration: Package[wget] is already declared 

devo usare una function come questa?

  if defined( Package[$package] ) { debug("$package already installed") } else { package { $package: ensure => $ensure } } 

Mi aspetto da uno strumento di configuration per affrontare questo problema in modo predefinito … mi manca qualcosa?

  • Come correggere l'errore del path parametro completo di Puppet?
  • Possiamo get funzionalità simili a git con uno strumento come il burattino?
  • Come aggiornare il grub con il burattino?
  • puppet fileserver serve file non-module
  • Come installare i pacchetti dal codice sorgente con Puppet?
  • L'esecuzione delle autorizzazioni di directory home con il burattino
  • C'è qualcosa di simile a un burattino o un chef che può gestire le dependencies tra gli host?
  • Come possono i ragazzi imparare efficacemente e utilizzare il burattino?
  • 2 Solutions collect form web for “Perché il burattino può richiedere each pacchetto solo una volta?”

    È ansible utilizzare il module ensure_resource () dal module stdlib :

     $packages = $::osfamily ? { 'Debian' => [ 'fcgiwrap', ], 'RedHat' => [ 'spawn-fcgi', 'git' ], } ensure_resource('package', $packages, {'ensure' => 'present'}) 

    Quindi, ad esempio, se git è già installato da qualche altra class, ciò sarebbe stato ignorato. Non dovresti preoccuparti di definire un pacchetto solo una volta per tutta la configuration del burattino.

    Quando hai pacchetti duplicati, questo è un modo per affrontarlo. L'altro modo è quello di evitare il problema in primo luogo utilizzando risorse virtuali:

    Dichiarare una risorsa virtuale

     class packages { @package { ['cryptsetup-bin', 'cryptsetup', 'cifs-utils', 'e2fsprogs', 'libmysql-ruby', 'parted', 'pigz', 'sshfs' ]: ensure => present, } } 

    Realizzazione di una risorsa virtuale (è ansible realizzare risorse più volte):

     include packages realize Package['pigz'] 

    Un altro approccio è quello di separare il codice duplicato in un'altra class – cioè una class 'wget'.

    Puppet Doc: http://docs.puppetlabs.com/guides/virtual_resources.html

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.