No fantoche existe alguma maneira de não perceber recursos virtuais com coleções, apenas com perceber?

3

No fantoche, é possível realizar recursos virtuais com a função "realizar" ou com coleções.

Gostaria de saber se é possível realizar recursos somente com a função "realizar". Como um exemplo simplificado, eu gostaria que com o manifesto followig o nginx não fosse instalado, a menos que inclua nginx_conf module, que contém um reconhecimento implícito.

@package { 'nginx':
  ensure => present,
}

class nginx_conf {
  realize Package['nginx']

  file { '/etc/nginx/conf.d/foo':
    ensure => present,
    require => Package['nginx'],
  }
}

exec { 'apt-get update': path => '/usr/bin' }

Exec['apt-get update'] -> Package <| |>

Alguma ideia?

Uma opção é colocar o pacote dentro de uma classe separada que é exigida pelo módulo que vai realizá-lo, mas gostaria de saber se há alguma maneira de selecionar recursos virtuais em coleções somente se eles forem percebidos , e não os percebem apenas sendo incluídos em coleções.

    
por Jaime Soriano 04.05.2012 / 16:34

1 resposta

2

Não parece haver uma maneira completa de impedir que Package <| |> realizem recursos. Esta poderia ser uma solução parcial:

@package { 'nginx':
  ensure  => present,
  tag     => optional,
  require => Exec['apt-get update'],
}

Exec['apt-get update'] -> Package <| tag != optional |>

Você teria que definir os requisitos para cada pacote virtual, então.

O problema subjacente pode ser resolvido, no entanto, usando Run Stages:

class update-apt {
  exec { 'apt-get update': path => '/usr/bin' }
}

stage { 'first': before => Stage['main'] }
class {'update-apt':
  stage => 'first',
}

Todas as classes e recursos são executados no Palco principal por padrão, portanto Exec['apt-get update'] é sempre executado antes de quaisquer recursos do Pacote.

    
por 07.05.2012 / 13:54

Tags