Rename to Constants.py
[csit.git] / resources / libraries / python / honeycomb / HcPersistence.py
index 3bbc52f..1627375 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
+# Copyright (c) 2018 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
@@ -15,7 +15,7 @@
 
 from robot.api import logger
 
-from resources.libraries.python.constants import Constants as Const
+from resources.libraries.python.Constants import Constants as Const
 from resources.libraries.python.honeycomb.HoneycombUtil import HoneycombError
 from resources.libraries.python.ssh import SSH
 from resources.libraries.python.topology import NodeType
@@ -70,7 +70,7 @@ class HcPersistence(object):
         :type find: string
         :type replace: string
         :raises HoneycombError: If persistent configuration couldn't be
-        modified.
+            modified.
         """
 
         argument = "\"s/{0}/{1}/g\"".format(find, replace)
@@ -83,3 +83,60 @@ class HcPersistence(object):
         if ret_code != 0:
             raise HoneycombError("Failed to modify persistence file on node"
                                  " {0}, {1}".format(node, stderr))
+
+    @staticmethod
+    def log_persisted_configuration(node):
+        """Read contents of Honeycomb persistence files and print them to log.
+
+        :param node: Honeycomb node.
+        :type node: dict
+        """
+
+        commands = [
+            "cat {0}/config/data.json".format(Const.REMOTE_HC_PERSIST),
+            "cat {0}/context/data.json".format(Const.REMOTE_HC_PERSIST),
+        ]
+
+        ssh = SSH()
+        ssh.connect(node)
+        for command in commands:
+            (_, _, _) = ssh.exec_command_sudo(command)
+
+    @staticmethod
+    def configure_persistence(node, state):
+        """Enable or disable Honeycomb configuration data persistence.
+
+        :param node: Honeycomb node.
+        :param state: Enable or Disable.
+        :type node: dict
+        :type state: str
+        :raises ValueError: If the state argument is incorrect.
+        :raises HoneycombError: If the operation fails.
+        """
+
+        state = state.lower()
+        if state == "enable":
+            state = "true"
+        elif state == "disable":
+            state = "false"
+        else:
+            raise ValueError("Unexpected value of state argument:"
+                             " {0} provided. Must be enable or disable."
+                             .format(state))
+
+        for setting in ("persist-config", "persist-context"):
+            # find the setting, replace entire line with 'setting: state'
+            find = '\\"{setting}\\":'.format(setting=setting)
+            replace = '\\"{setting}\\": \\"{state}\\",'.format(
+                setting=setting, state=state)
+
+            argument = '"/{0}/c\\ {1}"'.format(find, replace)
+            path = "{0}/config/honeycomb.json".format(Const.REMOTE_HC_DIR)
+            command = "sed -i {0} {1}".format(argument, path)
+
+            ssh = SSH()
+            ssh.connect(node)
+            (ret_code, _, stderr) = ssh.exec_command_sudo(command)
+            if ret_code != 0:
+                raise HoneycombError("Failed to modify configuration on "
+                                     "node {0}, {1}".format(node, stderr))