Various fixes.

This commit is contained in:
Adam Gandelman 2013-08-12 13:53:00 -07:00
parent d651b3904b
commit 5c010b878e
8 changed files with 84 additions and 44 deletions

View File

@ -22,11 +22,11 @@ options:
default: nova default: nova
type: string type: string
decsription: Rabbitmq vhost decsription: Rabbitmq vhost
db-user: database-user:
default: nova default: nova
type: string type: string
description: Username for database access description: Username for database access
nova-db: database:
default: nova default: nova
type: string type: string
description: Database name description: Database name

View File

@ -229,7 +229,14 @@ class OSConfigRenderer(object):
# using a munged full path, eg: # using a munged full path, eg:
# /etc/apache2/apache2.conf -> etc_apache2_apache2.conf # /etc/apache2/apache2.conf -> etc_apache2_apache2.conf
_tmpl = '_'.join(config_file.split('/')[1:]) _tmpl = '_'.join(config_file.split('/')[1:])
template = self._get_template(_tmpl) try:
template = self._get_template(_tmpl)
except exceptions.TemplateNotFound as e:
log('Could not load template from %s by %s or %s.' %
(self.templates_dir, os.path.basename(config_file), _tmpl),
level=ERROR)
raise e
log('Rendering from template: %s' % _tmpl, level=INFO) log('Rendering from template: %s' % _tmpl, level=INFO)
return template.render(ctxt) return template.render(ctxt)

View File

@ -163,6 +163,25 @@ def get_os_version_package(pkg, fatal=True):
#error_out(e) #error_out(e)
os_rel = None
def os_release(package, base='essex'):
'''
Returns OpenStack release codename from a cached global.
If the codename can not be determined from either an installed package or
the installation source, the earliest release supported by the charm should
be returned.
'''
global os_rel
if os_rel:
return os_rel
os_rel = (get_os_codename_package(package, fatal=False) or
get_os_codename_install_source(config('openstack-origin')) or
base)
return os_rel
def import_key(keyid): def import_key(keyid):
cmd = "apt-key adv --keyserver keyserver.ubuntu.com " \ cmd = "apt-key adv --keyserver keyserver.ubuntu.com " \
"--recv-keys %s" % keyid "--recv-keys %s" % keyid

View File

@ -12,10 +12,7 @@ from charmhelpers.contrib.openstack import context
from charmhelpers.core.host import apt_install, filter_installed_packages from charmhelpers.core.host import apt_install, filter_installed_packages
from charmhelpers.contrib.openstack.utils import ( from charmhelpers.contrib.openstack.utils import os_release
get_os_codename_package,
get_os_codename_install_source,
)
def _save_flag_file(path, data): def _save_flag_file(path, data):
@ -120,7 +117,7 @@ class NeutronComputeContext(NeutronContext):
def ovs_ctxt(self): def ovs_ctxt(self):
ctxt = super(NeutronComputeContext, self).ovs_ctxt() ctxt = super(NeutronComputeContext, self).ovs_ctxt()
if get_os_codename_package('nova-common') == 'folsom': if os_release('nova-common') == 'folsom':
n_driver = 'nova.virt.libvirt.vif.LibvirtHybridOVSBridgeDriver' n_driver = 'nova.virt.libvirt.vif.LibvirtHybridOVSBridgeDriver'
else: else:
n_driver = 'nova.virt.libvirt.vif.LibvirtGenericVIFDriver' n_driver = 'nova.virt.libvirt.vif.LibvirtGenericVIFDriver'
@ -135,7 +132,11 @@ class NeutronCCContext(NeutronContext):
@property @property
def plugin(self): def plugin(self):
return network_plugin() return neutron_plugin()
@property
def network_manager(self):
return network_manager()
@property @property
def neutron_security_groups(self): def neutron_security_groups(self):
@ -196,7 +197,7 @@ def neutron_plugins():
} }
def network_plugin(): def neutron_plugin():
# quantum-plugin config setting can be safely overriden # quantum-plugin config setting can be safely overriden
# as we only supported OVS in G/neutron # as we only supported OVS in G/neutron
return config('neutron-plugin') or config('quantum-plugin') return config('neutron-plugin') or config('quantum-plugin')
@ -229,26 +230,13 @@ def network_plugin_attribute(plugin, attr):
return None return None
os_rel = None
def os_release():
global os_rel
if os_rel:
return os_rel
os_rel = (get_os_codename_package('nova-common', fatal=False) or
get_os_codename_install_source(config('openstack-origin')) or
'essex')
return os_rel
def network_manager(): def network_manager():
''' '''
Deals with the renaming of Quantum to Neutron in H and any situations Deals with the renaming of Quantum to Neutron in H and any situations
that require compatability (eg, deploying H with network-manager=quantum, that require compatability (eg, deploying H with network-manager=quantum,
upgrading from G). upgrading from G).
''' '''
release = os_release() release = os_release('nova-common')
manager = config('network-manager').lower() manager = config('network-manager').lower()
if manager not in ['quantum', 'neutron']: if manager not in ['quantum', 'neutron']:

