如何从节点中现有的模块扩展文件定义?

如何从节点中现有的模块扩展文件定义?

我使用旧版本的 example42 mysql 模块,它定义了 mysql.conf 文件,但没有定义其内容。我的目标是仅包含 mysql 模块并在节点中添加内容定义。

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")}
}

上述代码会产生“只有子类可以覆盖参数”

将内容定义添加到现有文件定义的正确方法是什么?

答案1

用一个资源收集者, 描述这里。即使不在子类中,资源收集器也可以覆盖资源参数。它们的用途也更广泛,可以使用标签或其他参数(而不仅仅是标题)来收集资源。

node xyz
{
    include mysql
    File <| title == "mysql.conf" |> { 
        content => template("mymodule/mysql.conf.erb"),
    }
}

编辑:使用子类

另一种选择是声明一个子类并将其包含在节点定义中:

class mysql_custom inherits mysql {
    File["mysql.conf"] { content => template("mymodule/mysql.conf.erb")}
}

node xyz {
    include mysql_custom
}

相关内容