Network check fixes
- Proper network mapping
- Proper reclass lookup
- VIP detection
- Simple error gathering
- IP shown as 'exploded', i.e. in CIDR format
- MTU matching and detection
- Errors class for handling errors, including codes and indices
- Summary and detailed errors view
- Flake8 refactoring
Change-Id: I8ee37d345bdc21c7ad930bf8305acd28f8c121c8
Related-PROD: PROD-28199
diff --git a/cfg_checker/common/__init__.py b/cfg_checker/common/__init__.py
index 297ace6..427bc76 100644
--- a/cfg_checker/common/__init__.py
+++ b/cfg_checker/common/__init__.py
@@ -1,13 +1,14 @@
-import os
import const
-from settings import pkg_dir, config
-from other import Utils
from log import logger, logger_cli
+from other import Utils
+
+from settings import config
+
utils = Utils()
const = const
logger = logger
logger_cli = logger_cli
-config = config
\ No newline at end of file
+config = config
diff --git a/cfg_checker/common/const.py b/cfg_checker/common/const.py
index 8ca0d8c..f1f69ae 100644
--- a/cfg_checker/common/const.py
+++ b/cfg_checker/common/const.py
@@ -1,7 +1,7 @@
"""Constants that is not to be changed and used in all other files
"""
-from __future__ import print_function, absolute_import
+from __future__ import absolute_import, print_function
import itertools
diff --git a/cfg_checker/common/exception.py b/cfg_checker/common/exception.py
index 8e8b818..52aab2d 100644
--- a/cfg_checker/common/exception.py
+++ b/cfg_checker/common/exception.py
@@ -31,3 +31,9 @@
def __init__(self, message, *args, **kwargs):
super(InvalidReturnException, self).__init__(message, *args, **kwargs)
self.message = "# Unexpected return value: {}".format(message)
+
+
+class ErrorMappingException(CheckerException):
+ def __init__(self, message, *args, **kwargs):
+ super(ErrorMappingException, self).__init__(message, *args, **kwargs)
+ self.message = "# Unexpected error mapping/type: {}".format(message)
diff --git a/cfg_checker/common/log.py b/cfg_checker/common/log.py
index 9b29ba4..6edac2f 100644
--- a/cfg_checker/common/log.py
+++ b/cfg_checker/common/log.py
@@ -1,5 +1,5 @@
-import os
import logging
+import os
pkg_dir = os.path.dirname(__file__)
pkg_dir = os.path.join(pkg_dir, os.pardir, os.pardir)
@@ -85,6 +85,7 @@
return logger, logger_cli
+
# init instances of logger to be used by all other modules
logger, logger_cli = setup_loggers(
'cfg_checker',
diff --git a/cfg_checker/common/other.py b/cfg_checker/common/other.py
index 47cb865..1d34776 100644
--- a/cfg_checker/common/other.py
+++ b/cfg_checker/common/other.py
@@ -3,7 +3,6 @@
import subprocess
from cfg_checker.common.const import all_roles_map
-
from cfg_checker.common.exception import ConfigException
pkg_dir = os.path.dirname(__file__)
diff --git a/cfg_checker/common/salt_utils.py b/cfg_checker/common/salt_utils.py
index b913531..8b1b47f 100644
--- a/cfg_checker/common/salt_utils.py
+++ b/cfg_checker/common/salt_utils.py
@@ -3,12 +3,13 @@
"""
import json
import os
-import requests
import time
-from cfg_checker.common import logger, logger_cli, config
+from cfg_checker.common import config, logger, logger_cli
+from cfg_checker.common.exception import InvalidReturnException, SaltException
from cfg_checker.common.other import shell
-from cfg_checker.common.exception import SaltException, InvalidReturnException
+
+import requests
def _extract_password(_raw):
@@ -17,11 +18,11 @@
else:
try:
_json = json.loads(_raw)
- except ValueError as e:
+ except ValueError:
raise SaltException(
"# Return value is not a json: '{}'".format(_raw)
)
-
+
return _json["local"]
@@ -41,7 +42,7 @@
_ssh_cmd.append(config.ssh_host)
if config.ssh_uses_sudo:
_ssh_cmd.append("sudo")
-
+
_ssh_cmd.append(_salt_cmd)
_ssh_cmd = " ".join(_ssh_cmd)
logger_cli.debug("...calling salt: '{}'".format(_ssh_cmd))
@@ -53,6 +54,7 @@
else:
return _extract_password(_result)
+
def get_local_password():
"""Calls salt locally to get password from the pillar
@@ -86,7 +88,13 @@
self._token = self._login()
self.last_response = None
- def get(self, path='', headers=default_headers, cookies=None, timeout=None):
+ def get(
+ self,
+ path='',
+ headers=default_headers,
+ cookies=None,
+ timeout=None
+ ):
_path = os.path.join(self.uri, path)
logger.debug("# GET '{}'\nHeaders: '{}'\nCookies: {}".format(
_path,
@@ -108,12 +116,14 @@
_data = str(data).replace(self._pass, "*****")
else:
_data = data
- logger.debug("# POST '{}'\nHeaders: '{}'\nCookies: {}\nBody: {}".format(
- _path,
- headers,
- cookies,
- _data
- ))
+ logger.debug(
+ "# POST '{}'\nHeaders: '{}'\nCookies: {}\nBody: {}".format(
+ _path,
+ headers,
+ cookies,
+ _data
+ )
+ )
return requests.post(
os.path.join(self.uri, path),
headers=headers,
@@ -289,7 +299,7 @@
"""
try:
_r = self.salt_request('get', 'minions', timeout=10)
- except requests.exceptions.ReadTimeout as e:
+ except requests.exceptions.ReadTimeout:
logger_cli.debug("... timeout waiting list minions from Salt API")
_r = None
return _r[0] if _r else None
@@ -322,7 +332,7 @@
def get_active_nodes(self):
"""Used when other minion list metods fail
-
+
:return: json result from salt test.ping
"""
if config.skip_nodes:
@@ -336,7 +346,7 @@
expr_form='compound')
else:
_r = self.cmd('*', 'test.ping')
- # Return all nodes that responded
+ # Return all nodes that responded
return [node for node in _r.keys() if _r[node]]
def get_monitoring_ip(self, param_name):
@@ -391,7 +401,7 @@
"""
REST variation of file.get_managed
CLI execution goes like this (10 agrs):
- salt cfg01\* file.manage_file /root/test_scripts/pkg_versions.py
+ salt cfg01\\* file.manage_file /root/test_scripts/pkg_versions.py
'' '{}' /root/diff_pkg_version.py
'{hash_type: 'md5', 'hsum': <md5sum>}' root root '755' base ''
makedirs=True
diff --git a/cfg_checker/common/settings.py b/cfg_checker/common/settings.py
index 8d8111c..33e7c25 100644
--- a/cfg_checker/common/settings.py
+++ b/cfg_checker/common/settings.py
@@ -1,7 +1,9 @@
import os
from exception import ConfigException
-from log import logger, logger_cli
+
+from log import logger_cli
+
from other import utils
pkg_dir = os.path.dirname(__file__)
@@ -74,7 +76,11 @@
if os.path.isfile(_config_path):
with open(_config_path) as _f:
_list = _f.read().splitlines()
- logger_cli.info("# Loading env vars from '{}'".format(_config_path))
+ logger_cli.info(
+ "# Loading env vars from '{}'".format(
+ _config_path
+ )
+ )
else:
raise ConfigException(
"# Failed to load enviroment vars from '{}'".format(
@@ -103,7 +109,11 @@
)
)
else:
- logger_cli.debug("-> ...loaded total of '{}' vars".format(len(_list)))
+ logger_cli.debug(
+ "-> ...loaded total of '{}' vars".format(
+ len(_list)
+ )
+ )
self.salt_env = _env_name
def __init__(self):