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?

  • Come posso pre-firmare i certificati burattini?
  • Valori variables minuscoli in un model Puppet
  • come posso call il nome di base del ruby nel burattino
  • Come possono i ragazzi imparare efficacemente e utilizzare il burattino?
  • I pacchetti di Puppet, il Puppet Forge e il buon codice Puppet?
  • Come posso dire a Puppet "Se dichiarare la class X, applicare le sue risorse prima della class Y"?
  •   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?

    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.