Я изучаю марионетку в автономной системе и наткнулся на стену с копированием файла конфигурации для MySQL. Используя приведенный ниже манифест, MySQL установлен, но файл my.cnf не копируется.
init.pp (имя хоста: dev_one.site.com)
class mysql {
case $servername {
"prod_one.site.com", "dev_one.site.com", "sandbox_one.site.com": {
$conf_file = 'my.cnf.one'
}
"prod_two.site.com", "dev_two.site.com", "sandbox_two.site.com": {
$conf_file = 'my.cnf.two'
}
}
package { "mysql-server":
ensure => present,
}
package { "mysql":
ensure => present,
}
file { 'my.cnf':
path => '/etc/',
ensure => file,
require => Package['mysql'],
source => "puppet:///modules/mysql/${conf_file}"
}
service { "mysqld":
ensure => running,
enable => true,
require => Package["mysql-server"]
}
}
И вот результат:
[root@dev_one manifests]# puppet apply --verbose ./init.pp
Info: Applying configuration version '1379018555'
Notice: /Stage[main]/Mysql/Package[mysql-server]/ensure: created
Notice: /Stage[main]/Mysql/Service[mysqld]/ensure: ensure changed 'stopped' to 'running'
Info: /Stage[main]/Mysql/Service[mysqld]: Unscheduling refresh on Service[mysqld]
Notice: Finished catalog run in 14.34 seconds
[root@dev_one manifests]# ll /etc/my*
total 0
Ошибок нет, но my.cnf не копируется. Что я делаю не так?
Во-первых, где $servername
устанавливается? Это нестандартный факт, поэтому для того, чтобы иметь контент, вам потребуется либо настраиваемый факт, либо переменная манифеста. Вы хотите использовать $clientcert
или $fqdn
вместо?
На ваше file
ресурс .. Я бы подумал, что это должно быть ошибкой, но, возможно, нет, так как /etc/
существует .. проблема в том, что заявленный ресурс пытается управлять /etc/
вместо того /etc/my.cnf
. Либо объявите полный путь к файлу в имени ресурса и опустите path
параметр:
file { '/etc/my.cnf':
Или, есть path
параметр - полный путь к файлу (тогда имя не имеет значения):
file { 'MySQL Config':
path => '/etc/my.cnf',
Но ... я бы действительно не рекомендовал жестко указывать логику «какой конфигурационный файл получает этот сервер» в вашем манифесте. Вместо этого используйте Hiera или определения узлов с параметризованными классами.