使用 puppetlabs mysql 模块添加自定义服务器选项
Adding custom server options with puppetlabs mysql module
我有一个包含这个短语的 puppet 清单(我的问题是最后的生产块),用于设置 mysql 配置文件:
class web_mysql_server {
include web_mysql::packages
include web_mysql::mysql_server
}
class web_mysql::packages {
Package { ensure => installed }
package { 'libmysqlclient-dev': }
}
class web_mysql::mysql_server {
# Qualified keys (dot notation: web_mysql_server.mysql_database) isn't available
# until hiera 2.0.
$mysql_config = hiera('web_mysql_server')
# https://forge.puppetlabs.com/puppetlabs/mysql
class { '::mysql::server':
root_password => '...',
remove_default_accounts => true,
override_options => {
# The data in this block gets written to /etc/mysql/my.cnf.
'mysqld' => {
max_connections => '1024', # No good reason but parroting others.
key_buffer_size => '512M', # No good reason but parroting others.
},
'production' => {
adaptor => 'mysql2',
database => $mysql_config['mysql_database'],
user => $mysql_config['mysql_username'],
password => $mysql_config['mysql_password'],
host => '0.0.0.0',
encoding => 'UTF8',
},
但有时我可能希望数据库是临时数据库,因此将其称为生产有点令人困惑。没问题,我最近了解了 hiera,这是我今天所有钉子的锤子:
$mysql_config['mysql_name'] => {
adaptor => 'mysql2',
database => $mysql_config['mysql_database'],
user => $mysql_config['mysql_username'],
password => $mysql_config['mysql_password'],
host => '0.0.0.0',
encoding => 'UTF8',
},
不,那是行不通的,尽管错误 ("syntax error at line (...with '=>'...), expected '}'"
) 并不是很能说明问题。
("Key" 可能是错误的词。请纠正我。我对木偶有点陌生。这本身可能就是我无法通过谷歌搜索和阅读来回答这个问题的原因.)
感谢您的指点。
您使用 web_mysql::mysql_server
的方式表明 class 有一个名为 production
的 参数。如果是这种情况,则在使用 class 时必须使用该名称。相反,为什么不直接调用参数 mysql
或 client
,因为它似乎是客户端配置参数?
原问题的答案:
您的清单版本都不是有效的 Puppet。例如,将其放入我的清单中:
'production' => {
adaptor => 'mysql2',
}
和 运行 puppet apply --noop --modulepath modules manifests/host.pp
结果:
Error: Could not parse for environment production: Syntax error at '=>' at [...]/host.pp:1:14 on node hostname
你是想说这样的话吗?
$database_configuration = {
adaptor => 'mysql2',
database => $mysql_config['mysql_database'],
user => $mysql_config['mysql_username'],
password => $mysql_config['mysql_password'],
host => '0.0.0.0',
encoding => 'UTF8',
}
更新: 我现在看到 mysql
模块提供了一个选项,可以立即将部分添加到配置文件中。以下是根据 documentation:
应该如何使用
$override_options = {
$mysql_config['mysql_name'] => {
adaptor => 'mysql2',
database => $mysql_config['mysql_database']
# ...
}
}
class { '::mysql::server':
root_password => 'strongpassword',
remove_default_accounts => true,
override_options => $override_options,
}
或者,如果将 mysql_name
值放在不同的 hiera 键下,您可以节省一些代码:
$override_options = {
hiera('mysql_name') => hiera('web_mysql_server')
}
原回答:
如果您的实际意图只是创建一个配置文件,最好的方法是使用 templates in erb syntax。
这是一个例子。首先,将 my.cnf.erb
文件放入模块的 templates
目录(例如 modules/web_mysql/templates
):
[<%= @mysql_config['mysql_name'] %>]
adaptor = mysql2
database = <%= @mysql_config['mysql_database'] %>
user = <%= @mysql_config['mysql_username'] %>
password = <%= @mysql_config['mysql_password'] %>
host = 0.0.0.0
encoding = UTF8
您可以在 web_mysql::mysql_server
class 中使用此模板来创建配置文件:
class web_mysql::mysql_server {
# ...
$mysql_config = hiera('web_mysql_server')
file { '/etc/mysql/my.cnf':
ensure => 'present',
content => template('web_mysql/my.cnf.erb'),
}
}
我有一个包含这个短语的 puppet 清单(我的问题是最后的生产块),用于设置 mysql 配置文件:
class web_mysql_server {
include web_mysql::packages
include web_mysql::mysql_server
}
class web_mysql::packages {
Package { ensure => installed }
package { 'libmysqlclient-dev': }
}
class web_mysql::mysql_server {
# Qualified keys (dot notation: web_mysql_server.mysql_database) isn't available
# until hiera 2.0.
$mysql_config = hiera('web_mysql_server')
# https://forge.puppetlabs.com/puppetlabs/mysql
class { '::mysql::server':
root_password => '...',
remove_default_accounts => true,
override_options => {
# The data in this block gets written to /etc/mysql/my.cnf.
'mysqld' => {
max_connections => '1024', # No good reason but parroting others.
key_buffer_size => '512M', # No good reason but parroting others.
},
'production' => {
adaptor => 'mysql2',
database => $mysql_config['mysql_database'],
user => $mysql_config['mysql_username'],
password => $mysql_config['mysql_password'],
host => '0.0.0.0',
encoding => 'UTF8',
},
但有时我可能希望数据库是临时数据库,因此将其称为生产有点令人困惑。没问题,我最近了解了 hiera,这是我今天所有钉子的锤子:
$mysql_config['mysql_name'] => {
adaptor => 'mysql2',
database => $mysql_config['mysql_database'],
user => $mysql_config['mysql_username'],
password => $mysql_config['mysql_password'],
host => '0.0.0.0',
encoding => 'UTF8',
},
不,那是行不通的,尽管错误 ("syntax error at line (...with '=>'...), expected '}'"
) 并不是很能说明问题。
("Key" 可能是错误的词。请纠正我。我对木偶有点陌生。这本身可能就是我无法通过谷歌搜索和阅读来回答这个问题的原因.)
感谢您的指点。
您使用 web_mysql::mysql_server
的方式表明 class 有一个名为 production
的 参数。如果是这种情况,则在使用 class 时必须使用该名称。相反,为什么不直接调用参数 mysql
或 client
,因为它似乎是客户端配置参数?
原问题的答案:
您的清单版本都不是有效的 Puppet。例如,将其放入我的清单中:
'production' => {
adaptor => 'mysql2',
}
和 运行 puppet apply --noop --modulepath modules manifests/host.pp
结果:
Error: Could not parse for environment production: Syntax error at '=>' at [...]/host.pp:1:14 on node hostname
你是想说这样的话吗?
$database_configuration = {
adaptor => 'mysql2',
database => $mysql_config['mysql_database'],
user => $mysql_config['mysql_username'],
password => $mysql_config['mysql_password'],
host => '0.0.0.0',
encoding => 'UTF8',
}
更新: 我现在看到 mysql
模块提供了一个选项,可以立即将部分添加到配置文件中。以下是根据 documentation:
$override_options = {
$mysql_config['mysql_name'] => {
adaptor => 'mysql2',
database => $mysql_config['mysql_database']
# ...
}
}
class { '::mysql::server':
root_password => 'strongpassword',
remove_default_accounts => true,
override_options => $override_options,
}
或者,如果将 mysql_name
值放在不同的 hiera 键下,您可以节省一些代码:
$override_options = {
hiera('mysql_name') => hiera('web_mysql_server')
}
原回答:
如果您的实际意图只是创建一个配置文件,最好的方法是使用 templates in erb syntax。
这是一个例子。首先,将 my.cnf.erb
文件放入模块的 templates
目录(例如 modules/web_mysql/templates
):
[<%= @mysql_config['mysql_name'] %>]
adaptor = mysql2
database = <%= @mysql_config['mysql_database'] %>
user = <%= @mysql_config['mysql_username'] %>
password = <%= @mysql_config['mysql_password'] %>
host = 0.0.0.0
encoding = UTF8
您可以在 web_mysql::mysql_server
class 中使用此模板来创建配置文件:
class web_mysql::mysql_server {
# ...
$mysql_config = hiera('web_mysql_server')
file { '/etc/mysql/my.cnf':
ensure => 'present',
content => template('web_mysql/my.cnf.erb'),
}
}