Updated ping command to work with MCC/MOS

  - updated Pinger class with inherited structure for Salt and Kube
  - implemented DeamonSet handling in KubeApi interface
  - implemented put-textfile and series of ConfigMap methods in KubeApi
  - updated Pinger to use multiple --cidr commands at once
  - update Summary section to be more informative and human readable

Change-Id: Iac18a619d0bb9a36a286a07f38aeba8f99a454ca
Related-PROD: PROD-36603
diff --git a/cfg_checker/modules/network/mapper.py b/cfg_checker/modules/network/mapper.py
index f0fd78d..875f633 100644
--- a/cfg_checker/modules/network/mapper.py
+++ b/cfg_checker/modules/network/mapper.py
@@ -769,6 +769,7 @@
         skip_list_file=None
     ):
         self.master = KubeNodes(config)
+        self.daemonset = None
         super(KubeNetworkMapper, self).__init__(
             config,
             errors_class=errors_class,
@@ -776,22 +777,25 @@
             skip_list_file=skip_list_file
         )
 
+    def get_daemonset(self):
+        if not self.daemonset:
+            _d = self.master.prepare_daemonset("daemonset_template.yaml")
+
+            # wait for daemonset, normally less than 60 sec for all
+            # but still, let us give it 10 second per pod
+            _timeout = self.master.nodes.__len__() * 10
+            if not self.master.wait_for_daemonset(_d, timeout=_timeout):
+                raise KubeException("Daemonset deployment fail")
+            self.daemonset = _d
+        return self.daemonset
+
     def get_script_output(self, script, args=None):
         """
         Get runtime network by creating DaemonSet with Host network parameter
         """
         # prepare daemonset
         logger_cli.info("-> Preparing daemonset to get node info")
-        _daemonset = self.master.prepare_daemonset(
-            "daemonset_template.yaml",
-            config_map=script
-        )
-
-        # wait for daemonset, normally less than 60 sec for all
-        # but still, let us give it 10 second per pod
-        _timeout = self.master.nodes.__len__() * 10
-        if not self.master.wait_for_daemonset(_daemonset, timeout=_timeout):
-            raise KubeException("Daemonset deployment fail")
+        _daemonset = self.get_daemonset()
         logger_cli.info("-> Running script on daemonset")
         # exec script on all pods in daemonset
         _result = self.master.execute_script_on_daemon_set(
@@ -801,7 +805,8 @@
         )
 
         # delete daemonset
-        self.master.delete_daemonset(_daemonset)
+        # TODO: handle daemonset delete properly
+        # self.master.delete_daemonset(_daemonset)
 
         return _result
 
@@ -810,9 +815,11 @@
         self.map_network(self.RUNTIME)
 
     def map_network(self, source):
+        # if network type is mapped - just return it
+        if source in self.networks:
+            return self.networks[source]
         # maps target network using given source
         _networks = None
-
         if source == self.RUNTIME:
             logger_cli.info("# Mapping node runtime network data")
             _r = self.get_script_output("ifs_data.py", args="json")