View File

@ -1,8 +1,7 @@
from misc_utils import network_manager from charmhelpers.core.hookenv import config, relation_ids, relation_set
from charmhelpers.core.hookenv import relation_ids, relation_set
from charmhelpers.core.host import apt_install, filter_installed_packages from charmhelpers.core.host import apt_install, filter_installed_packages
from charmhelpers.contrib.openstack import context, utils from charmhelpers.contrib.openstack import context, neutron, utils
from charmhelpers.contrib.hahelpers.cluster import ( from charmhelpers.contrib.hahelpers.cluster import (
determine_api_port, determine_haproxy_port) determine_api_port, determine_haproxy_port)
@ -87,7 +86,7 @@ class HAProxyContext(context.HAProxyContext):
}) })
ctxt['osapi_volume_listen_port'] = api_port('nova-api-os-volume') ctxt['osapi_volume_listen_port'] = api_port('nova-api-os-volume')
if network_manager() in ['neutron', 'quantum']: if neutron.network_manager() in ['neutron', 'quantum']:
port_mapping.update({ port_mapping.update({
'neutron-server': [ 'neutron-server': [
determine_haproxy_port(api_port('neutron-server')), determine_haproxy_port(api_port('neutron-server')),
@ -95,3 +94,21 @@ class HAProxyContext(context.HAProxyContext):
}) })
ctxt['bind_port'] = api_port('neutron-server') ctxt['bind_port'] = api_port('neutron-server')
ctxt['service_ports'] = port_mapping ctxt['service_ports'] = port_mapping
class NeutronCCContext(context.NeutronContext):
interfaces = []
@property
def plugin(self):
return neutron.neutron_plugin()
@property
def network_manager(self):
return neutron.network_manager()
@property
def neutron_security_groups(self):
sec_groups = (config('neutron-security-groups') or
config('quantum-security-groups'))
return sec_groups.lower() == 'yes'

View File

@ -154,6 +154,7 @@ def identity_changed():
CONFIGS.write('/etc/nova/api-paste.ini') CONFIGS.write('/etc/nova/api-paste.ini')
if network_manager() == 'quantum': if network_manager() == 'quantum':
CONFIGS.write('/etc/quantum/api-paste.ini') CONFIGS.write('/etc/quantum/api-paste.ini')
CONFIGS.write('/etc/quantum/quantum.conf')
if network_manager() == 'neutron': if network_manager() == 'neutron':
CONFIGS.write('/etc/neutron/neutron.conf') CONFIGS.write('/etc/neutron/neutron.conf')
# XXX configure quantum networking # XXX configure quantum networking
@ -217,7 +218,7 @@ def compute_joined(rid=None):
relation_set(rid=rid, **rel_settings) relation_set(rid=rid, **rel_settings)
@hooks.hook('cloud-compute-relation-joined') @hooks.hook('cloud-compute-relation-changed')
def compute_changed(): def compute_changed():
migration_auth = relation_get('migration_auth_type') migration_auth = relation_get('migration_auth_type')
if migration_auth == 'ssh': if migration_auth == 'ssh':

View File

@ -6,9 +6,11 @@ from base64 import b64encode
from collections import OrderedDict from collections import OrderedDict
from copy import deepcopy from copy import deepcopy
from charmhelpers.contrib.openstack import templating, context from charmhelpers.contrib.openstack import context, templating
from charmhelpers.contrib.openstack.neutron import network_manager
from charmhelpers.contrib.openstack.utils import ( from charmhelpers.contrib.openstack.utils import (
os_release,
save_script_rc as _save_script_rc) save_script_rc as _save_script_rc)
@ -17,14 +19,13 @@ from charmhelpers.core.hookenv import (
log, log,
relation_ids, relation_ids,
remote_unit, remote_unit,
INFO,
ERROR, ERROR,
) )
import nova_cc_context import nova_cc_context
from misc_utils import network_manager, NeutronCCContext, os_release
TEMPLATES = 'templates/' TEMPLATES = 'templates/'
CLUSTER_RES = 'res_nova_vip' CLUSTER_RES = 'res_nova_vip'
@ -57,9 +58,9 @@ BASE_RESOURCE_MAP = OrderedDict([
('/etc/nova/nova.conf', { ('/etc/nova/nova.conf', {
'services': BASE_SERVICES, 'services': BASE_SERVICES,
'contexts': [context.AMQPContext(), 'contexts': [context.AMQPContext(),
context.SharedDBContext(), context.SharedDBContext(relation_prefix='nova'),
context.ImageServiceContext(), context.ImageServiceContext(),
NeutronCCContext(), nova_cc_context.NeutronCCContext(),
nova_cc_context.VolumeServiceContext()], nova_cc_context.VolumeServiceContext()],
}), }),
('/etc/nova/api-paste.ini', { ('/etc/nova/api-paste.ini', {
@ -70,7 +71,8 @@ BASE_RESOURCE_MAP = OrderedDict([
'services': ['quantum-server'], 'services': ['quantum-server'],
'contexts': [context.AMQPContext(), 'contexts': [context.AMQPContext(),
nova_cc_context.HAProxyContext(), nova_cc_context.HAProxyContext(),
NeutronCCContext()], context.IdentityServiceContext(),
nova_cc_context.NeutronCCContext()],
}), }),
('/etc/quantum/api-paste.ini', { ('/etc/quantum/api-paste.ini', {
'services': ['quantum-server'], 'services': ['quantum-server'],
@ -80,7 +82,7 @@ BASE_RESOURCE_MAP = OrderedDict([
'services': ['neutron-server'], 'services': ['neutron-server'],
'contexts': [context.AMQPContext(), 'contexts': [context.AMQPContext(),
context.IdentityServiceContext(), context.IdentityServiceContext(),
NeutronCCContext(), nova_cc_context.NeutronCCContext(),
nova_cc_context.HAProxyContext()], nova_cc_context.HAProxyContext()],
}), }),
('/etc/haproxy/haproxy.cfg', { ('/etc/haproxy/haproxy.cfg', {
@ -124,7 +126,7 @@ def resource_map():
def register_configs(): def register_configs():
release = os_release() release = os_release('nova-common')
configs = templating.OSConfigRenderer(templates_dir=TEMPLATES, configs = templating.OSConfigRenderer(templates_dir=TEMPLATES,
openstack_release=release) openstack_release=release)
for cfg, rscs in resource_map().iteritems(): for cfg, rscs in resource_map().iteritems():
@ -186,7 +188,7 @@ def do_openstack_upgrade():
def volume_service(): def volume_service():
'''Specifies correct volume API for specific OS release''' '''Specifies correct volume API for specific OS release'''
os_vers = os_release() os_vers = os_release('nova-common')
if os_vers == 'essex': if os_vers == 'essex':
return 'nova-volume' return 'nova-volume'
elif os_vers == 'folsom': # support both drivers in folsom. elif os_vers == 'folsom': # support both drivers in folsom.
@ -197,6 +199,7 @@ def volume_service():
def migrate_database(): def migrate_database():
'''Runs nova-manage to initialize a new database or migrate existing''' '''Runs nova-manage to initialize a new database or migrate existing'''
log('Migrating the nova database', level=INFO)
cmd = ['nova-manage', 'db', 'sync'] cmd = ['nova-manage', 'db', 'sync']
subprocess.check_call(cmd) subprocess.check_call(cmd)
@ -227,10 +230,15 @@ def keystone_ca_cert_b64():
def ssh_directory_for_unit(): def ssh_directory_for_unit():
remote_service = remote_unit().split('/')[0] remote_service = remote_unit().split('/')[0]
d = os.path.join(NOVA_SSH_DIR, remote_service) _dir = os.path.join(NOVA_SSH_DIR, remote_service)
if not os.path.isdir(d): for d in [NOVA_SSH_DIR, _dir]:
os.mkdir(d) if not os.path.isdir(d):
return d os.mkdir(d)
for f in ['authorized_keys', 'known_hosts']:
f = os.path.join(_dir, f)
if not os.path.isfile(f):
open(f, 'w').close()
return _dir
def known_hosts(): def known_hosts():
@ -289,7 +297,7 @@ def ssh_compute_add(public_key, host):
add_known_host(host) add_known_host(host)
if not ssh_authorized_key_exists(public_key): if not ssh_authorized_key_exists(public_key):
log('Saving SSH authorized key for compute host at %s.' % host) log('Saving SSH authorized key for compute host at %s.' % host)
add_authorized_key(host) add_authorized_key(public_key)
def ssh_known_hosts_b64(): def ssh_known_hosts_b64():

View File

@ -1 +1 @@
271 279