Às vezes, há interações complicadas entre os pacotes. Para evitar a interface de classe com inúmeros parâmetros aparentemente não relacionados, pensei em usar tags, defined(<resource>)
function para permitir que os recursos alterassem um pouco seu comportamento com base no restante da configuração (não em fatos).
Infelizmente eu não consigo descobrir uma maneira de permitir que o Puppet analise primeiro a classe que pode gerar condições, e só então analise a classe que comportamento implicitamente (por meio de tags, por exemplo) depende do modo como a primeira classe foi executada.
Suponha que aqui exista uma classe que gere um local onde um usuário específico armazena seus dados pessoais confidenciais. A turma pode, por exemplo crie a partição (possivelmente criptografada) ou apenas mantenha uma pasta externa (por exemplo, / mnt / user). Ou pode manter as pastas onde estão por padrão, ou seja, em / home / user (spurcetype = > 'none')
class userdocs ( $sourcetype) {
case $sourcetype {
'cryptpartition' : {
tag 'dedicated_user_docs_partition'
...
}
'partition' : {
tag 'dedicated_user_docs_partition'
...
}
'none' : {
...
}
}
...
}
Além do conjunto padrão de pastas, que um usuário pode querer encaminhar para sua partição, existem pastas cuja existência depende do software em execução, como thunderbird ou virtualbox. Criação do link (em vez de pasta) por exemplo O VirtualBox deve ser feito apenas se duas condições forem satisfeitas: a) usuário gerencia partição separada ( tagged('dedicated_user_docs_partition')
) e usuário instala o VirtualBox.
Deve haver um lugar onde eu possa colocar esse código extra, que verifica essas duas condições. Eu posso colocá-lo na classe, que gerencia a caixa virtual:
class vbox {
if tagged('dedicated_user_docs_partition') {
file { "${userhome}/.VirtualBox": ensure=>link, require=>Class['userdocs'] ...
}
} else {
file { "${userhome}/.VirtualBox": ensure=>directory, require=>Class['userdocs'] ...
}
}
...
}
O problema é que, embora eu exija explicitamente que o recurso file
seja executado antes da classe userdocs
, o recurso file
é avaliado após e o fantoche erroneamente assume que o usuário não tem o dedicated_user_docs_partition
e executa a ramificação errada da instrução if
.
Existe alguma maneira de resolver este problema?
Eu fiz uma postagem cruzada desta questão em ask.puppetlabs.com .