diff options
author | Dan Radez <dradez@redhat.com> | 2016-07-01 18:01:24 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@172.30.200.206> | 2016-07-01 18:01:24 +0000 |
commit | 9366d88b499d51369182c8fb04fa358ae6694844 (patch) | |
tree | 9ff2ef66ab095f04b283a495442988a33cb506d7 /lib | |
parent | 4329294c99fd22b814aa8d7183e0e8de543ac5c5 (diff) | |
parent | 45fabbab6a4107df8a32f09045cf955afeb2e4ac (diff) |
Merge "Syntax updates and new tests"
Diffstat (limited to 'lib')
-rw-r--r-- | lib/common-functions.sh | 2 | ||||
-rw-r--r-- | lib/python/apex/deploy_env.py | 53 | ||||
-rw-r--r-- | lib/python/apex/ip_utils.py | 41 | ||||
-rw-r--r-- | lib/python/apex/network_environment.py | 61 | ||||
-rw-r--r-- | lib/python/apex/network_settings.py | 9 | ||||
-rwxr-xr-x | lib/python/apex_python_utils.py (renamed from lib/python/apex-python-utils.py) | 34 |
6 files changed, 93 insertions, 107 deletions
diff --git a/lib/common-functions.sh b/lib/common-functions.sh index 6b259ac1..079b0886 100644 --- a/lib/common-functions.sh +++ b/lib/common-functions.sh @@ -18,7 +18,7 @@ function find_ip { return 1 fi - python3.4 -B $LIB/python/apex-python-utils.py find-ip -i $1 + python3.4 -B $LIB/python/apex_python_utils.py find-ip -i $1 } ##attach interface to OVS and set the network config correctly diff --git a/lib/python/apex/deploy_env.py b/lib/python/apex/deploy_env.py index 4c71b54f..1fe137e4 100644 --- a/lib/python/apex/deploy_env.py +++ b/lib/python/apex/deploy_env.py @@ -24,8 +24,9 @@ REQ_DEPLOY_SETTINGS = ['sdn_controller', OPT_DEPLOY_SETTINGS = ['performance'] VALID_ROLES = ['Controller', 'Compute', 'ObjectStorage'] -VALID_PERF_OPTS = ['kernel','nova'] -VALID_DATAPLANES = ['ovs','ovs_dpdk','fdio'] +VALID_PERF_OPTS = ['kernel', 'nova'] +VALID_DATAPLANES = ['ovs', 'ovs_dpdk', 'fdio'] + class DeploySettings: """ @@ -65,9 +66,9 @@ class DeploySettings: if setting == 'dataplane': if value not in VALID_DATAPLANES: planes = ' '.join(VALID_DATAPLANES) - raise DeploySettingsException("Invalid dataplane {} " - "specified. Valid dataplanes:" - " {}".format(value,planes)) + raise DeploySettingsException( + "Invalid dataplane {} specified. Valid dataplanes:" + " {}".format(value, planes)) for req_set in REQ_DEPLOY_SETTINGS: if req_set not in deploy_options: @@ -80,37 +81,43 @@ class DeploySettings: if not isinstance(deploy_options['performance'], dict): raise DeploySettingsException("Performance deploy_option" "must be a dictionary.") - for role,role_perf_sets in deploy_options['performance'].items(): + for role, role_perf_sets in deploy_options['performance'].items(): if role not in VALID_ROLES: raise DeploySettingsException("Performance role {}" "is not valid, choose" "from {}".format( - role," ".join(VALID_ROLES) + role, + " ".join(VALID_ROLES) )) for key in role_perf_sets: if key not in VALID_PERF_OPTS: - raise DeploySettingsException("Performance option {}" + raise DeploySettingsException("Performance option {} " "is not valid, choose" "from {}".format( - key," ".join( - VALID_PERF_OPTS))) - + key, + " ".join( + VALID_PERF_OPTS) + )) def _dump_performance(self): """ Creates performance settings string for bash consumption. - Output will be in the form of a list that can be iterated over in bash, - with each string being the direct input to the performance setting script - in the form <role> <category> <key> <value> to facilitate modification of the - correct image. + Output will be in the form of a list that can be iterated over in + bash, with each string being the direct input to the performance + setting script in the form <role> <category> <key> <value> to + facilitate modification of the correct image. """ bash_str = 'performance_options=(\n' - for role,settings in self.deploy_settings['deploy_options']['performance'].items(): - for category,options in settings.items(): - for key,value in options.items(): - bash_str += "\"{} {} {} {}\"\n".format(role, category, key, value) + deploy_options = self.deploy_settings['deploy_options'] + for role, settings in deploy_options['performance'].items(): + for category, options in settings.items(): + for key, value in options.items(): + bash_str += "\"{} {} {} {}\"\n".format(role, + category, + key, + value) bash_str += ')\n' bash_str += '\n' bash_str += 'performance_roles=(\n' @@ -126,11 +133,13 @@ class DeploySettings: Creates deploy settings array in bash syntax. """ bash_str = '' - for key,value in self.deploy_settings['deploy_options'].items(): + for key, value in self.deploy_settings['deploy_options'].items(): if not isinstance(value, bool): - bash_str += "deploy_options_array[{}]=\"{}\"\n".format(key, value) + bash_str += "deploy_options_array[{}]=\"{}\"\n".format(key, + value) else: - bash_str += "deploy_options_array[{}]={}\n".format(key, value) + bash_str += "deploy_options_array[{}]={}\n".format(key, + value) return bash_str def dump_bash(self, path=None): diff --git a/lib/python/apex/ip_utils.py b/lib/python/apex/ip_utils.py index f51f227a..b039e26b 100644 --- a/lib/python/apex/ip_utils.py +++ b/lib/python/apex/ip_utils.py @@ -34,11 +34,11 @@ def get_ip_range(start_offset=None, count=None, end_offset=None, space, and end_offset will be calculated from the interface IP. 2 of start_offset, end_offset and count options must be provided: - - If start_offset and end_offset are provided, a range from start_offset - to end_offset will be returned. - - If count is provided, a range from either start_offset to (start_offset - +count) or (end_offset-count) to end_offset will be returned. The - IP range returned will be of size <count>. + - If start_offset and end_offset are provided, a range from + start_offset to end_offset will be returned. + - If count is provided, a range from either start_offset to + (start_offset+count) or (end_offset-count) to end_offset will be + returned. The IP range returned will be of size <count>. Both start_offset and end_offset must be greater than 0. Returns IP range in the format of "first_addr,second_addr" or exception @@ -47,7 +47,7 @@ def get_ip_range(start_offset=None, count=None, end_offset=None, if cidr: if count and start_offset and not end_offset: start_index = start_offset - end_index = start_offset + count -1 + end_index = start_offset + count - 1 elif count and end_offset and not start_offset: end_index = -1 - end_offset start_index = -1 - end_index - count + 1 @@ -81,7 +81,7 @@ def get_ip_range(start_offset=None, count=None, end_offset=None, else: if count and start_offset and not end_offset: start_ip = network[start_offset] - end_ip = start_ip + count -1 + end_ip = start_ip + count - 1 elif count and end_offset and not start_offset: end_ip = interface.ip - end_offset start_ip = end_ip - count + 1 @@ -135,27 +135,6 @@ def get_ip(offset, cidr=None, interface=None): return str(ip) -def generate_ip_range(args): - """ - Generate IP range in string format for given CIDR. - This function works for both IPv4 and IPv6. - - args is expected to contain the following members: - CIDR: any valid CIDR representation. - start_position: starting index, default to first address in subnet (1) - end_position: ending index, default to last address in subnet (-1) - - Returns IP range in string format. A single IP is returned if start and - end IPs are identical. - """ - cidr = ipaddress.ip_network(args.CIDR) - (start_index, end_index) = (args.start_position, args.end_position) - if cidr[start_index] == cidr[end_index]: - return str(cidr[start_index]) - else: - return ','.join(sorted([str(cidr[start_index]), str(cidr[end_index])])) - - def get_interface(nic, address_family=4): """ Returns interface object for a given NIC name in the system @@ -183,7 +162,7 @@ def get_interface(nic, address_family=4): return ipaddress.ip_interface(match.group()) else: logging.info("interface ip not found! ip address output:\n{}" - .format(output)) + .format(output)) return None @@ -228,8 +207,8 @@ def _validate_ip_range(start_ip, end_ip, cidr): """ ip_range = "{},{}".format(start_ip, end_ip) if end_ip <= start_ip: - logging.warning("IP range {} is invalid: end_ip should be greater than " - "starting ip".format(ip_range)) + logging.warning("IP range {} is invalid: end_ip should be greater " + "than starting ip".format(ip_range)) return False if start_ip not in ipaddress.ip_network(cidr): logging.warning('start_ip {} is not in network {}' diff --git a/lib/python/apex/network_environment.py b/lib/python/apex/network_environment.py index fd6f5286..fec6299d 100644 --- a/lib/python/apex/network_environment.py +++ b/lib/python/apex/network_environment.py @@ -9,7 +9,11 @@ import yaml import re -from .common import constants +from .common.constants import ADMIN_NETWORK +from .common.constants import PRIVATE_NETWORK +from .common.constants import STORAGE_NETWORK +from .common.constants import PUBLIC_NETWORK +from .common.constants import API_NETWORK PORTS = '/ports' # Resources defined by <resource name>: <prefix> @@ -70,27 +74,27 @@ class NetworkEnvironment: if not tht_dir: raise NetworkEnvException('Unable to parse THT Directory') - admin_cidr = net_settings[constants.ADMIN_NETWORK]['cidr'] + admin_cidr = net_settings[ADMIN_NETWORK]['cidr'] admin_prefix = str(admin_cidr.prefixlen) self.netenv_obj[param_def]['ControlPlaneSubnetCidr'] = admin_prefix self.netenv_obj[param_def]['ControlPlaneDefaultRoute'] = \ - net_settings[constants.ADMIN_NETWORK]['provisioner_ip'] - public_cidr = net_settings[constants.PUBLIC_NETWORK]['cidr'] + net_settings[ADMIN_NETWORK]['provisioner_ip'] + public_cidr = net_settings[PUBLIC_NETWORK]['cidr'] self.netenv_obj[param_def]['ExternalNetCidr'] = str(public_cidr) - if net_settings[constants.PUBLIC_NETWORK]['vlan'] != 'native': + if net_settings[PUBLIC_NETWORK]['vlan'] != 'native': self.netenv_obj[param_def]['ExternalNetworkVlanID'] = \ - net_settings[constants.PUBLIC_NETWORK]['vlan'] - public_range = net_settings[constants.PUBLIC_NETWORK][ - 'usable_ip_range'].split(',') + net_settings[PUBLIC_NETWORK]['vlan'] + public_range = \ + net_settings[PUBLIC_NETWORK]['usable_ip_range'].split(',') self.netenv_obj[param_def]['ExternalAllocationPools'] = \ [{'start': public_range[0], 'end': public_range[1] }] self.netenv_obj[param_def]['ExternalInterfaceDefaultRoute'] = \ - net_settings[constants.PUBLIC_NETWORK]['gateway'] + net_settings[PUBLIC_NETWORK]['gateway'] self.netenv_obj[param_def]['EC2MetadataIp'] = \ - net_settings[constants.ADMIN_NETWORK]['provisioner_ip'] + net_settings[ADMIN_NETWORK]['provisioner_ip'] self.netenv_obj[param_def]['DnsServers'] = net_settings['dns_servers'] if public_cidr.version == 6: @@ -103,24 +107,23 @@ class NetworkEnvironment: prefix = '' self.netenv_obj[reg][key] = tht_dir + prefix + postfix - - if constants.PRIVATE_NETWORK in enabled_networks: - priv_range = net_settings[constants.PRIVATE_NETWORK][ + if PRIVATE_NETWORK in enabled_networks: + priv_range = net_settings[PRIVATE_NETWORK][ 'usable_ip_range'].split(',') self.netenv_obj[param_def]['TenantAllocationPools'] = \ [{'start': priv_range[0], 'end': priv_range[1] }] - priv_cidr = net_settings[constants.PRIVATE_NETWORK]['cidr'] + priv_cidr = net_settings[PRIVATE_NETWORK]['cidr'] self.netenv_obj[param_def]['TenantNetCidr'] = str(priv_cidr) if priv_cidr.version == 6: postfix = '/tenant_v6.yaml' else: postfix = '/tenant.yaml' - if net_settings[constants.PRIVATE_NETWORK]['vlan'] != 'native': + if net_settings[PRIVATE_NETWORK]['vlan'] != 'native': self.netenv_obj[param_def]['TenantNetworkVlanID'] = \ - net_settings[constants.PRIVATE_NETWORK]['vlan'] + net_settings[PRIVATE_NETWORK]['vlan'] else: postfix = '/noop.yaml' @@ -129,8 +132,8 @@ class NetworkEnvironment: prefix = '' self.netenv_obj[reg][key] = tht_dir + prefix + postfix - if constants.STORAGE_NETWORK in enabled_networks: - storage_range = net_settings[constants.STORAGE_NETWORK][ + if STORAGE_NETWORK in enabled_networks: + storage_range = net_settings[STORAGE_NETWORK][ 'usable_ip_range'].split(',') self.netenv_obj[param_def]['StorageAllocationPools'] = \ [{'start': @@ -138,15 +141,15 @@ class NetworkEnvironment: 'end': storage_range[1] }] - storage_cidr = net_settings[constants.STORAGE_NETWORK]['cidr'] + storage_cidr = net_settings[STORAGE_NETWORK]['cidr'] self.netenv_obj[param_def]['StorageNetCidr'] = str(storage_cidr) if storage_cidr.version == 6: postfix = '/storage_v6.yaml' else: postfix = '/storage.yaml' - if net_settings[constants.STORAGE_NETWORK]['vlan'] != 'native': + if net_settings[STORAGE_NETWORK]['vlan'] != 'native': self.netenv_obj[param_def]['StorageNetworkVlanID'] = \ - net_settings[constants.STORAGE_NETWORK]['vlan'] + net_settings[STORAGE_NETWORK]['vlan'] else: postfix = '/noop.yaml' @@ -155,24 +158,22 @@ class NetworkEnvironment: prefix = '' self.netenv_obj[reg][key] = tht_dir + prefix + postfix - if constants.API_NETWORK in enabled_networks: - api_range = net_settings[constants.API_NETWORK][ + if API_NETWORK in enabled_networks: + api_range = net_settings[API_NETWORK][ 'usable_ip_range'].split(',') self.netenv_obj[param_def]['InternalApiAllocationPools'] = \ - [{'start': - api_range[0], - 'end': - api_range[1] + [{'start': api_range[0], + 'end': api_range[1] }] - api_cidr = net_settings[constants.API_NETWORK]['cidr'] + api_cidr = net_settings[API_NETWORK]['cidr'] self.netenv_obj[param_def]['InternalApiNetCidr'] = str(api_cidr) if api_cidr.version == 6: postfix = '/internal_api_v6.yaml' else: postfix = '/internal_api.yaml' - if net_settings[constants.API_NETWORK]['vlan'] != 'native': + if net_settings[API_NETWORK]['vlan'] != 'native': self.netenv_obj[param_def]['InternalApiNetworkVlanID'] = \ - net_settings[constants.API_NETWORK]['vlan'] + net_settings[API_NETWORK]['vlan'] else: postfix = '/noop.yaml' diff --git a/lib/python/apex/network_settings.py b/lib/python/apex/network_settings.py index 475082df..50dd15c3 100644 --- a/lib/python/apex/network_settings.py +++ b/lib/python/apex/network_settings.py @@ -19,8 +19,8 @@ class NetworkSettings: This class parses APEX network settings yaml file into an object. It generates or detects all missing fields for deployment. - The resulting object will be used later to generate network environment file - as well as configuring post deployment networks. + The resulting object will be used later to generate network environment + file as well as configuring post deployment networks. Currently the parsed object is dumped into a bash global definition file for deploy.sh consumption. This object will later be used directly as @@ -41,7 +41,7 @@ class NetworkSettings: """ if constants.ADMIN_NETWORK not in self.settings_obj or \ not utils.str2bool(self.settings_obj[constants.ADMIN_NETWORK].get( - 'enabled')): + 'enabled')): raise NetworkSettingsException("You must enable admin_network " "and configure it explicitly or " "use auto-detection") @@ -274,6 +274,3 @@ class NetworkSettingsException(Exception): def __str__(self): return self.value - - - diff --git a/lib/python/apex-python-utils.py b/lib/python/apex_python_utils.py index 01e6b03b..1a3cb159 100755 --- a/lib/python/apex-python-utils.py +++ b/lib/python/apex_python_utils.py @@ -105,16 +105,15 @@ def build_nic_template(args): vlans_vals = map(lambda x: settings[x]['vlan'], net_list) vlans = dict(zip(net_list, vlans_vals)) - print(template.render( - enabled_networks=args.enabled_networks, - role=args.role, - vlans=vlans, - external_net_type=args.ext_net_type, - external_net_af=args.address_family, - ovs_dpdk_bridge=args.ovs_dpdk_bridge)) + print(template.render(enabled_networks=args.enabled_networks, + role=args.role, + vlans=vlans, + external_net_type=args.ext_net_type, + external_net_af=args.address_family, + ovs_dpdk_bridge=args.ovs_dpdk_bridge)) -def parse_args(): +def get_parser(): parser = argparse.ArgumentParser() parser.add_argument('--debug', action='store_true', default=False, help="Turn on debug messages") @@ -176,11 +175,17 @@ def parse_args(): nic_template.set_defaults(func=build_nic_template) deploy_settings = subparsers.add_parser('parse-deploy-settings', - help='Parse deploy settings file') - deploy_settings.add_argument('-f', '--file', default='deploy_settings.yaml', - help='path to deploy settings file') + help='Parse deploy settings file') + deploy_settings.add_argument('-f', '--file', + default='deploy_settings.yaml', + help='path to deploy settings file') deploy_settings.set_defaults(func=parse_deploy_settings) + return parser + + +def main(): + parser = get_parser() args = parser.parse_args(sys.argv[1:]) if args.debug: logging.basicConfig(level=logging.DEBUG) @@ -191,10 +196,6 @@ def parse_args(): format='%(asctime)s %(levelname)s: %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p', level=logging.DEBUG) - return parser, args - - -def main(parser, args): if hasattr(args, 'func'): args.func(args) else: @@ -202,5 +203,4 @@ def main(parser, args): exit(1) if __name__ == "__main__": - parser, args = parse_args() - main(parser, args) + main() |