Como estender uma definição de arquivo de um módulo existente no nó?

Como estender uma definição de arquivo de um módulo existente no nó?

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
}

informação relacionada