使用来自Puppet Labs的流行MySQL server module,它将$provider
设置为Oracle Linux 7.x上的mariadb,如果我不使用Maria,则会导致问题,而是使用Percona。问题出在params.pp
。我想知道是否有办法迫使$provider
成为mysql。我可以尝试创建一个符号链接到mariadb.log
,以解决这个问题,但它很丑...
这是来自params.pp
的代码:
case $::osfamily {
'RedHat': {
case $::operatingsystem {
'Fedora': {
if versioncmp($::operatingsystemrelease, '19') >= 0 or $::operatingsystemrelease == 'Rawhide' {
$provider = 'mariadb'
} else {
$provider = 'mysql'
}
}
/^(RedHat|CentOS|Scientific|OracleLinux)$/: {
if versioncmp($::operatingsystemmajrelease, '7') >= 0 {
$provider = 'mariadb'
} else {
$provider = 'mysql'
}
}
default: {
$provider = 'mysql'
}
}
资料来源:https://github.com/puppetlabs/puppetlabs-mysql/blob/master/manifests/params.pp
Error: Could not set 'present' on ensure: No such file or directory @ rb_sysopen - /var/log/mariadb/mariadb.log at /[redacted]/modules/mysql/manifests/server/installdb.pp:25
基本上,我正在通过Puppet寻找一个优雅的解决方法。但没有足够的经验知道如何实现它。 :(
谢谢!
您尝试通过提供程序工作表明您正在通过资源(例如mysql::db
)接近这一点,但如果服务器未配置为匹配,那么它将无法工作。
您在问题中突出显示的$provider
变量仅在类mysql::params
中设置和使用,并且仅适用于某些OS系列。它是属于类的普通变量,而不是类参数,并且如果没有文档,则应该将该类视为对该类是私有的。无论如何,不,Puppet无法在不修改模块的情况下覆盖该变量的值。
它是类mysql::server
,它提供了配置替代MySQL fork的途径。它提供了numerous parameters,您可以通过它配置所有细节,但没有一劳永逸的机制来设置不同的MySQL个性。
我想你会发现,如果你这样做,那么所有的资源类型都会起作用。在任何情况下,您都不应该声明任何私有资源类型的资源,也不应该覆盖您未声明的资源的属性。
几乎涵盖了您所询问的确切用例的示例在模块文档中显示为Install Percona Server on CentOS。请注意,我已从文档中复制了标题,但其中的“安装”一词有点误导。这不应该只安装服务器,而是为所有模块的资源类型设置阶段来管理它。
我认为你更喜欢一种更简单的方法来配置非默认的fork,但该模块目前不提供一个。