1162
1163
sysctl_create(sysctl_dict,
1163
1164
'/etc/sysctl.d/50-{0}.conf'.format(charm_name()))
1164
1165
return {'sysctl': sysctl_dict}
1168
class NeutronAPIContext(OSContextGenerator):
1170
Inspects current neutron-plugin-api relation for neutron settings. Return
1171
defaults if it is not present.
1173
interfaces = ['neutron-plugin-api']
1176
self.neutron_defaults = {
1178
'rel_key': 'l2-population',
1181
'overlay_network_type': {
1182
'rel_key': 'overlay-network-type',
1185
'neutron_security_groups': {
1186
'rel_key': 'neutron-security-groups',
1189
'network_device_mtu': {
1190
'rel_key': 'network-device-mtu',
1194
'rel_key': 'enable-dvr',
1198
'rel_key': 'enable-l3ha',
1202
ctxt = self.get_neutron_options({})
1203
for rid in relation_ids('neutron-plugin-api'):
1204
for unit in related_units(rid):
1205
rdata = relation_get(rid=rid, unit=unit)
1206
if 'l2-population' in rdata:
1207
ctxt.update(self.get_neutron_options(rdata))
1211
def get_neutron_options(self, rdata):
1213
for nkey in self.neutron_defaults.keys():
1214
defv = self.neutron_defaults[nkey]['default']
1215
rkey = self.neutron_defaults[nkey]['rel_key']
1216
if rkey in rdata.keys():
1217
if type(defv) is bool:
1218
settings[nkey] = bool_from_string(rdata[rkey])
1220
settings[nkey] = rdata[rkey]
1222
settings[nkey] = defv
1226
class ExternalPortContext(NeutronPortContext):
1230
ports = config('ext-port')
1232
ports = [p.strip() for p in ports.split()]
1233
ports = self.resolve_ports(ports)
1235
ctxt = {"ext_port": ports[0]}
1236
napi_settings = NeutronAPIContext()()
1237
mtu = napi_settings.get('network_device_mtu')
1239
ctxt['ext_port_mtu'] = mtu
1244
class DataPortContext(NeutronPortContext):
1247
ports = config('data-port')
1249
portmap = parse_data_port_mappings(ports)
1250
ports = portmap.values()
1251
resolved = self.resolve_ports(ports)
1252
normalized = {get_nic_hwaddr(port): port for port in resolved
1253
if port not in ports}
1254
normalized.update({port: port for port in resolved
1257
return {bridge: normalized[port] for bridge, port in
1258
six.iteritems(portmap) if port in normalized.keys()}
1263
class PhyNICMTUContext(DataPortContext):
1267
mappings = super(PhyNICMTUContext, self).__call__()
1268
if mappings and mappings.values():
1269
ports = mappings.values()
1270
napi_settings = NeutronAPIContext()()
1271
mtu = napi_settings.get('network_device_mtu')
1273
ctxt["devs"] = '\\n'.join(ports)
1279
class NetworkServiceContext(OSContextGenerator):
1281
def __init__(self, rel_name='quantum-network-service'):
1282
self.rel_name = rel_name
1283
self.interfaces = [rel_name]
1286
for rid in relation_ids(self.rel_name):
1287
for unit in related_units(rid):
1288
rdata = relation_get(rid=rid, unit=unit)
1290
'keystone_host': rdata.get('keystone_host'),
1291
'service_port': rdata.get('service_port'),
1292
'auth_port': rdata.get('auth_port'),
1293
'service_tenant': rdata.get('service_tenant'),
1294
'service_username': rdata.get('service_username'),
1295
'service_password': rdata.get('service_password'),
1296
'quantum_host': rdata.get('quantum_host'),
1297
'quantum_port': rdata.get('quantum_port'),
1298
'quantum_url': rdata.get('quantum_url'),
1299
'region': rdata.get('region'),
1301
rdata.get('service_protocol') or 'http',
1303
rdata.get('auth_protocol') or 'http',
1305
if context_complete(ctxt):