From 4602fb014a38ac594671f1f9941e45b8a85eb81f Mon Sep 17 00:00:00 2001 From: rpedde Date: Wed, 23 May 2012 14:31:57 -0500 Subject: [PATCH] get nova-common working with osops-utils --- recipes/nova-common.rb | 159 ++++++++++++----------------------------- 1 file changed, 45 insertions(+), 114 deletions(-) diff --git a/recipes/nova-common.rb b/recipes/nova-common.rb index ec072337..5d2d8a8c 100644 --- a/recipes/nova-common.rb +++ b/recipes/nova-common.rb @@ -7,9 +7,9 @@ # 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. @@ -17,104 +17,35 @@ # limitations under the License. # -# Distribution specific settings go here -if platform?(%w{fedora}) - # Fedora - nova_common_package = "openstack-nova" - nova_common_package_options = "" - include_recipe "selinux::disabled" -else - # All Others (right now Debian and Ubuntu) - nova_common_package = "nova-common" - nova_common_package_options = "-o Dpkg::Options::='--force-confold' --force-yes" -end +platform_options = node["nova"]["platform"] -package nova_common_package do - action :upgrade - options nova_common_package_options +platform_options["common_packages"].each do |pkg| + package pkg do + action :upgrade + options platform_options["package_overrides"] + end end directory "/etc/nova" do action :create - owner :nova - group :nova + owner "nova" + group "nova" mode "0755" - not_if do - File.exists?("/etc/nova") - end end - -if Chef::Config[:solo] - Chef::Log.warn("This recipe uses search. Chef Solo does not support search.") -else - # Lookup mysql ip address - mysql_server, something, arbitary_value = Chef::Search::Query.new.search(:node, "roles:mysql-master AND chef_environment:#{node.chef_environment}") - if mysql_server.length > 0 - Chef::Log.info("nova::nova-common/mysql: using search") - db_ip_address = mysql_server[0]['mysql']['bind_address'] - else - Chef::Log.info("nova::nova-common/mysql: NOT using search") - db_ip_address = node['mysql']['bind_address'] - end - # Lookup rabbit ip address - rabbit, something, arbitary_value = Chef::Search::Query.new.search(:node, "roles:rabbitmq-server AND chef_environment:#{node.chef_environment}") - if rabbit.length > 0 - Chef::Log.info("nova::nova-common/rabbitmq: using search") - rabbit_ip_address = rabbit[0]['ipaddress'] - else - Chef::Log.info("nova::nova-common/rabbitmq: NOT using search") - rabbit_ip_address = node['ipaddress'] - end +mysql_info = get_settings_by_role("mysql-master", "mysql") +rabbit_info = get_settings_by_role("rabbitmq-server", "rabbitmq") +nova_setup_info = get_settings_by_recipe("nova\:\:nova-setup", "nova") +keystone = get_settings_by_role("keystone", "keystone") - # Lookup keystone api ip address - keystone, start, arbitary_value = Chef::Search::Query.new.search(:node, "roles:keystone AND chef_environment:#{node.chef_environment}") - if keystone.length > 0 - Chef::Log.info("nova::nova-common/keystone: using search") - keystone_admin_user = keystone[0]['keystone']['admin_user'] - keystone_admin_password = keystone[0]['keystone']['users'][keystone_admin_user]['password'] - keystone_admin_tenantname = keystone[0]['keystone']['users'][keystone_admin_user]['default_tenant'] - keystone_api_ip = keystone[0]['keystone']['api_ipaddress'] - keystone_service_port = keystone[0]['keystone']['service_port'] - else - Chef::Log.info("nova::nova-common/keystone: NOT using search") - keystone_admin_user = node['keystone']['admin_user'] - keystone_admin_password = node['keystone']['users'][keystone_admin_user]['password'] - keystone_admin_tenantname = node['keystone']['users'][keystone_admin_user]['default_tenant'] - keystone_api_ip = node['keystone']['api_ipaddress'] - keystone_service_port = node['keystone']['service_port'] - end - - # Lookup nova db information - nova = search(:node, "recipes:nova\\:\\:nova-setup AND chef_environment:#{node.chef_environment}") - if nova.length > 0 - nova_db_password = nova[0]['nova']['db']['password'] - else - nova_db_password = node['nova']['db']['password'] - end - - # Lookup glance api ip address - glance, something, arbitary_value = Chef::Search::Query.new.search(:node, "roles:glance-api AND chef_environment:#{node.chef_environment}") - if glance.length > 0 - Chef::Log.info("nova::nova-common/glance: using search") - glance_api_ip = glance[0]['glance']['api']['ip_address'] - glance_api_port = glance[0]['glance']['api']['port'] - else - Chef::Log.info("nova::nova-common/glance: NOT using search") - glance_api_ip = node['glance']['api']['ip_address'] - glance_api_port = node['glance']['api']['port'] - end - - # Lookup nova-vncproxy ip address - vncproxy = search(:node, "roles:nova-vncproxy AND chef_environment:#{node.chef_environment}") - if vncproxy.length > 0 - xvpvncproxy_base_url = vncproxy[0]["nova"]["xvpvnc"]["proxy_base_url"] - novncproxy_base_url = vncproxy[0]["nova"]["novnc"]["proxy_base_url"] - else - xvpvncproxy_base_url = node["nova"]["xvpvnc"]["proxy_base_url"] - novncproxy_base_url = node["nova"]["novnc"]["proxy_base_url"] - end -end +# find the node attribute endpoint settings for the server holding a given role +ks_admin_endpoint = get_access_endpoint("keystone", "keystone", "admin-api") +ks_service_endpoint = get_access_endpoint("keystone", "keystone", "service-api") +xvpvnc_endpoint = get_access_endpoint("nova-vncproxy", "nova", "xvpvnc") +novnc_endpoint = get_access_endpoint("nova-vncproxy", "nova", "novnc") +glance_endpoint = get_access_endpoint("glance-api", "glance", "api") +nova_api_endpoint = get_access_endpoint("nova-api-os-compute", "nova", "api") +ec2_public_endpoint = get_access_endpoint("nova-api-ec2", "nova", "ec2-public") # TODO: need to re-evaluate this for accuracy template "/etc/nova/nova.conf" do @@ -123,22 +54,22 @@ template "/etc/nova/nova.conf" do group "root" mode "0644" variables( - :db_ipaddress => db_ip_address, - :user => node["nova"]["db"]["username"], - :passwd => nova_db_password, - :db_name => node["nova"]["db"]["name"], - "vncserver_listen" => node["nova"]["libvirt"]["vncserver_listen"], - "xvpvncproxy_bind_host" => node["nova"]["xvpvnc"]["proxy_bind_host"], - "xvpvncproxy_bind_port" => node["nova"]["xvpvnc"]["proxy_bind_port"], - "xvpvncproxy_base_url" => xvpvncproxy_base_url, - "novncproxy_base_url" => novncproxy_base_url, - "vncserver_proxyclient_address" => node["nova"]["libvirt"]["vncserver_proxyclient_address"], - :rabbit_ipaddress => rabbit_ip_address, - "keystone_api_ipaddress" => keystone_api_ip, - "keystone_service_port" => keystone_service_port, - :glance_api_ipaddress => glance_api_ip, - :api_port => glance_api_port, - :virt_type => node["nova"]["libvirt"]["virt_type"] + "db_ipaddress" => mysql_info["bind_address"], + "user" => node["nova"]["db"]["username"], + "passwd" => nova_setup_info["db"]["password"], + "db_name" => node["nova"]["db"]["name"], + "vncserver_listen" => novnc_endpoint["host"], + "vncserver_proxyclient_address" => novnc_endpoint["host"], + "novncproxy_base_url" => novnc_endpoint["uri"], + "xvpvncproxy_bind_host" => xvpvnc_endpoint["host"], + "xvpvncproxy_bind_port" => xvpvnc_endpoint["port"], + "xvpvncproxy_base_url" => xvpvnc_endpoint["uri"], + "rabbit_ipaddress" => rabbit_info["ipaddress"], + "keystone_api_ipaddress" => ks_admin_endpoint["host"], + "keystone_service_port" => ks_service_endpoint["port"], + "glance_api_ipaddress" => glance_endpoint["host"], + "api_port" => glance_endpoint["host"], + "virt_type" => node["nova"]["libvirt"]["virt_type"] ) end @@ -149,16 +80,16 @@ template "/root/.novarc" do group "root" mode "0600" variables( - "user" => keystone_admin_user, - "tenant" => keystone_admin_tenantname, - "password" => keystone_admin_password, - "keystone_api_ipaddress" => keystone_api_ip, - "keystone_service_port" => keystone_service_port, - "nova_api_ipaddress" => node["ipaddress"], + "user" => keystone["admin_user"], + "tenant" => keystone["users"][keystone["admin_user"]]["default_tenant"], + "password" => keystone["users"][keystone["admin_user"]]["password"], + "keystone_api_ipaddress" => ks_service_endpoint["host"], + "keystone_service_port" => ks_service_endpoint["port"], + "nova_api_ipaddress" => nova_api_endpoint["host"], "nova_api_version" => "1.1", "keystone_region" => node["nova"]["compute"]["region"], "auth_strategy" => "keystone", - "ec2_url" => node["nova"]["ec2"]["publicURL"], + "ec2_url" => ec2_public_endpoint["uri"], "ec2_access_key" => node["credentials"]["EC2"]["admin"]["access"], "ec2_secret_key" => node["credentials"]["EC2"]["admin"]["secret"] )