summaryrefslogtreecommitdiffstats
path: root/apex/network
diff options
context:
space:
mode:
Diffstat (limited to 'apex/network')
-rw-r--r--apex/network/network_data.py104
-rw-r--r--apex/network/network_environment.py29
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