使用 Chef 设置基本的 postgres 数据库

Setup basic postgres database using Chef

我正在尝试使用 Chef 建立一个非常基本的 postgres 数据库,但缺乏 Chef 经验来理解我在超市的食谱自述文件中找到的文档: https://supermarket.chef.io/cookbooks/postgresql

我需要的厨师相当于以下内容:

我希望能够 google 像这样基本的示例,但目前迷失在配置 postgresql 的所有可能方法中,我找不到起点。 如果另一本食谱更有意义,请解释原因。

我们目前没有关于创建 DB 用户和数据库的好答案。旧的 database 食谱曾经处理过这个问题,但是代码太难维护了,我们觉得有义务在没有替代计划的情况下弃用它。它仍然存在并且应该可以正常工作,但它不是一个令人愉快的体验:( 对于 hba 配置,您可以使用 postgresql 说明书和一些节点属性来控制它,并且类似地为您处理启动数据库服务。

我从这里给出的 Gist 那里得到了帮助:https://gist.github.com/exoer/1063712/01e9b166add182c14b54508ef5950152063f6de2 :

#
# Cookbook Name:: atari
# Recipe:: db_server
#
# Copyright 2010, Atari
#
# All rights reserved
#

include_recipe "postgresql::server"

r = package "ruby-pg" do
  package_name "libpgsql-ruby"
  action :nothing
end
r.run_action(:upgrade)

# Snippet from opscode to reload gems
require 'rubygems'
Gem.clear_paths
require "pg"

execute "create-database-user" do
  command "createuser -U postgres -SDRw youruser"
  only_if do
    c = PGconn.connect(:user=>'postgres', :dbname=>'postgres')
    r = c.exec("SELECT COUNT(*) FROM pg_user WHERE usename='youruser'")
    r.entries[0]['count']
  end
end

execute "create-database" do
  command "createdb -U postgres -O youruser-E utf8 -T template0 yourdb"
  only_if do
    c = PGconn.connect(:user=>'postgres', :dbname=>'postgres')
    r = c.exec("SELECT COUNT(*) FROM pg_database WHERE datname='yourdb'")
    r.entries[0]['count']
  end
end

还查看了 postgres 文档:https://www.postgresql.org/docs/9.5/app-createdb.html

最后我编辑了我的 dev-cookbook/recipes/db.rb 并创建了用户

# d - user is allowed to create database
# l - user is allowed to log in
# s - user is a superuser
execute "create-database-user" do
  command "createuser -U postgres -dls db_user"
end

并且数据库具有:

# U - user that is used to connect to psql
# O - owner of the database
# E - database encoding
execute "create-database" do
  command "createdb -U postgres -O db_user db_name -E 'utf8'"
end