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

时间:2017-10-27 15:37:03

标签: postgresql chef chef-recipe

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

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

  • 创建用户
  • 创建该用户拥有的数据库
  • 对pg_hba.conf进行一些小改动,因此需要密码
  • 启动数据库

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

2 个答案:

答案 0 :(得分:2)

我们目前没有一个很好的答案来建立数据库用户和数据库。旧的database食谱用于处理,但代码是如此不可维护,我们觉得有义务在没有替换计划的情况下弃用它。它仍然存在并且应该是可行的,但它不是一种令人愉快的体验:(对于hba配置,您可以使用postgresql食谱和一些节点属性来控制它,并且类似地将为您启动数据库服务。

答案 1 :(得分:1)

我在这里得到了要旨的帮助: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