
Eu uso uma versão mais antiga do módulo example42 mysql, que define o arquivo mysql.conf, mas não seu conteúdo. Meu objetivo é apenas incluir o módulo mysql e adicionar uma definição de conteúdo no nó.
class mysql {
...
file { "mysql.conf":
path => "${mysql::params::configfile}",
mode => "${mysql::params::configfile_mode}",
owner => "${mysql::params::configfile_owner}",
group => "${mysql::params::configfile_group}",
ensure => present,
require => Package["mysql"],
notify => Service["mysql"],
}
...
}
node xyz
{
include mysql
File["mysql.conf"] { content => template("mymodule/mysql.conf.erb")}
}
O código acima produz uma mensagem "Somente subclasses podem substituir parâmetros"
Qual é a maneira correta de adicionar apenas uma definição de conteúdo a uma definição de arquivo existente?
Responder1
Use umColetor de recursos, descritoaqui. Os coletores de recursos podem substituir parâmetros de recursos mesmo que não estejam em uma subclasse. Eles também são mais versáteis, os recursos podem ser coletados por meio de tags ou outros parâmetros, não apenas o título.
node xyz
{
include mysql
File <| title == "mysql.conf" |> {
content => template("mymodule/mysql.conf.erb"),
}
}
Editar: usando uma subclasse
Outra opção é declarar uma subclasse e incluí-la na definição do nó:
class mysql_custom inherits mysql {
File["mysql.conf"] { content => template("mymodule/mysql.conf.erb")}
}
node xyz {
include mysql_custom
}