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.