在没有 puppet-postgres 的情况下使用 puppet 安装 postgres

Using puppet to install postgres without puppet-postgres

我正在尝试安装 postgresql、设置数据库和用户,但我卡在了设置数据库和使用部分。我到目前为止是:

# Install postgres
class postgres::install {

  package { [
    'postgresql',
    'postgresql-contrib',
  ]:
  ensure => "installed",
  }
}

但是现在我如何使用它来创建用户、数据库并将对该数据库的所有权限授予该用户?

您可以通过多种方式执行此操作,但重复执行此操作的最简单方法是使用调用几个 exec 的定义:

Exec {
  path => [
    '/usr/local/sbin',
    '/usr/local/bin',
    '/usr/bin',
    '/usr/sbin',
    '/bin',
    '/sbin',
  ]
}
define postgres::db_setup (
  $dbname,
){
  exec { "configure_db_${dbname}":
    command => "pg command here using ${dbname}; touch success.txt"
    creates => "db_${dbname}_success.txt"
  }
}
define postgres::user_setup (
  $dbuser,
  $dbpassword,
  $dbname,
){      
  exec { "configure_user_${dbuser}_on_${dbname}":
    command => "pg command here using ${dbuser} on ${dbname} identified by ${dbpassword}; touch usersuccess.txt"
    creates => "user_${dbuser}_success.txt"
  }

然后当你调用定义时:

postgres::db_setup { 'this_new_db':
  dbname => 'mynewdbname'
}

postgres::db_user { 'this_new_db_user_on_dbname':
  dbuser     => 'mynewdbuser',
  dbpassword => 'blahblah',
  dbname     => 'mynewdbname',
  require    => Postgres::Db_setup['this_new_db'],
}

这是一种非常肮脏的方式来完成你想要的,即在 exec 完成时使用虚拟文件进行注册。在我的 MySQL 环境中,我在使用 erb 模板创建的脚本上使用 execs 以允许更精确的错误检查。