Puppet 如何使用命令链接类

Puppet 如何使用命令链接类,puppet,librarian-puppet,Puppet,Librarian Puppet,我有下面的类,它安装mysql并设置一个名为user的用户,但是当createdatabase命令运行时,用户还没有被创建。 如何链接这些命令,以便在创建数据库尝试使用它之前创建用户 class { '::mysql::server': package_name => 'mariadb-server.x86_64', root_password => 'root', remove_default_accounts => tr

我有下面的类,它安装mysql并设置一个名为user的用户,但是当createdatabase命令运行时,用户还没有被创建。 如何链接这些命令,以便在创建数据库尝试使用它之前创建用户

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'
}
class{'::mysql::server':
package_name=>'mariadb server.x86_64',
root\u password=>“root”,
删除默认帐户=>true,
override_options=>$override_options,
重新启动=>true,
用户=>{
“用户@%”=>{
确保=>“当前”,
每小时最大连接数=>0,
每小时最大查询次数=>0,
每小时最大更新次数=>0,
最大用户连接数=>0,
密码\u hash=>“…”,
}
},
赠款=>{
“用户@%/*.*”=>{
确保=>“当前”,
选项=>['GRANT'],
特权=>['ALL'],
表=>“***”,
user=>“user@%”,
},
}
}->
exec{“创建数据库”:
创建=>'/opt/dbinstalled',
command=>'/usr/bin/mysql-u user-puser

我正在使用puppetlabs mysql包安装mysql。

您应该查看
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
的参数作为建立幂等性的其他方法时。

如果您使用的是puppetlabs mysql模块,您应该检查它附带的定义类型:,它可以同时处理用户和数据库。我最后不得不添加require=>[mysql\u grant['user@%/*.],mysql\u user['@user.mdlocal']哦,这才是真正的资源。我应该检查该类生成的实际资源是什么。您是否尝试过使
exec
资源等幂,或者这是不必要的?/opt/dbinstalled是在这个命令期间创建的,因此creates应该在下一个设置时停止运行。这一点很好;我很少使用creates属性,所以我忘记了它的存在。
exec { 'create-database':
  creates => '/opt/dbinstalled',
  command => '/usr/bin/mysql -u user -puser < /create-db.sql',
  require => User[username or array of users],
}
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,
}