У меня есть две папки: одна «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']
}