Gostaria de escrever um manifesto de fantoches para instalar e configurar um aplicativo nos servidores de destino.
Partes deste manifesto serão reutilizáveis. Assim, usei define
para definir minha funcionalidade reutilizável. Ao fazer isso, sempre tenho o problema de que há partes da definição que não são reutilizáveis.
Um exemplo simples é um monte de arquivos de configuração a serem criados. Esse arquivo deve ser colocado no mesmo diretório. Este diretório deve ser criado apenas uma vez.
Exemplo:
nodes.pp
node 'myNode.in.a.domain' {
mymodule::addconfig {'configfile1.xml':
param => 'somevalue',
}
mymodule::addconfig {'configfile2.xml':
param => 'someothervalue',
}
}
mymodule.pp
define mymodule::addconfig ($param) {
$config_dir = "/the/directory/"
#ensure that directory exits:
file { $config_dir:
ensure => directory,
}
#create the configuration file:
file { $name:
path => "${config_dir}/${name}"
content => template('a_template.erb'),
require => File[$config_dir],
}
}
Este exemplo irá falhar , porque agora o recurso file {$config_dir:
é definido duas vezes.
Tanto quanto eu entendi, é necessário extrair essas partes em um class
. Então parece com isso:
nodes.pp
node 'myNode.in.a.domain' {
class { 'mymodule::createConfigurationDirectory':
}
mymodule::addconfig {'configfile1.xml':
param => 'somevalue',
require => Class ['mymodule::createConfigurationDirectory'],
}
mymodule::addconfig {'configfile2.xml':
param => 'someothervalue',
require => Class ['mymodule::createConfigurationDirectory'],
}
}
Mas isso dificulta o uso da minha interface. Cada usuário do meu módulo tem que saber que há uma classe que é adicionalmente necessária.
Para este caso de uso simples, a classe adicional pode ser aceitável. Mas com a crescente complexidade dos módulos (muitas definições) estou com um pouco de medo de confundir o usuário dos módulos.
Então, eu gostaria de saber se existe uma maneira melhor de lidar com essas dependências. Idealmente, classes como createConfigurationDirectory
estão ocultas do usuário dos módulos api.
Ou existem outras "melhores práticas" / padrões que lidam com essas dependências?