Por que o Puppet pode exigir cada pacote apenas uma vez?

6

Ao definir dependências em uma classe, cada Package pode ser definido globalmente apenas uma vez. Eu tenho hierarquia de configuração e alguns pacotes devem ser instalados em todas as máquinas (que vai para a configuração padrão), mas outros devem ser instalados apenas em algumas categorias de máquinas. Como devo verificar se esse pacote já está em uma máquina quando a ameaça Puppet é uma declaração duplicada?

  Duplicate declaration: Package[wget] is already declared 

devo usar uma função como essa?

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

Eu esperaria da ferramenta de configuração lidar com esse problema por padrão ... estou faltando alguma coisa?

    
por Tombart 10.03.2013 / 17:57

2 respostas

7

Você pode usar o ensure_resource () no módulo stdlib :

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

Então, digamos, se o git já estiver instalado por alguma outra classe, isso seria ignorado. Você não deve se preocupar em definir um pacote apenas uma vez durante a configuração do boneco.

    
por 09.07.2014 / 12:19
4

Quando você tem pacotes duplicados, essa é uma maneira de lidar com isso. A outra maneira é evitar o problema em primeiro lugar usando recursos virtuais:

Declarando um recurso virtual

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

Realizando um recurso virtual (você pode realizar recursos várias vezes):

include packages
realize Package['pigz']

Outra abordagem é separar o código duplicado em outra classe - ou seja, uma classe 'wget'.

Documento de fantoches: link

    
por 10.03.2013 / 18:29