""" Copyright (c) 2015-2016 Wind River Systems, Inc. SPDX-License-Identifier: Apache-2.0 """ from six.moves import configparser import re import six from netaddr import (IPNetwork, IPAddress, AddrFormatError) from exceptions import ValidateFail EXPECTED_SERVICE_NAME_AND_TYPE = ( {"KEYSTONE_SERVICE_NAME": "keystone", "KEYSTONE_SERVICE_TYPE": "identity", "GLANCE_SERVICE_NAME": "glance", "GLANCE_SERVICE_TYPE": "image", "NOVA_SERVICE_NAME": "nova", "NOVA_SERVICE_TYPE": "compute", "PLACEMENT_SERVICE_NAME": "placement", "PLACEMENT_SERVICE_TYPE": "placement", "NEUTRON_SERVICE_NAME": "neutron", "NEUTRON_SERVICE_TYPE": "network", "SYSINV_SERVICE_NAME": "sysinv", "SYSINV_SERVICE_TYPE": "platform", "PATCHING_SERVICE_NAME": "patching", "PATCHING_SERVICE_TYPE": "patching", "HEAT_SERVICE_NAME": "heat", "HEAT_SERVICE_TYPE": "orchestration", "HEAT_CFN_SERVICE_NAME": "heat-cfn", "HEAT_CFN_SERVICE_TYPE": "cloudformation", "CEILOMETER_SERVICE_NAME": "ceilometer", "CEILOMETER_SERVICE_TYPE": "metering", "NFV_SERVICE_NAME": "vim", "NFV_SERVICE_TYPE": "nfv", "AODH_SERVICE_NAME": "aodh", "AODH_SERVICE_TYPE": "alarming", "PANKO_SERVICE_NAME": "panko", "PANKO_SERVICE_TYPE": "event", "GNOCCHI_SERVICE_NAME": "gnocchi", "GNOCCHI_SERVICE_TYPE": "metric", "FM_SERVICE_NAME": "fm", "FM_SERVICE_TYPE": "faultmanagement", "BARBICAN_SERVICE_NAME": "barbican", "BARBICAN_SERVICE_TYPE": "key-manager", }) def is_valid_vlan(vlan): """Determine whether vlan is valid.""" try: if 0 < int(vlan) < 4095: return True else: return False except (ValueError, TypeError): return False def is_mtu_valid(mtu): """Determine whether a mtu is valid.""" try: if int(mtu) < 576: return False elif int(mtu) > 9216: return False else: return True except (ValueError, TypeError): return False def is_speed_valid(speed, valid_speeds=None): """Determine whether speed is valid.""" try: if valid_speeds is not None and int(speed) not in valid_speeds: return False else: return True except (ValueError, TypeError): return False def is_valid_hostname(hostname): """Determine whether a hostname is valid as per RFC 1123.""" # Maximum length of 255 if not hostname or len(hostname) > 255: return False # Allow a single dot on the right hand side if hostname[-1] == ".": hostname = hostname[:-1] # Create a regex to ensure: # - hostname does not begin or end with a dash # - each segment is 1 to 63 characters long # - valid characters are A-Z (any case) and 0-9 valid_re = re.compile("(?!-)[A-Z\d-]{1,63}(?