Просмотр исходного кода

Merge pull request #118 from aznashwan/dont-log-task-info

Filter any credentials from the task_info.
Nashwan Azhari 6 лет назад
Родитель
Сommit
164ca78005

+ 5 - 5
coriolis/conductor/rpc/server.py

@@ -1790,7 +1790,7 @@ class ConductorServerEndpoint(object):
                     "Updating volumes_info for instance '%s' in parent action "
                     "'%s' following completion of task '%s' (type '%s'): %s",
                     task.instance, execution.action_id, task.id, task_type,
-                    utils.filter_chunking_info_for_task(
+                    utils.sanitize_task_info(
                         {'volumes_info': volumes_info}))
                 self._update_volumes_info_for_migration_parent_replica(
                     ctxt, execution.action_id, task.instance,
@@ -1956,12 +1956,12 @@ class ConductorServerEndpoint(object):
                         "task_id": task_id,
                         "instance": task.instance,
                         "action_id": action_id,
-                        "task_result": utils.filter_chunking_info_for_task(
+                        "task_result": utils.sanitize_task_info(
                             task_result)})
                 updated_task_info = (
                     db_api.update_transfer_action_info_for_instance(
                         ctxt, action_id, task.instance,
-                        utils.filter_chunking_info_for_task(
+                        utils.sanitize_task_info(
                             task_result)))
             else:
                 action = db_api.get_action(ctxt, action_id)
@@ -2277,7 +2277,7 @@ class ConductorServerEndpoint(object):
             LOG.debug(
                 "Pre-replica-update task_info for instance '%s' of Replica "
                 "'%s': %s", instance, replica_id,
-                utils.filter_chunking_info_for_task(
+                utils.sanitize_task_info(
                     replica.info[instance]))
 
             # NOTE: "circular assignment" would lead to a `None` value
@@ -2306,7 +2306,7 @@ class ConductorServerEndpoint(object):
             LOG.debug(
                 "Updated task_info for instance '%s' of Replica "
                 "'%s' which will be verified during update procedure: %s",
-                instance, replica_id, utils.filter_chunking_info_for_task(
+                instance, replica_id, utils.sanitize_task_info(
                     replica.info[instance]))
 
             get_instance_info_task = self._create_task(

+ 1 - 1
coriolis/tasks/base.py

@@ -110,7 +110,7 @@ class TaskRunner(with_metaclass(abc.ABCMeta)):
                 "declared return values in its result: %s. "
                 "Result was: %s" % (
                     self.__class__, missing_returns,
-                    utils.filter_chunking_info_for_task(result)))
+                    utils.sanitize_task_info(result)))
 
         undeclared_returns = [
             prop for prop in result.keys()

+ 2 - 2
coriolis/tasks/replica_tasks.py

@@ -47,10 +47,10 @@ def _check_ensure_volumes_info_ordering(export_info, volumes_info):
 
         ordered_volumes_info.append(matching_volumes[0])
 
-    vol_info_cpy = utils.filter_chunking_info_for_task(
+    vol_info_cpy = utils.sanitize_task_info(
         {"volumes_info": volumes_info}).get("volumes_info", [])
 
-    ordered_vol_info_cpy = utils.filter_chunking_info_for_task(
+    ordered_vol_info_cpy = utils.sanitize_task_info(
         {"volumes_info": ordered_volumes_info}).get("volumes_info", [])
 
     LOG.debug(

+ 12 - 3
coriolis/utils.py

@@ -576,14 +576,23 @@ def bad_request_on_error(error_message):
     return _bad_request_on_error
 
 
-def filter_chunking_info_for_task(task_info):
+def sanitize_task_info(task_info):
     """ Returns a copy of the given task info with any chunking
-    info on volumes removed.
+    info for volumes and sensitive credentials removed.
     """
     new = {}
+
+    special_keys = ['volumes_info', 'origin', 'destination']
+
     for key in task_info.keys():
-        if key != "volumes_info":
+        if key not in special_keys:
+            new[key] = copy.deepcopy(task_info[key])
+
+    for key in ['origin', 'destination']:
+        if key in task_info.keys():
             new[key] = copy.deepcopy(task_info[key])
+            if type(new[key]) is dict and 'connection_info' in new[key]:
+                new[key]['connection_info'] = {"got": "redacted"}
 
     if 'volumes_info' in task_info:
         new['volumes_info'] = []

+ 2 - 2
coriolis/worker/rpc/server.py

@@ -221,7 +221,7 @@ class WorkerServerEndpoint(object):
             LOG.info(
                 "Output of completed %s task with ID %s: %s",
                 task_type, task_type,
-                utils.filter_chunking_info_for_task(task_result))
+                utils.sanitize_task_info(task_result))
 
             self._rpc_conductor_client.task_completed(
                 ctxt, task_id, task_result)
@@ -458,7 +458,7 @@ def _task_process(ctxt, task_id, task_type, origin, destination, instance,
                   {"task_id": task_id, "task_type": task_type,
                    "origin": origin, "destination": destination,
                    "instance": instance,
-                   "task_info": utils.filter_chunking_info_for_task(
+                   "task_info": utils.sanitize_task_info(
                        task_info)})
 
         task_result = task_runner.run(