charm-plumgrid-director/hooks/pg_dir_context.py

105 lines
3.1 KiB
Python

# Copyright (c) 2015, PLUMgrid Inc, http://plumgrid.com
# This file contains the class that generates context
# for PLUMgrid template files.
import re
from charmhelpers.contrib.openstack import context
from charmhelpers.contrib.openstack.utils import get_host_ip
from charmhelpers.core.hookenv import (
config,
unit_get,
)
from charmhelpers.core.hookenv import (
relation_ids,
related_units,
relation_get,
)
from charmhelpers.contrib.network.ip import (
is_ip,
get_address_in_network,
)
from socket import (
gethostname,
getfqdn
)
def _pg_dir_ips():
'''
Inspects plumgrid-director peer relation and returns the
ips of the peer directors
'''
return [get_host_ip(rdata['private-address'])
for rid in relation_ids("director")
for rdata in
(relation_get(rid=rid, unit=unit) for unit in related_units(rid))
if rdata]
class PGDirContext(context.NeutronContext):
@property
def plugin(self):
'''
Over-riding function in NeutronContext Class to return 'plumgrid'
as the neutron plugin.
'''
return 'plumgrid'
@property
def network_manager(self):
'''
Over-riding function in NeutronContext Class to return 'neutron'
as the network manager.
'''
return 'neutron'
def _save_flag_file(self):
'''
Over-riding function in NeutronContext Class.
Function only needed for OVS.
'''
pass
def pg_ctxt(self):
'''
Generated Config for all PLUMgrid templates inside the templates
folder.
'''
pg_ctxt = super(PGDirContext, self).pg_ctxt()
if not pg_ctxt:
return {}
conf = config()
pg_dir_ips = _pg_dir_ips()
pg_dir_ips.append(str(get_address_in_network(network=None,
fallback=get_host_ip(unit_get('private-address')))))
pg_dir_ips = sorted(pg_dir_ips)
pg_ctxt['director_ips'] = pg_dir_ips
dir_count = len(pg_dir_ips)
pg_ctxt['director_ips_string'] = (str(pg_dir_ips[0]) + ',' +
str(pg_dir_ips[1]) + ',' +
str(pg_dir_ips[2])
if dir_count == 3 else
str(pg_dir_ips[0]))
PG_VIP = conf['plumgrid-virtual-ip']
if is_ip(PG_VIP):
pg_ctxt['virtual_ip'] = PG_VIP
else:
raise ValueError('Invalid PLUMgrid Virtual IP Provided')
unit_hostname = gethostname()
pg_ctxt['pg_hostname'] = unit_hostname
pg_ctxt['pg_fqdn'] = getfqdn()
from pg_dir_utils import get_mgmt_interface, get_fabric_interface
pg_ctxt['interface'] = get_mgmt_interface()
pg_ctxt['fabric_interface'] = get_fabric_interface()
pg_ctxt['label'] = unit_hostname
pg_ctxt['fabric_mode'] = 'host'
virtual_ip_array = re.split('\.', conf['plumgrid-virtual-ip'])
pg_ctxt['virtual_router_id'] = virtual_ip_array[3]
pg_ctxt['opsvm_ip'] = conf['opsvm-ip']
return pg_ctxt