WIP for network check
diff --git a/cfg_checker/pkg_check.py b/cfg_checker/pkg_check.py
index fe34f60..e9c312e 100644
--- a/cfg_checker/pkg_check.py
+++ b/cfg_checker/pkg_check.py
@@ -9,50 +9,10 @@
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
-
-node_tmpl = {
- 'role': '',
- 'node_group': '',
- 'status': const.NODE_DOWN,
- 'pillars': {},
- 'grains': {}
-}
+from cfg_checker.nodes import SaltNodes, node_tmpl
-class CloudPackageChecker(object):
- def __init__(self):
- logger_cli.info("### Collecting nodes for package check")
- # 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
- # cls.node_keys = cls.salt.list_keys()
-
- logger_cli.info("### Collecting node names existing in the cloud")
- self.node_keys = {
- 'minions': config.all_nodes
- }
-
- # all that answer ping
- _active = self.salt.get_active_nodes()
- logger_cli.debug("-> Nodes responded: {}".format(_active))
- # just inventory for faster interaction
- # iterate through all accepted nodes and create a dict for it
- self.nodes = {}
- for _name in self.node_keys['minions']:
- _nc = utils.get_node_code(_name)
- _rmap = const.all_roles_map
- _role = _rmap[_nc] if _nc in _rmap else 'unknown'
- _status = const.NODE_UP if _name in _active else const.NODE_DOWN
-
- self.nodes[_name] = deepcopy(node_tmpl)
- self.nodes[_name]['node_group'] = _nc
- self.nodes[_name]['role'] = _role
- self.nodes[_name]['status'] = _status
-
- logger_cli.info("-> {} nodes collected".format(len(self.nodes)))
-
+class CloudPackageChecker(SaltNodes):
def collect_installed_packages(self):
"""
Collect installed packages on each node
@@ -61,70 +21,8 @@
:return: none
"""
logger_cli.info("### Collecting installed packages")
- # form an all nodes compound string to use in salt
- _active_nodes_string = self.salt.compound_string_from_list(
- filter(
- lambda nd: self.nodes[nd]['status'] == const.NODE_UP,
- self.nodes
- )
- )
- # Prepare script
- _script_filename = "pkg_versions.py"
- _p = os.path.join(pkg_dir, 'scripts', _script_filename)
- with open(_p, 'rt') as fd:
- _script = fd.read().splitlines()
- _storage_path = os.path.join(
- config.salt_file_root, config.salt_scripts_folder
- )
- logger_cli.debug(
- "# Uploading script {} to master's file cache folder: '{}'".format(
- _script_filename,
- _storage_path
- )
- )
- _result = 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(
- 'salt://',
- config.salt_scripts_folder,
- _script_filename
- )
- _target_path = os.path.join(
- '/root',
- config.salt_scripts_folder,
- _script_filename
- )
+ _result = self.execute_script("pkg_versions.py")
- 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)
- # command salt to copy file to minions
- logger_cli.debug("# Creating script target folder '{}'".format(_cache_path))
- _result = self.salt.mkdir(
- _active_nodes_string,
- os.path.join(
- '/root',
- config.salt_scripts_folder
- ),
- tgt_type="compound"
- )
- logger_cli.info("-> Running script to all active nodes")
- _result = self.salt.get_file(
- _active_nodes_string,
- _source_path,
- _target_path,
- tgt_type="compound"
- )
- # execute pkg collecting script
- logger.debug("Running script to all nodes")
- # handle results for each node
- _result = self.salt.cmd(
- _active_nodes_string,
- 'cmd.run',
- param='python {}'.format(_target_path),
- expr_form="compound"
- )
for key in self.nodes.keys():
# due to much data to be passed from salt, it is happening in order
if key in _result: