Puppet: Organizando as dependências do módulo (arquivo de cópia se o pacote estiver presente)

3
  • Eu tenho alguns servidores (www, etc)
  • Eu tenho um sistema de monitoramento
  • Se uma máquina precisa ser monitorada pelo apache, é necessário que alguns arquivos sejam instalados.

Portanto, eu tenho um módulo apache (que instala o Apache) e estou escrevendo um módulo monitoring . Este módulo monitoring copiará os arquivos necessários, somente se o pacote do apache estiver instalado (ou se o módulo do apache estiver definido, ou algo parecido). O mesmo para o pacote mysql, etc.

O design acima é uma boa ideia? Qual seria o melhor caminho para esse tipo de dependência?

    
por SamK 04.11.2011 / 16:18

4 respostas

0

Em seus extdata, crie uma variável que defina se um servidor precisa ou não ser monitorado. Aqui está um exemplo de ativar o monitoramento por padrão e desativá-lo para um servidor específico.

extdata / common.csv

use_monitoring,true

extdata / ephemeral.example.com.csv

use_monitoring,false

Em sua turma para cada serviço, verifique se o monitoramento está ativado. Se estiver, inclua a classe responsável pelo monitoramento desse serviço. Isso pode parecer algo como

class apache {

  # Manage your apache setup here

  if extlookup("use_monitoring") == 'true' {
    include monitoring::apache
  }

}

class monitoring::apache {
  # Manage your apache monitoring setup here
}

Atualização: quando li sua pergunta pela primeira vez, pensei que você estivesse solicitando uma maneira de ativar o monitoramento em alguns, mas não em todos os seus servidores Apache. Se você quiser monitorar todos eles, você nem precisa se preocupar com o extlookup. Apenas divida sua classe de monitoramento em classes específicas de serviço e inclua-as na classe para o serviço.

    
por 04.11.2011 / 20:08
2

Em sua classe apache, você poderia definir uma variável, que você usa em um teste para ver se deve entregar seu arquivo de monitoramento ou não.

class apache {
  $apacheconfigured = true;
}

class monitor {
  if $apache::apacheconfigured {
    file {'blah': ... }
  }
}
    
por 04.11.2011 / 17:41
1

Você precisa recursos virtuais ou fatos personalizados . Se a configuração de um host alterar a configuração de outro, você precisará de recursos exportados . Eu tenho todas essas coisas, na verdade. Aqui está uma amostra.

Recursos Virtuais

Na classe de monitoramento:

@file { '/path/to/apache/monitoring/conf': 
    ensure => file,
    source => 'puppet:///modules/monitoring/apache.conf',
    tag    => 'apache-extras',
}

Na classe Apache:

File <| tag == 'apache-extras' |>
Exec <| tag == 'apache-extras' |>
etc...

Fatos personalizados

Declare um fato como esse e coloque-o no lugar apropriado (veja o link acima):

# apache2.rb
Facter.add("apache2") do
        setcode do
                %x{/usr/bin/test -x /etc/init.d/apache2 && /bin/echo yes || /bin/echo no}.chomp
        end
end

Na classe Monitoring, use:

if $apache2 == 'yes'   {
   # include configuration for apache
}

Recursos exportados

Na classe Apache, incluída no servidor Apache:

@@exec { "config-web $fqdn": 
            tag => "monitoring-server", 
    }

Na classe Monitoring, incluída no servidor de monitoramento:

<<| tag == 'monitoring-server' |>>
    
por 04.11.2011 / 20:12
-1

Por que não apenas require => Package['apache'] dos recursos no módulo de monitoramento? Se houver apache e monitoring classes adicionadas ao nó, os arquivos que dependem do apache serão instalados se for instalado com êxito. Se isso não acontecer (por exemplo, o pacote não foi instalado ou o módulo do apache não foi adicionado ao nó, a classe de monitoramento falharia).

Ou se você não quiser que ele falhe, você pode usar algo como seguir:

if defined(Package['apacge']) {
    file {...}
    <and so on>
}
    
por 04.11.2011 / 16:34

Tags