Em Puppet, qual seria a melhor maneira de especificar que um par de classes é mutuamente exclusivo?

3

Eu tenho um nó padrão assim:

node default {
    include test_server
    # A bunch of other irrlevant includes
}

Então eu tenho uma especificação de nó assim:

node linus inherit default {
    include production_server
}

Desejo incluir test_server e ter production_server , pois eles são mutuamente exclusivos.

Como faço isso?

    
por Belmin Fernandez 13.12.2011 / 17:10

3 respostas

4

É melhor criar uma classe chamada 'servertype' e distinguir com base em um parâmetro.

class servertype($testing = false) {
  if ($testing) {
     ... resources from your testing class ...
  } else {
     ... resources from your production class ...
  }
}
    
por 13.12.2011 / 20:55
1

De modo geral, usar um ENC (External Nodes Classifier) é a melhor opção para aplicar classes a hosts, ao contrário dos arquivos do nó. Você pode criar "Hostgroups", onde cada grupo tem várias classes. Desta forma, você pode evitar a herança. Existem vários ENCs disponíveis para que você não tenha que criar seus próprios.

    
por 14.12.2011 / 04:58
0

Não há noção de "desinclusão" em Puppet; uma vez que você incluiu algo, está incluído. O melhor que você pode fazer é incluir uma única classe que inclua internamente para incluir test_server ou production_server , dependendo das circunstâncias (veja um fato, veja uma variável passada, etc).

Exceto isso, você pode causar um erro se as duas classes forem incluídas. Uma maneira fácil de fazer isso seria simplesmente incluir um recurso sentinela em cada classe, em que o recurso tem o mesmo nome em ambos os pontos:

notice { unused:
  loglevel => debug,
}

A tentativa de incluir as duas classes fará com que o compilador falhe, evitando que o catálogo seja compilado.

Outra opção seria usar a função defined em cada classe para testar se a outra já foi definida. Em caso afirmativo, fail :

if defined(Class["test_server"]) {
  fail "Can't include test_server and production_server at the same time"
}

defined tem alguma semântica peculiar, embora dependa da ordem, e Puppet realmente não fornece muitas garantias em termos de ordenação de análise / análise.

    
por 14.12.2011 / 21:08

Tags