diff options
Diffstat (limited to 'apex/network')
-rw-r--r-- | apex/network/network_data.py | 104 | ||||
-rw-r--r-- | apex/network/network_environment.py | 29 |
2 files changed, 123 insertions, 10 deletions
diff --git a/apex/network/network_data.py b/apex/network/network_data.py new file mode 100644 index 00000000..1177af09 --- /dev/null +++ b/apex/network/network_data.py @@ -0,0 +1,104 @@ +############################################################################## +# Copyright (c) 2017 Tim Rozet (trozet@redhat.com) and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +import copy +import logging +import pprint + +from apex.common import utils +from apex.common.constants import ( + ADMIN_NETWORK, + TENANT_NETWORK, + STORAGE_NETWORK, + EXTERNAL_NETWORK, + API_NETWORK +) +from apex import NetworkSettings + + +class NetworkDataException(Exception): + pass + + +def create_network_data(ns, target=None): + """ + Creates network data file for deployments + :param ns: Network Settings + :param target: Target file to write + :return: list of networks and properties + """ + network_data = list() + if not isinstance(ns, NetworkSettings): + raise NetworkDataException('Invalid network settings given') + + nets = ns['networks'] + + # TODO(trozet) change this all to be dynamic after TripleO bug + # https://bugs.launchpad.net/tripleo/+bug/1720849 is fixed + + for net in nets.keys(): + if net == ADMIN_NETWORK: + # we dont need to add ctlplane network to network data + continue + elif net == EXTERNAL_NETWORK: + network = nets[net][0] + net_name = net.title() + net_lower = net.lower() + elif net == API_NETWORK: + network = nets[net] + net_name = 'InternalApi' + net_lower = 'internal_api' + else: + network = nets[net] + net_name = net.title() + net_lower = net.lower() + # TODO(trozet): add ipv6 support + tmp_net = {'name': net_name, + 'name_lower': net_lower, + 'vip': net != TENANT_NETWORK, + 'enabled': net in ns.enabled_network_list} + if 'gateway' in network: + tmp_net['gateway_ip'] = str(network['gateway']) + if 'overcloud_ip_range' in network: + net_range = network['overcloud_ip_range'] + tmp_net['allocation_pools'] = [{'start': str(net_range[0]), + 'end': str(net_range[1])}] + elif tmp_net['enabled']: + logging.error("overcloud ip range is missing and must be provided " + "in network settings when network is enabled for " + "network {}".format(net)) + raise NetworkDataException("overcloud_ip_range missing from " + "network: {}".format(net)) + if 'cidr' in network: + tmp_net['ip_subnet'] = str(network['cidr']) + elif tmp_net['enabled']: + logging.error("cidr is missing and must be provided in network " + "settings when network is enabled for network " + "{}".format(net)) + raise NetworkDataException("cidr is null for network {}".format( + net)) + + network_data.append(copy.deepcopy(tmp_net)) + + # have to do this due to the aforementioned bug + storage_mgmt_net = { + 'name': 'StorageMgmt', + 'enabled': False, + 'name_lower': 'storage_mgmt', + 'ip_subnet': '172.16.3.0/24', + 'allocation_pools': [{'start': '172.16.3.4', 'end': '172.16.3.250'}], + 'vip': True, + } + network_data.append(storage_mgmt_net) + if target: + logging.debug("Writing network data to {}".format(target)) + utils.dump_yaml(network_data, target) + logging.debug("Network data parsed as:\n " + "{}".format(pprint.pformat(network_data))) + return network_data diff --git a/apex/network/network_environment.py b/apex/network/network_environment.py index c2e9991a..ea71e0f3 100644 --- a/apex/network/network_environment.py +++ b/apex/network/network_environment.py @@ -8,7 +8,6 @@ ############################################################################## import re - import yaml from apex.settings.network_settings import NetworkSettings @@ -19,7 +18,8 @@ from apex.common.constants import ( TENANT_NETWORK, STORAGE_NETWORK, EXTERNAL_NETWORK, - API_NETWORK + API_NETWORK, + DEFAULT_OS_VERSION, ) HEAT_NONE = 'OS::Heat::None' @@ -40,6 +40,12 @@ API_RESOURCES = {'OS::TripleO::Network::InternalApi': None, 'OS::TripleO::Network::Ports::InternalApiVipPort': PORTS, 'OS::TripleO::Controller::Ports::InternalApiPort': PORTS, 'OS::TripleO::Compute::Ports::InternalApiPort': PORTS} +STORAGE_MGMT_RESOURCES = { + 'OS::TripleO::Network::StorageMgmt': None, + 'OS::TripleO::Network::Ports::StorageMgmtVipPort': PORTS, + 'OS::TripleO::Controller::Ports::StorageMgmtPort': PORTS, + 'OS::TripleO::Compute::Ports::StorageMgmtPort': PORTS +} # A list of flags that will be set to true when IPv6 is enabled IPV6_FLAGS = ["NovaIPv6", "MongoDbIPv6", "CorosyncIPv6", "CephIPv6", @@ -58,23 +64,20 @@ class NetworkEnvironment(dict): based on a NetworkSettings object. """ def __init__(self, net_settings, filename, compute_pre_config=False, - controller_pre_config=False): + controller_pre_config=False, os_version=DEFAULT_OS_VERSION): """ Create Network Environment according to Network Settings """ init_dict = {} + if not isinstance(net_settings, NetworkSettings): + raise NetworkEnvException('Invalid Network Settings object') if isinstance(filename, str): with open(filename, 'r') as net_env_fh: init_dict = yaml.safe_load(net_env_fh) - super().__init__(init_dict) - if not isinstance(net_settings, NetworkSettings): - raise NetworkEnvException('Invalid Network Settings object') - self._set_tht_dir() - nets = net_settings['networks'] - + self.os_version = os_version admin_cidr = nets[ADMIN_NETWORK]['cidr'] admin_prefix = str(admin_cidr.prefixlen) self[param_def]['ControlPlaneSubnetCidr'] = admin_prefix @@ -173,6 +176,9 @@ class NetworkEnvironment(dict): # apply resource registry update for API_RESOURCES self._config_resource_reg(API_RESOURCES, postfix) + if self.os_version != 'ocata': + self._config_resource_reg(STORAGE_MGMT_RESOURCES, '/noop.yaml') + # Set IPv6 related flags to True. Not that we do not set those to False # when IPv4 is configured, we'll use the default or whatever the user # may have set. @@ -204,7 +210,10 @@ class NetworkEnvironment(dict): for key, prefix in resources.items(): if prefix is None: if postfix == '/noop.yaml': - self[reg][key] = HEAT_NONE + if self.os_version == 'ocata': + self[reg][key] = HEAT_NONE + else: + del self[reg][key] continue prefix = '' self[reg][key] = self.tht_dir + prefix + postfix |