From 1265f9b6082bd4b622c2b05eb5c22e515bc7ad9d Mon Sep 17 00:00:00 2001 From: Martin Magr Date: Mon, 29 Jul 2013 13:53:37 +0200 Subject: [PATCH] Correct CIDR values in case of invalid is given Change-Id: I4f2a18acb2f5a0c17e7154368b767c70fd166e8c Fixes: rhbz#969977 --- packstack/installer/processors.py | 14 +++++++++++++- packstack/plugins/nova_300.py | 5 +++-- requirements.txt | 1 + setup.py | 1 + 4 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 requirements.txt diff --git a/packstack/installer/processors.py b/packstack/installer/processors.py index 1355452a4..9f7e0d190 100644 --- a/packstack/installer/processors.py +++ b/packstack/installer/processors.py @@ -1,12 +1,24 @@ # -*- coding: utf-8 -*- +import netaddr import os from .utils import ScriptRunner, force_ip from .exceptions import ParamProcessingError, NetworkError -__all__ = ('ParamProcessingError', 'process_host', 'process_ssh_key') +__all__ = ('ParamProcessingError', 'process_cidr', 'process_host', + 'process_ssh_key') + + +def process_cidr(param, process_args=None): + """ + Corrects given CIDR if necessary. + """ + try: + return str(netaddr.IPNetwork(param).cidr) + except Exception, ex: + raise ParamProcessingError(str(ex)) def process_host(param, process_args=None): diff --git a/packstack/plugins/nova_300.py b/packstack/plugins/nova_300.py index 1580f7683..a3bcc3358 100644 --- a/packstack/plugins/nova_300.py +++ b/packstack/plugins/nova_300.py @@ -6,8 +6,7 @@ import os import uuid import logging -from packstack.installer import validators -from packstack.installer import utils +from packstack.installer import processors, utils, validators from packstack.installer.exceptions import ScriptRuntimeError from packstack.modules.ospluginutils import NovaConfig, getManifestTemplate, appendManifestFile, manifestfiles @@ -203,6 +202,7 @@ def initConfig(controllerObject): "USAGE" : "IP Range for Flat DHCP", "PROMPT" : "Enter the IP Range for Flat DHCP", "OPTION_LIST" : ["^([\d]{1,3}\.){3}[\d]{1,3}/\d\d?$"], + "PROCESSORS" : [processors.process_cidr], "VALIDATORS" : [validators.validate_regexp], "DEFAULT_VALUE" : "192.168.32.0/22", "MASK_INPUT" : False, @@ -215,6 +215,7 @@ def initConfig(controllerObject): "USAGE" : "IP Range for Floating IP's", "PROMPT" : "Enter the IP Range for Floating IP's", "OPTION_LIST" : ["^([\d]{1,3}\.){3}[\d]{1,3}/\d\d?$"], + "PROCESSORS" : [processors.process_cidr], "VALIDATORS" : [validators.validate_regexp], "DEFAULT_VALUE" : "10.3.4.0/22", "MASK_INPUT" : False, diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 000000000..3721f7851 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +netaddr>=0.7.6 diff --git a/setup.py b/setup.py index 66f8b39ca..44d290cff 100644 --- a/setup.py +++ b/setup.py @@ -24,6 +24,7 @@ setup( include_package_data=True, long_description=read('README'), zip_safe=False, + install_requires=['netaddr'], classifiers=[ "Development Status :: 3 - Alpha", "Topic :: Utilities",