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/nodes.py b/cfg_checker/nodes.py
index 776c8b2..d518e75 100644
--- a/cfg_checker/nodes.py
+++ b/cfg_checker/nodes.py
@@ -1,12 +1,9 @@
-import json
import os
-import sys
+from copy import deepcopy
-from copy import deepcopy
-
-from cfg_checker.common import utils, const
-from cfg_checker.common import config, logger, logger_cli, pkg_dir
-from cfg_checker.common import salt_utils
+from cfg_checker.common import config, const
+from cfg_checker.common import logger, logger_cli, pkg_dir
+from cfg_checker.common import salt_utils, utils
node_tmpl = {
'role': '',
@@ -22,7 +19,7 @@
logger_cli.info("# Collecting nodes")
# simple salt rest client
self.salt = salt_utils.SaltRemote()
-
+
# Keys for all nodes
# this is not working in scope of 2016.8.3, will overide with list
logger_cli.debug("...collecting node names existing in the cloud")
@@ -36,18 +33,22 @@
self.node_keys = {
'minions': _keys['minions']
}
- except Exception as e:
+ except Exception:
_keys = None
self.node_keys = None
-
+
# List of minions with grains
_minions = self.salt.list_minions()
if _minions:
- logger_cli.info("-> api reported {} active minions".format(len(_minions)))
+ logger_cli.info(
+ "-> api reported {} active minions".format(len(_minions))
+ )
elif not self.node_keys:
# this is the last resort
_minions = config.load_nodes_list()
- logger_cli.info("-> {} nodes loaded from list file".format(len(_minions)))
+ logger_cli.info(
+ "-> {} nodes loaded from list file".format(len(_minions))
+ )
else:
_minions = self.node_keys['minions']
@@ -87,7 +88,7 @@
lambda nd: self.nodes[nd]['role'] == const.all_roles_map['cfg'],
self.nodes
)[0]
-
+
# OpenStack versions
self.mcp_release = self.salt.pillar_get(
self.master_node,
@@ -98,7 +99,6 @@
"_param:openstack_version"
)[self.master_node]
-
def skip_node(self, node):
# Add node to skip list
# Fro example if it is fails to comply with the rules
@@ -119,7 +119,9 @@
:return: no return value, data pulished internally
"""
- logger_cli.debug("...collecting node pillars for '{}'".format(pillar_path))
+ logger_cli.debug(
+ "...collecting node pillars for '{}'".format(pillar_path)
+ )
_result = self.salt.pillar_get(self.active_nodes_compound, pillar_path)
self.not_responded = []
for node, data in self.nodes.iteritems():
@@ -152,7 +154,7 @@
self.not_responded.append(node)
else:
_data[_pillar_keys[-1]] = _result[node]
-
+
def execute_script_on_active_nodes(self, script_filename, args=[]):
# Prepare script
_p = os.path.join(pkg_dir, 'scripts', script_filename)
@@ -162,12 +164,13 @@
config.salt_file_root, config.salt_scripts_folder
)
logger_cli.debug(
- "...Uploading script {} to master's file cache folder: '{}'".format(
+ "...Uploading script {} "
+ "to master's file cache folder: '{}'".format(
script_filename,
_storage_path
)
)
- _result = self.salt.mkdir("cfg01*", _storage_path)
+ self.salt.mkdir("cfg01*", _storage_path)
# Form cache, source and target path
_cache_path = os.path.join(_storage_path, script_filename)
_source_path = os.path.join(
@@ -182,11 +185,15 @@
)
logger_cli.debug("...creating file in cache '{}'".format(_cache_path))
- _result = self.salt.f_touch_master(_cache_path)
- _result = self.salt.f_append_master(_cache_path, _script)
+ self.salt.f_touch_master(_cache_path)
+ self.salt.f_append_master(_cache_path, _script)
# command salt to copy file to minions
- logger_cli.debug("...creating script target folder '{}'".format(_cache_path))
- _result = self.salt.mkdir(
+ logger_cli.debug(
+ "...creating script target folder '{}'".format(
+ _cache_path
+ )
+ )
+ self.salt.mkdir(
self.active_nodes_compound,
os.path.join(
'/root',
@@ -195,14 +202,15 @@
tgt_type="compound"
)
logger_cli.info("-> Running script to all active nodes")
- _result = self.salt.get_file(
+ logger.debug("... syncing file to nodes")
+ self.salt.get_file(
self.active_nodes_compound,
_source_path,
_target_path,
tgt_type="compound"
)
# execute pkg collecting script
- logger.debug("Running script to all nodes")
+ logger.debug("... running script")
# handle results for each node
_script_arguments = " ".join(args) if args else ""
self.not_responded = []
@@ -214,7 +222,7 @@
)
# all false returns means that there is no response
- self.not_responded = [_n for _n in _r.keys() if not _r[_n]]
+ self.not_responded = [_n for _n in _r.keys() if not _r[_n]]
return _r
def is_node_available(self, node, log=True):
@@ -228,4 +236,3 @@
return False
else:
return True
-