From 86e4559589f17144537e0a49f07db35387b639cc Mon Sep 17 00:00:00 2001 From: Mark Washenberger Date: Thu, 21 Apr 2011 15:40:08 -0400 Subject: [PATCH 1/5] renamed nova-specific roles --- roles/{mysql-server.rb => nova-mysql-server.rb} | 4 ++-- roles/{rabbitmq-server.rb => nova-rabbitmq-server.rb} | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) rename roles/{mysql-server.rb => nova-mysql-server.rb} (64%) rename roles/{rabbitmq-server.rb => nova-rabbitmq-server.rb} (69%) diff --git a/roles/mysql-server.rb b/roles/nova-mysql-server.rb similarity index 64% rename from roles/mysql-server.rb rename to roles/nova-mysql-server.rb index 4264560..9ab2b12 100644 --- a/roles/mysql-server.rb +++ b/roles/nova-mysql-server.rb @@ -1,5 +1,5 @@ -name "mysql-server" -description "MySQL server" +name "nova-mysql-server" +description "MySQL server for Nova" run_list( "recipe[build-essential]", diff --git a/roles/rabbitmq-server.rb b/roles/nova-rabbitmq-server.rb similarity index 69% rename from roles/rabbitmq-server.rb rename to roles/nova-rabbitmq-server.rb index 9e2f8cb..ae51557 100644 --- a/roles/rabbitmq-server.rb +++ b/roles/nova-rabbitmq-server.rb @@ -1,4 +1,4 @@ -name "rabbitmq-server" +name "nova-rabbitmq-server" run_list( "recipe[rabbitmq]", From afe72af70e56ef77fa91ac59d6a17789177dc473 Mon Sep 17 00:00:00 2001 From: Mark Washenberger Date: Thu, 21 Apr 2011 15:40:48 -0400 Subject: [PATCH 2/5] make postgres work with squeeze-style postgres-common package --- cookbooks/postgresql/recipes/server_debian.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/cookbooks/postgresql/recipes/server_debian.rb b/cookbooks/postgresql/recipes/server_debian.rb index c1a5826..023aef2 100644 --- a/cookbooks/postgresql/recipes/server_debian.rb +++ b/cookbooks/postgresql/recipes/server_debian.rb @@ -29,7 +29,6 @@ end package "postgresql" service "postgresql" do - service_name "postgresql-#{node.postgresql.version}" supports :restart => true, :status => true, :reload => true action :nothing end From 9b418cd4694eb2233e364d159a01d3318ccc7055 Mon Sep 17 00:00:00 2001 From: Mark Washenberger Date: Fri, 22 Apr 2011 14:07:59 -0400 Subject: [PATCH 3/5] fix attributes name in nova rabbit --- cookbooks/nova/attributes/rabbit.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cookbooks/nova/attributes/rabbit.rb b/cookbooks/nova/attributes/rabbit.rb index 833059d..eb12d96 100644 --- a/cookbooks/nova/attributes/rabbit.rb +++ b/cookbooks/nova/attributes/rabbit.rb @@ -1,6 +1,6 @@ # # Cookbook Name:: nova -# Attributes:: mysql +# Attributes:: rabbit # # Copyright 2008-2009, Opscode, Inc. # From c89833859dbb11ad0a55b686b09b70d0ae3fe54b Mon Sep 17 00:00:00 2001 From: Mark Washenberger Date: Fri, 22 Apr 2011 14:09:37 -0400 Subject: [PATCH 4/5] generify mysql attribute names in nova (since they already were generic) --- cookbooks/nova/attributes/{mysql.rb => database.rb} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename cookbooks/nova/attributes/{mysql.rb => database.rb} (97%) diff --git a/cookbooks/nova/attributes/mysql.rb b/cookbooks/nova/attributes/database.rb similarity index 97% rename from cookbooks/nova/attributes/mysql.rb rename to cookbooks/nova/attributes/database.rb index bb62b51..ebf87da 100644 --- a/cookbooks/nova/attributes/mysql.rb +++ b/cookbooks/nova/attributes/database.rb @@ -1,6 +1,6 @@ # # Cookbook Name:: nova -# Attributes:: mysql +# Attributes:: database # # Copyright 2008-2009, Opscode, Inc. # From d383047d47558f6964dd412538c233d9cd4b0f02 Mon Sep 17 00:00:00 2001 From: Mark Washenberger Date: Fri, 22 Apr 2011 14:16:01 -0400 Subject: [PATCH 5/5] add postgresql support to nova and associated role --- cookbooks/nova/attributes/default.rb | 1 + cookbooks/nova/metadata.rb | 1 + cookbooks/nova/recipes/common.rb | 15 ++++++++ cookbooks/nova/recipes/postgresql.rb | 36 +++++++++++++++++++ cookbooks/postgresql/attributes/default.rb | 2 ++ cookbooks/postgresql/recipes/server_debian.rb | 5 ++- .../templates/default/debian.pg_hba.conf.erb | 5 +++ .../default/debian.postgresql.conf.erb | 2 +- roles/nova-postgresql-server.rb | 19 ++++++++++ 9 files changed, 84 insertions(+), 2 deletions(-) create mode 100644 cookbooks/nova/recipes/postgresql.rb create mode 100644 roles/nova-postgresql-server.rb diff --git a/cookbooks/nova/attributes/default.rb b/cookbooks/nova/attributes/default.rb index a207815..1e99b25 100644 --- a/cookbooks/nova/attributes/default.rb +++ b/cookbooks/nova/attributes/default.rb @@ -29,6 +29,7 @@ default[:nova][:my_ip] = ipaddress default[:nova][:public_interface] = "eth1" default[:nova][:vlan_interface] = "eth1" default[:nova][:mysql] = true +default[:nova][:postgresql] = false default[:nova][:images] = [] default[:nova][:network] = "10.0.0.0/24 8 32" default[:nova][:floating_range] = "10.128.0.0/24" diff --git a/cookbooks/nova/metadata.rb b/cookbooks/nova/metadata.rb index 0ff54fb..366bd88 100644 --- a/cookbooks/nova/metadata.rb +++ b/cookbooks/nova/metadata.rb @@ -11,5 +11,6 @@ depends "mysql" depends "openldap" depends "openssl" depends "python-ldap" +depends "postgresql" depends "rabbitmq" depends "runit" diff --git a/cookbooks/nova/recipes/common.rb b/cookbooks/nova/recipes/common.rb index 3a5cbc3..e84ecd4 100644 --- a/cookbooks/nova/recipes/common.rb +++ b/cookbooks/nova/recipes/common.rb @@ -53,6 +53,21 @@ if node[:nova][:mysql] Chef::Log.info("Using local mysql at #{mysql[:mysql][:bind_address]}") end sql_connection = "mysql://#{mysql[:nova][:db][:user]}:#{mysql[:nova][:db][:password]}@#{mysql[:mysql][:bind_address]}/#{mysql[:nova][:db][:database]}" +elsif node[:nova][:postgresql] + Chef::Log.info("Using postgresql") + postgresqls = nil + + unless Chef::Config[:solo] + postgresqls = search(:node, "recipes:nova\\:\\:postgresql#{env_filter}") + end + if postgresqls and postgresqls[0] + postgresql = postgresqls[0] + Chef::Log.info("PostgreSQL server found at #{postgresql[:ipaddress]}") + else + postgresql = node + Chef::Log.info("Using local PostgreSQL at #{postgresql[:ipaddress]}") + end + sql_connection = "postgresql://#{postgresql[:nova][:db][:user]}:#{postgresql[:nova][:db][:password]}@#{postgresql[:ipaddress]}/#{postgresql[:nova][:db][:database]}" end rabbits = nil diff --git a/cookbooks/nova/recipes/postgresql.rb b/cookbooks/nova/recipes/postgresql.rb new file mode 100644 index 0000000..67bda13 --- /dev/null +++ b/cookbooks/nova/recipes/postgresql.rb @@ -0,0 +1,36 @@ +# +# Cookbook Name:: nova +# Recipe:: postgresql +# + +Chef::Log.info("PostgreSQL recipe included") + +package "python-psycopg2" + +bash "postgresql-grant-nova-user-privileges" do + code <<-EOH + echo "GRANT ALL ON DATABASE #{node[:nova][:db][:database]} TO #{node[:nova][:db][:user]}" | su - postgres -c psql + EOH + action :nothing +end + +bash "postgresql-create-nova-user" do + code <<-EOH + echo "CREATE USER #{node[:nova][:db][:user]} WITH PASSWORD '#{node[:nova][:db][:password]}'" | su - postgres -c psql + EOH + action :nothing + notifies :run, "bash[postgresql-grant-nova-user-privileges]", :immediately +end + +bash "postgresql-create-nova-db" do + code <<-EOH + echo "CREATE DATABASE #{node[:nova][:db][:database]}" | su - postgres -c psql + EOH + notifies :run, "bash[postgresql-create-nova-user]", :immediately +end + +# save data so it can be found by search +unless Chef::Config[:solo] + Chef::Log.info("Saving node data") + node.save +end diff --git a/cookbooks/postgresql/attributes/default.rb b/cookbooks/postgresql/attributes/default.rb index c9a9cb8..7d9bb8e 100644 --- a/cookbooks/postgresql/attributes/default.rb +++ b/cookbooks/postgresql/attributes/default.rb @@ -66,3 +66,5 @@ else default[:postgresql][:version] = "8.4" set[:postgresql][:dir] = "/etc/postgresql/#{node[:postgresql][:version]}/main" end + +default[:postgresql][:hba_records] = [] diff --git a/cookbooks/postgresql/recipes/server_debian.rb b/cookbooks/postgresql/recipes/server_debian.rb index 023aef2..ddcfda4 100644 --- a/cookbooks/postgresql/recipes/server_debian.rb +++ b/cookbooks/postgresql/recipes/server_debian.rb @@ -38,6 +38,9 @@ template "#{node[:postgresql][:dir]}/pg_hba.conf" do owner "postgres" group "postgres" mode 0600 + variables( + :records => node[:postgresql][:hba_records] + ) notifies :reload, resources(:service => "postgresql") end @@ -46,5 +49,5 @@ template "#{node[:postgresql][:dir]}/postgresql.conf" do owner "postgres" group "postgres" mode 0600 - notifies :restart, resources(:service => "postgresql") + notifies :restart, resources(:service => "postgresql"), :immediately end diff --git a/cookbooks/postgresql/templates/default/debian.pg_hba.conf.erb b/cookbooks/postgresql/templates/default/debian.pg_hba.conf.erb index 7f9d523..7fc9cbb 100644 --- a/cookbooks/postgresql/templates/default/debian.pg_hba.conf.erb +++ b/cookbooks/postgresql/templates/default/debian.pg_hba.conf.erb @@ -81,3 +81,8 @@ local all all ident host all all 127.0.0.1/32 md5 # IPv6 local connections: host all all ::1/128 md5 + +# Chef-defined records +<% for @record in @records %> +<%= @record %> +<% end %> diff --git a/cookbooks/postgresql/templates/default/debian.postgresql.conf.erb b/cookbooks/postgresql/templates/default/debian.postgresql.conf.erb index c6359d6..ff740ae 100644 --- a/cookbooks/postgresql/templates/default/debian.postgresql.conf.erb +++ b/cookbooks/postgresql/templates/default/debian.postgresql.conf.erb @@ -53,7 +53,7 @@ external_pid_file = '/var/run/postgresql/<%= node.postgresql.version -%>-main.pi # - Connection Settings - -#listen_addresses = 'localhost' # what IP address(es) to listen on; +listen_addresses = '*' # what IP address(es) to listen on; # comma-separated list of addresses; # defaults to 'localhost', '*' = all # (change requires restart) diff --git a/roles/nova-postgresql-server.rb b/roles/nova-postgresql-server.rb new file mode 100644 index 0000000..c3b8d23 --- /dev/null +++ b/roles/nova-postgresql-server.rb @@ -0,0 +1,19 @@ +name "nova-postgresql-server" +description "PostgreSQL server for Nova" + +run_list( + "recipe[postgresql::server]", + "recipe[nova::postgresql]" +) + +default_attributes( + "nova" => { + "mysql" => false, + "postgresql" => true + }, + "postgresql" => { + "hba_records" => [ + "host all all 0.0.0.0/0 md5" + ] + } +)