Update charm-helpers config to point to upstream repo, re-sync helpers.
This commit is contained in:
parent
790034fda7
commit
44ad16f4a3
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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'
|
||||||
|
@ -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]
|
||||||
|
Loading…
Reference in New Issue
Block a user