使用puppetlabs / mysql模块重新启动mysql?

我有两个文件夹 – 一个是“public_modules”,另一个是“private_modules”。 当我启动一个新的Vagrant机器时,'public_modules'文件夹中填充了我的Puppetfile中所描述的模块(为简单起见,这些都是puppetforge上的所有模块)。 'private_modules'包含我需要更改公共模块的任何修改和设置。 通过使用图书pipe理员傀儡,我不需要检查这些公共模块,也不依赖于git子模块。 考虑下面的清单文件:

class drupaldb { class { '::mysql::server': root_password => 'platform', override_options => { 'mysqld' => { 'max_connections' => '1024', 'bind-address' => '0.0.0.0' } } } mysql::db { 'drupaldb': user => 'root', password => 'platform', host => '%', grant => ['SELECT', 'UPDATE', 'DELETE'], } service { 'mysql': ensure => running, enable => true, subscribe => File['/etc/mysql/my.cnf'] } } 

Provisioning Vagrant将会失败,因为在这个公共模块中已经定义了mysql服务:

 class mysql::server::service { if $mysql::server::real_service_enabled { $service_ensure = 'running' } else { $service_ensure = 'stopped' } if $mysql::server::real_service_manage { file { $mysql::params::log_error: owner => 'mysql', group => 'mysql', } service { 'mysqld': ensure => $service_ensure, name => $mysql::server::service_name, enable => $mysql::server::real_service_enabled, provider => $mysql::server::service_provider, } } } 

所以,我一直无法解决的是如何指示MySQL重新启动在我的模块结束? 我已经采取了重新启动mysql通过内联shell命令在我的Vagrantfile结束,但是这肯定是一个黑客。

这是puppetlabs模块

我有同样的问题,我通过添加一个“重新启动”参数来解决我的:: mysql :: server初始化。

 class { '::mysql::server': override_options => $override_options, restart => true, } 

这告诉了mysql模块在有变化时重新启动mysql。

我不明白的是你为什么要重新启动呢? puppetlabs-mysql模块将pipe理所有configuration更改后所需的所有重新启动。

无论如何,你的服务声明将不会重新启动MySQL,除非my.cnf文件改变。 由于所有的更改都是通过puppetlabs-mysql模块完成的,所以它会重启服务本身,所以我没有看到你的声明中的要点。

但是,不要理解为什么你想要这样做,我build议你在模块的最后添加以下资源:

 notify { 'restart_mysql': notify => Service['mysqld'], require => [ Class['::mysql::server'], ::Mysql::Db['drupaldb'] ], } 

或者你可以用exec手动执行它:

 exec { 'restart_mysql': cmd => 'service mysqld restart', require => [ Class['::mysql::server'], ::Mysql::Db['drupaldb'] ], } 

由于模块将service资源包装在一个方便的类中,所以接近这个方法的标准方法是向该类发送一个事件。

 File['/etc/mysql/my.cnf'] ~> Class['mysql::server::service'] 

这有点尴尬,因为file资源也不在本地范围内。 通常它看起来像这样

 file { '/etc/mysql/my.cnf': ... notify => Class['mysql::server::service'] }