我有以下类安装mysql并设置一个名为user的用户,但是当create-database命令运行时,尚未创建用户。 如何链接命令以便在create-database尝试使用它之前创建用户?
class { '::mysql::server':
package_name => 'mariadb-server.x86_64',
root_password => 'root',
remove_default_accounts => true,
override_options => $override_options,
restart => true,
users => {
'user@%' => {
ensure => 'present',
max_connections_per_hour => '0',
max_queries_per_hour => '0',
max_updates_per_hour => '0',
max_user_connections => '0',
password_hash => '...',
}
},
grants => {
'user@%/*.*' => {
ensure => 'present',
options => ['GRANT'],
privileges => ['ALL'],
table => '*.*',
user => 'user@%',
},
}
}->
exec { 'create-database':
creates => '/opt/dbinstalled',
command => '/usr/bin/mysql -u user -puser < /create-db.sql'
}
我正在使用puppetlabs-mysql包来安装mysql。
答案 0 :(得分:1)
您应该查看require, before, subscribe, notify
元参数的文档。它们用于描述资源排序(before, notify
),或者如果依赖项失败(require, subscribe
)则描述资源排序和失败。请注意,subscribe, notify
元参数仅适用于某些资源类型(exec, service
等)。
在这种情况下,您将执行以下操作来链接类:
exec { 'create-database':
creates => '/opt/dbinstalled',
command => '/usr/bin/mysql -u user -puser < /create-db.sql',
require => Class[::mysql::server],
}
但是你真的只需要依赖用户资源:
exec { 'create-database':
creates => '/opt/dbinstalled',
command => '/usr/bin/mysql -u user -puser < /create-db.sql',
require => User[username or array of users],
}
此外,您可能只想创建一次数据库,因此我们可以为幂等提供subscribe/refreshonly
:
exec { 'create-database':
creates => '/opt/dbinstalled',
command => '/usr/bin/mysql -u user -puser < /create-db.sql',
subscribe => User[username or array of users],
refreshonly => true,
}
请注意,如果您更改user
订阅的create-database
资源,则会重新运行exec
资源,因此请查看unless, onlyif
的{{1}}参数作为建立幂等性的其他方法。