config: expose send-notifications-to-logs options
The last version of charmhelpers introduces ability to set additional driver which enable notfications to be sent to system logs. Depends-of: https://github.com/juju/charm-helpers/pull/323 Closes-bug: 1825016 Change-Id: Ibe84826060922671e7fc160734d5ae3974d663ed Signed-off-by: Sahid Orentino Ferdjaoui <sahid.ferdjaoui@canonical.com>
This commit is contained in:
parent
95d117ab24
commit
3a15dd8349
@ -527,4 +527,10 @@ options:
|
||||
and finally `both` will use the two concepts.
|
||||
.
|
||||
Not setting this option will use the default configured in charm template
|
||||
which is currently `unversioned`.
|
||||
which is currently `unversioned`.
|
||||
send-notifications-to-logs:
|
||||
type: boolean
|
||||
default: False
|
||||
description: |
|
||||
Ensure notifications are included in the log files. It will set an additional
|
||||
log driver for oslo messaging notifications.
|
||||
|
@ -352,10 +352,70 @@ class IdentityServiceContext(OSContextGenerator):
|
||||
return cachedir
|
||||
return None
|
||||
|
||||
def _get_pkg_name(self, python_name='keystonemiddleware'):
|
||||
"""Get corresponding distro installed package for python
|
||||
package name.
|
||||
|
||||
:param python_name: nameof the python package
|
||||
:type: string
|
||||
"""
|
||||
pkg_names = map(lambda x: x + python_name, ('python3-', 'python-'))
|
||||
|
||||
for pkg in pkg_names:
|
||||
if not filter_installed_packages((pkg,)):
|
||||
return pkg
|
||||
|
||||
return None
|
||||
|
||||
def _get_keystone_authtoken_ctxt(self, ctxt, keystonemiddleware_os_rel):
|
||||
"""Build Jinja2 context for full rendering of [keystone_authtoken]
|
||||
section with variable names included. Re-constructed from former
|
||||
template 'section-keystone-auth-mitaka'.
|
||||
|
||||
:param ctxt: Jinja2 context returned from self.__call__()
|
||||
:type: dict
|
||||
:param keystonemiddleware_os_rel: OpenStack release name of
|
||||
keystonemiddleware package installed
|
||||
"""
|
||||
c = collections.OrderedDict((('auth_type', 'password'),))
|
||||
|
||||
# 'www_authenticate_uri' replaced 'auth_uri' since Stein,
|
||||
# see keystonemiddleware upstream sources for more info
|
||||
if CompareOpenStackReleases(keystonemiddleware_os_rel) >= 'stein':
|
||||
c.update((
|
||||
('www_authenticate_uri', "{}://{}:{}/v3".format(
|
||||
ctxt.get('service_protocol', ''),
|
||||
ctxt.get('service_host', ''),
|
||||
ctxt.get('service_port', ''))),))
|
||||
else:
|
||||
c.update((
|
||||
('auth_uri', "{}://{}:{}/v3".format(
|
||||
ctxt.get('service_protocol', ''),
|
||||
ctxt.get('service_host', ''),
|
||||
ctxt.get('service_port', ''))),))
|
||||
|
||||
c.update((
|
||||
('auth_url', "{}://{}:{}/v3".format(
|
||||
ctxt.get('auth_protocol', ''),
|
||||
ctxt.get('auth_host', ''),
|
||||
ctxt.get('auth_port', ''))),
|
||||
('project_domain_name', ctxt.get('admin_domain_name', '')),
|
||||
('user_domain_name', ctxt.get('admin_domain_name', '')),
|
||||
('project_name', ctxt.get('admin_tenant_name', '')),
|
||||
('username', ctxt.get('admin_user', '')),
|
||||
('password', ctxt.get('admin_password', '')),
|
||||
('signing_dir', ctxt.get('signing_dir', '')),))
|
||||
|
||||
return c
|
||||
|
||||
def __call__(self):
|
||||
log('Generating template context for ' + self.rel_name, level=DEBUG)
|
||||
ctxt = {}
|
||||
|
||||
keystonemiddleware_os_release = None
|
||||
if self._get_pkg_name():
|
||||
keystonemiddleware_os_release = os_release(self._get_pkg_name())
|
||||
|
||||
cachedir = self._setup_pki_cache()
|
||||
if cachedir:
|
||||
ctxt['signing_dir'] = cachedir
|
||||
@ -386,6 +446,14 @@ class IdentityServiceContext(OSContextGenerator):
|
||||
ctxt.update({'admin_domain_name':
|
||||
rdata.get('service_domain')})
|
||||
|
||||
# we keep all veriables in ctxt for compatibility and
|
||||
# add nested dictionary for keystone_authtoken generic
|
||||
# templating
|
||||
if keystonemiddleware_os_release:
|
||||
ctxt['keystone_authtoken'] = \
|
||||
self._get_keystone_authtoken_ctxt(
|
||||
ctxt, keystonemiddleware_os_release)
|
||||
|
||||
if self.context_complete(ctxt):
|
||||
# NOTE(jamespage) this is required for >= icehouse
|
||||
# so a missing value just indicates keystone needs
|
||||
@ -579,6 +647,10 @@ class AMQPContext(OSContextGenerator):
|
||||
if notification_format:
|
||||
ctxt['notification_format'] = notification_format
|
||||
|
||||
send_notifications_to_logs = conf.get('send-notifications-to-logs', None)
|
||||
if send_notifications_to_logs:
|
||||
ctxt['send_notifications_to_logs'] = send_notifications_to_logs
|
||||
|
||||
if not self.complete:
|
||||
return {}
|
||||
|
||||
@ -1120,7 +1192,9 @@ class NeutronPortContext(OSContextGenerator):
|
||||
|
||||
hwaddr_to_nic = {}
|
||||
hwaddr_to_ip = {}
|
||||
for nic in list_nics():
|
||||
extant_nics = list_nics()
|
||||
|
||||
for nic in extant_nics:
|
||||
# Ignore virtual interfaces (bond masters will be identified from
|
||||
# their slaves)
|
||||
if not is_phy_iface(nic):
|
||||
@ -1151,10 +1225,11 @@ class NeutronPortContext(OSContextGenerator):
|
||||
# Entry is a MAC address for a valid interface that doesn't
|
||||
# have an IP address assigned yet.
|
||||
resolved.append(hwaddr_to_nic[entry])
|
||||
else:
|
||||
# If the passed entry is not a MAC address, assume it's a valid
|
||||
# interface, and that the user put it there on purpose (we can
|
||||
# trust it to be the real external network).
|
||||
elif entry in extant_nics:
|
||||
# If the passed entry is not a MAC address and the interface
|
||||
# exists, assume it's a valid interface, and that the user put
|
||||
# it there on purpose (we can trust it to be the real external
|
||||
# network).
|
||||
resolved.append(entry)
|
||||
|
||||
# Ensure no duplicates
|
||||
@ -1536,6 +1611,14 @@ class NeutronAPIContext(OSContextGenerator):
|
||||
'rel_key': 'enable-nsg-logging',
|
||||
'default': False,
|
||||
},
|
||||
'global_physnet_mtu': {
|
||||
'rel_key': 'global-physnet-mtu',
|
||||
'default': 1500,
|
||||
},
|
||||
'physical_network_mtus': {
|
||||
'rel_key': 'physical-network-mtus',
|
||||
'default': None,
|
||||
},
|
||||
}
|
||||
ctxt = self.get_neutron_options({})
|
||||
for rid in relation_ids('neutron-plugin-api'):
|
||||
@ -1597,13 +1680,13 @@ class DataPortContext(NeutronPortContext):
|
||||
def __call__(self):
|
||||
ports = config('data-port')
|
||||
if ports:
|
||||
# Map of {port/mac:bridge}
|
||||
# Map of {bridge:port/mac}
|
||||
portmap = parse_data_port_mappings(ports)
|
||||
ports = portmap.keys()
|
||||
# Resolve provided ports or mac addresses and filter out those
|
||||
# already attached to a bridge.
|
||||
resolved = self.resolve_ports(ports)
|
||||
# FIXME: is this necessary?
|
||||
# Rebuild port index using resolved and filtered ports.
|
||||
normalized = {get_nic_hwaddr(port): port for port in resolved
|
||||
if port not in ports}
|
||||
normalized.update({port: port for port in resolved
|
||||
|
@ -0,0 +1,9 @@
|
||||
{% if auth_host -%}
|
||||
[keystone_authtoken]
|
||||
{% for option_name, option_value in keystone_authtoken.items() -%}
|
||||
{{ option_name }} = {{ option_value }}
|
||||
{% endfor -%}
|
||||
{% if use_memcache == true %}
|
||||
memcached_servers = {{ memcache_url }}
|
||||
{% endif -%}
|
||||
{% endif -%}
|
@ -2,6 +2,9 @@
|
||||
[oslo_messaging_notifications]
|
||||
driver = {{ oslo_messaging_driver }}
|
||||
transport_url = {{ transport_url }}
|
||||
{% if send_notifications_to_logs %}
|
||||
driver = log
|
||||
{% endif %}
|
||||
{% if notification_topics -%}
|
||||
topics = {{ notification_topics }}
|
||||
{% endif -%}
|
||||
|
Loading…
x
Reference in New Issue
Block a user