MySQL服务器 - Puppet Labs模块和Oracle Linux 7

问题描述 投票:0回答:1

使用来自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 puppet percona
1个回答
-1
投票

您尝试通过提供程序工作表明您正在通过资源(例如mysql::db)接近这一点,但如果服务器未配置为匹配,那么它将无法工作。 您在问题中突出显示的$provider变量仅在类mysql::params中设置和使用,并且仅适用于某些OS系列。它是属于类的普通变量,而不是类参数,并且如果没有文档,则应该将该类视为对该类是私有的。无论如何,不​​,Puppet无法在不修改模块的情况下覆盖该变量的值。

它是类mysql::server,它提供了配置替代MySQL fork的途径。它提供了numerous parameters,您可以通过它配置所有细节,但没有一劳永逸的机制来设置不同的MySQL个性。 我想你会发现,如果你这样做,那么所有的资源类型都会起作用。在任何情况下,您都不应该声明任何私有资源类型的资源,也不应该覆盖您未声明的资源的属性。

几乎涵盖了您所询问的确切用例的示例在模块文档中显示为Install Percona Server on CentOS。请注意,我已从文档中复制了标题,但其中的“安装”一词有点误导。这不应该只安装服务器,而是为所有模块的资源类型设置阶段来管理它。

我认为你更喜欢一种更简单的方法来配置非默认的fork,但该模块目前不提供一个。

© www.soinside.com 2019 - 2024. All rights reserved.