Назад | Перейти на главную страницу

Перезапуск mysql с использованием модуля puppetlabs / mysql?

У меня есть две папки: одна «public_modules», а другая - «private_modules». Когда я запускаю новую машину Vagrant, папка public_modules заполняется модулями, как описано в моем файле Puppetfile (для краткости, это все модули в puppetforge). private_modules содержит все изменения и настройки, которые мне нужно изменить для общедоступных модулей. Используя librarian-puppet, мне не нужно проверять эти общедоступные модули или полагаться на подмодули 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 с помощью встроенной команды оболочки в конце моего Vagrantfile, но это определенно взлом.

Здесь модуль puppetlabs

У меня была такая же проблема, и я решил ее, добавив параметр «перезапуск» в мою инициализацию :: mysql :: server.

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

Это указывает модулю mysql перезапускать mysql при каждом изменении.

Я не понимаю, почему вы вообще хотите его перезапустить? Модуль puppetlabs-mysql будет управлять всеми перезагрузками, необходимыми после всех изменений конфигурации.

В любом случае, ваше объявление службы не перезапустит MySQL, если файл my.cnf не изменится. Поскольку все изменения выполняются через модуль puppetlabs-mysql, он перезапустит сам сервис, поэтому я не вижу смысла в вашем объявлении.

Но, не вдаваясь в причины, по которым вы хотите это сделать, я предлагаю вам добавить следующий ресурс в конец вашего модуля:

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']
}