Como depender de uma classe Puppet antes de montar?

1

Eu montei o Cloudfuse para acessar o Cloudfiles da Rackspace usando o Puppet, mas em um novo host, o mount é executado muito cedo, mesmo que eu exija toda a classe. Em Pro Puppet , James recomenda dividir as definições de classe da seguinte forma:

class cloudfuse{
  include cloudfuse::install, cloudfuse::service, cloudfuse::config
}

class cloudfuse::install{
  # download and install
}

class cloudfuse::config{
  file{'/root/.cloudfuse':
    notify => Class['cloudfuse::service'],
  }
}

class cloudfuse::service{
  service{'cloudfuse':
    ensure => running,
  }
}

Isso funciona muito bem. Quando eu estiver pronto para montar, eu preciso da classe pai de nível superior, assim:

exec{'mount /data/cloudfiles':
  command => "/usr/local/bin/cloudfuse /data/cloudfiles",
  require => [
    File['/data/cloudfiles'],
    Class['cloudfuse'],
  ]
}

As perguntas são:

  1. Isso é idiomático? Eu já vi isso em outro lugar, então eu diria que é.
  2. Será que eu preciso mesmo de cloudfuse::install em vez do pai?

Eu sei que exigir cloudfuse::install resolverá meu problema, mas se eu tiver uma aula muito simples, talvez não seja dividida em três assim, eu teria que adivinhar / olhar o manifesto para saber como para declarar a dependência.

    
por François Beausoleil 21.02.2012 / 02:56

1 resposta

7

Divulgação, eu sou um dos desenvolvedores do Puppet.

Infelizmente, um bug no Puppet significa que uma classe que contém apenas outras classes não causa dependências transitivas. Você pode usar o padrão "âncora" para contornar isso, ou você pode adicionar um recurso sem sentido para a classe de nível superior, como em:

class cloudfuse {
  include cloudfuse::install, ...
  notify { "hate #8040": message => "work around bug #8040" }
}

Você pode acompanhar o bug # 8040 para saber quando finalmente consertamos isso.

    
por 21.02.2012 / 03:08

Tags