puppet recursos duplicados e recursos virtuais

5

Visão geral

Comecei a usar o Puppet e não consegui descobrir nada.

Problema

Por causa da normalização, quando eu adiciono duas classes a um nó com pacotes que possuem as mesmas dependências, ele falha.

Em termos simples, temos recursos duplicados - neste caso, o pacote libssl .

Observação: os pacotes estão sendo mantidos para impedir que pacotes mais recentes sejam instalados.

Pergunta

Qual é a melhor maneira de contornar isso?

class ssh {
  package { 'openssh-server':
    ensure  => installed,
    require => Package['libssl'],
  }
  package { 'libssl': ensure => installed, }
}

class apache {
  package { 'apache':
    ensure   => installed,
    require  => Package['libssl'], 
  }        
  package { 'libssl': ensure => installed, }
}

node server {
  include apache
  include openssl-server
    
por hokeycokey 20.03.2012 / 23:46

3 respostas

7

Você tem duas escolhas que parecem quase iguais.

1: faça da sua própria turma.

class ssh {
  package { 'openssh-server':
    ensure => present,
    require => Class['ssl'],
  }
}
class ssl {
  package { 'libssl': ensure => present, }
}

2: recurso virtual

class vpackages {
  @package { 'libssl': }
}
class ssh {
  include vpackages
  package { 'openssh-server':
    ensure => present,
    require => Package['libssl'],
  }
  realize Package['libssl']
}

Acho melhor quebrar as dependências em seus próprios módulos, em vez de usar recursos virtuais.

    
por 21.03.2012 / 00:36
2

Se você estiver usando o gerenciamento de pacotes padrão para gerenciar os pacotes instalados via Puppet, você deve ser capaz de deixar a dependência libssl package no Puppet, pois isso será tratado automaticamente pelo sistema de gerenciamento de pacotes na maioria dos sistemas.

Em sistemas Debian / Ubuntu e RedHat / CentOS / SuSE, as ferramentas de gerenciamento de pacotes irão procurar por dependências e, a menos que você tenha se esforçado para parar o comportamento padrão, os pacotes dependentes adicionais serão incluídos quando o Puppet informar o sistema para instalar o pacote (no seu caso, simplesmente openssh-server ou apache )

    
por 20.03.2012 / 23:51
0

É um pouco feio, mas há uma função defined () que retorna true / false. Dessa forma, você pode definir recursos várias vezes, mas apenas "realizá-los" na primeira vez em que são avaliados. (use etapas de corrida de marionetes!)

por exemplo,

if defined(Package['libssl']) == false {
  package { 'libssl':
    ensure => installed, 
  }
}
    
por 21.03.2012 / 19:27

Tags