Files
cookbook-openstack-common/libraries/database.rb
Andy McCrae 5e7592dc18 Move to use "get_password" instead of "{user,service,db}_password"
The user_password, service_password and db_password functions are redundant
since they simply call "secret". Creates a get_password function that
will accept a "type" of db, service or user.

All instances of these calls have been changed to call get_password.

Interim commit that keeps the service,db and user functions in order to
merge other changes.

Change-Id: Iba4a611b387d0975e8a23cc758d2ac7dec8210ad
Partial-Bug: #1195915
2014-01-15 18:27:45 +00:00

117 lines
3.4 KiB
Ruby

#
# Cookbook Name:: openstack-common
# library:: default
#
# Copyright 2012-2013, AT&T Services, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
module ::Openstack
# Library routine that uses the database cookbook to create the
# service's database and grant read/write access to the
# given user and password.
#
# A privileged "super user" and password is determined from the
# underlying database cookbooks. For instance, if a MySQL database
# is used, the node["mysql"]["server_root_password"] is used along
# with the "root" (super)user.
def db_create_with_user service, user, pass
root_user_use_databag = node['openstack']['db']['root_user_use_databag']
info = db service
if info
host = info['host']
port = info['port'].to_s
type = info['db_type']
db_name = info['db_name']
case type
when "postgresql", "pgsql"
include_recipe "database::postgresql"
db_prov = ::Chef::Provider::Database::Postgresql
user_prov = ::Chef::Provider::Database::PostgresqlUser
super_user = "postgres"
if root_user_use_databag
user_key = node['openstack']['db']['root_user_key']
super_password = get_password "user", user_key
else
super_password = node['postgresql']['password']['postgres']
end
when "mysql"
# we have to install the 'mysql' gem, otherwise the provider won't work
include_recipe "database::mysql"
db_prov = ::Chef::Provider::Database::Mysql
user_prov = ::Chef::Provider::Database::MysqlUser
super_user = "root"
if root_user_use_databag
user_key = node['openstack']['db']['root_user_key']
super_password = get_password "user", user_key
else
super_password = node['mysql']['server_root_password']
end
when "db2"
db2_database "create database" do
db_name db_name
action :create
end
db2_user "create database user" do
db_user user
db_pass pass
db_name db_name
action :create
end
return info
else
::Chef::Log.error("Unsupported database type #{type}")
end
connection_info = {
:host => host,
:port => port.to_i,
:username => super_user,
:password => super_password
}
# create database
database "create #{db_name} database" do
provider db_prov
connection connection_info
database_name db_name
action :create
end
# create user
database_user user do
provider user_prov
connection connection_info
password pass
action :create
end
# grant privs to user
database_user user do
provider user_prov
connection connection_info
password pass
database_name db_name
host '%'
privileges [:all]
action :grant
end
end
info
end
end