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
-
