Update charm-helpers config to point to upstream repo, re-sync helpers.

This commit is contained in:
Adam Gandelman 2013-10-14 18:32:42 -07:00
parent 790034fda7
commit 44ad16f4a3
4 changed files with 111 additions and 18 deletions

View File

@ -1,4 +1,4 @@
branch: lp:~openstack-charmers/charm-helpers/to_upstream branch: lp:charm-helpers
destination: hooks/charmhelpers destination: hooks/charmhelpers
include: include:
- core - core

View File

@ -1,3 +1,4 @@
import json
import os import os
from base64 import b64decode from base64 import b64decode
@ -21,6 +22,7 @@ from charmhelpers.core.hookenv import (
related_units, related_units,
unit_get, unit_get,
unit_private_ip, unit_private_ip,
ERROR,
WARNING, WARNING,
) )
@ -370,7 +372,7 @@ class NeutronContext(object):
return None return None
def _ensure_packages(self): def _ensure_packages(self):
ensure_packages(self.packages) [ensure_packages(pkgs) for pkgs in self.packages]
def _save_flag_file(self): def _save_flag_file(self):
if self.network_manager == 'quantum': if self.network_manager == 'quantum':
@ -431,3 +433,90 @@ class OSConfigFlagContext(OSContextGenerator):
flags[k.strip()] = v flags[k.strip()] = v
ctxt = {'user_config_flags': flags} ctxt = {'user_config_flags': flags}
return ctxt return ctxt
class SubordinateConfigContext(OSContextGenerator):
"""
Responsible for inspecting relations to subordinates that
may be exporting required config via a json blob.
The subordinate interface allows subordinates to export their
configuration requirements to the principle for multiple config
files and multiple serivces. Ie, a subordinate that has interfaces
to both glance and nova may export to following yaml blob as json:
glance:
/etc/glance/glance-api.conf:
sections:
DEFAULT:
- [key1, value1]
/etc/glance/glance-registry.conf:
MYSECTION:
- [key2, value2]
nova:
/etc/nova/nova.conf:
sections:
DEFAULT:
- [key3, value3]
It is then up to the principle charms to subscribe this context to
the service+config file it is interestd in. Configuration data will
be available in the template context, in glance's case, as:
ctxt = {
... other context ...
'subordinate_config': {
'DEFAULT': {
'key1': 'value1',
},
'MYSECTION': {
'key2': 'value2',
},
}
}
"""
def __init__(self, service, config_file, interface):
"""
:param service : Service name key to query in any subordinate
data found
:param config_file : Service's config file to query sections
:param interface : Subordinate interface to inspect
"""
self.service = service
self.config_file = config_file
self.interface = interface
def __call__(self):
ctxt = {}
for rid in relation_ids(self.interface):
for unit in related_units(rid):
sub_config = relation_get('subordinate_configuration',
rid=rid, unit=unit)
if sub_config and sub_config != '':
try:
sub_config = json.loads(sub_config)
except:
log('Could not parse JSON from subordinate_config '
'setting from %s' % rid, level=ERROR)
continue
if self.service not in sub_config:
log('Found subordinate_config on %s but it contained'
'nothing for %s service' % (rid, self.service))
continue
sub_config = sub_config[self.service]
if self.config_file not in sub_config:
log('Found subordinate_config on %s but it contained'
'nothing for %s' % (rid, self.config_file))
continue
sub_config = sub_config[self.config_file]
for k, v in sub_config.iteritems():
ctxt[k] = v
if not ctxt:
ctxt['sections'] = {}
return ctxt

View File

@ -32,7 +32,7 @@ def quantum_plugins():
database=config('neutron-database'), database=config('neutron-database'),
relation_prefix='neutron')], relation_prefix='neutron')],
'services': ['quantum-plugin-openvswitch-agent'], 'services': ['quantum-plugin-openvswitch-agent'],
'packages': [['openvswitch-datapath-dkms', headers_package()], 'packages': [[headers_package(), 'openvswitch-datapath-dkms'],
['quantum-plugin-openvswitch-agent']], ['quantum-plugin-openvswitch-agent']],
}, },
'nvp': { 'nvp': {
@ -58,7 +58,7 @@ def neutron_plugins():
database=config('neutron-database'), database=config('neutron-database'),
relation_prefix='neutron')], relation_prefix='neutron')],
'services': ['neutron-plugin-openvswitch-agent'], 'services': ['neutron-plugin-openvswitch-agent'],
'packages': [['openvswitch-datapath-dkms', headers_package()], 'packages': [[headers_package(), 'openvswitch-datapath-dkms'],
['quantum-plugin-openvswitch-agent']], ['quantum-plugin-openvswitch-agent']],
}, },
'nvp': { 'nvp': {
@ -85,7 +85,7 @@ def neutron_plugin_attribute(plugin, attr, net_manager=None):
_plugin = plugins[plugin] _plugin = plugins[plugin]
except KeyError: except KeyError:
log('Unrecognised plugin for %s: %s' % (manager, plugin), level=ERROR) log('Unrecognised plugin for %s: %s' % (manager, plugin), level=ERROR)
raise raise Exception
try: try:
return _plugin[attr] return _plugin[attr]
@ -108,7 +108,7 @@ def network_manager():
if release in ['essex']: if release in ['essex']:
# E does not support neutron # E does not support neutron
log('Neutron networking not supported in Essex.', level=ERROR) log('Neutron networking not supported in Essex.', level=ERROR)
raise raise Exception
elif release in ['folsom', 'grizzly']: elif release in ['folsom', 'grizzly']:
# neutron is named quantum in F and G # neutron is named quantum in F and G
return 'quantum' return 'quantum'

View File

@ -45,16 +45,17 @@ OPENSTACK_CODENAMES = OrderedDict([
]) ])
# The ugly duckling # The ugly duckling
SWIFT_CODENAMES = { SWIFT_CODENAMES = OrderedDict([
'1.4.3': 'diablo', ('1.4.3', 'diablo'),
'1.4.8': 'essex', ('1.4.8', 'essex'),
'1.7.4': 'folsom', ('1.7.4', 'folsom'),
'1.7.6': 'grizzly', ('1.8.0', 'grizzly'),
'1.7.7': 'grizzly', ('1.7.7', 'grizzly'),
'1.8.0': 'grizzly', ('1.7.6', 'grizzly'),
'1.9.0': 'havana', ('1.10.0', 'havana'),
'1.9.1': 'havana', ('1.9.1', 'havana'),
} ('1.9.0', 'havana'),
])
def error_out(msg): def error_out(msg):
@ -137,8 +138,11 @@ def get_os_codename_package(package, fatal=True):
try: try:
if 'swift' in pkg.name: if 'swift' in pkg.name:
vers = vers[:5] swift_vers = vers[:5]
return SWIFT_CODENAMES[vers] if swift_vers not in SWIFT_CODENAMES:
# Deal with 1.10.0 upward
swift_vers = vers[:6]
return SWIFT_CODENAMES[swift_vers]
else: else:
vers = vers[:6] vers = vers[:6]
return OPENSTACK_CODENAMES[vers] return OPENSTACK_CODENAMES[vers]