行动计划取消通知

https://blueprints.launchpad.net/watcher/+spec/notifications-actionplan-cancel

Watcher 中实现了一个新的操作 watcher actionplan cancel。本规范建议为 Watcher 行动计划 取消操作实现通知。

问题描述

目前,对于“watcher actionplan cancel”尚未实现通知,因此基于事件的插件无法得知行动计划取消何时开始和完成。

用例

作为 OpenStack 开发者,我希望能够监听来自 Watcher 关于行动计划取消的通知。

作为 OpenStack 开发者,我希望在以下情况下收到通知:

  • 行动计划取消开始

  • 行动计划取消完成

  • 行动计划取消失败

作为 OpenStack 开发者,我还希望在以下情况下收到通知:

  • 操作 中止(取消)开始

  • 操作中止(取消)完成

  • 操作中止(取消)失败

提议的变更

为了实现上述用例,需要许多不同的通知

  • actionplan.cancel.start 每当行动计划取消开始时。

  • actionplan.cancel.end 每当行动计划取消结束时。

  • actionplan.cancel.error 每当行动计划取消失败时。

  • action.cancel.start 每当操作被中止时。

  • action.cancel.end 每当操作中止结束时。

  • action.cancel.error 每当操作中止失败时

actionplan.cancel.start

{
  "event_type": "actionvent_type": "action_plan.cancel.start",
  "payload": {
    "watcher_object.namespace": "watcher",
    "watcher_object.name": "ActionPlanCancelPayload",
    "watcher_object.version": "1.0",
    "watcher_object.data": {
      "created_at": "2016-10-18T09:52:05Z",
      "deleted_at": null,
      "audit_uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
      "audit": {
        "watcher_object.namespace": "watcher",
        "watcher_object.name": "TerseAuditPayload",
        "watcher_object.version": "1.0",
        "watcher_object.data": {
          "created_at": "2016-10-18T09:52:05Z",
          "deleted_at": null,
          "uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
          "goal_uuid": "bc830f84-8ae3-4fc6-8bc6-e3dd15e8b49a",
          "strategy_uuid": "75234dfe-87e3-4f11-a0e0-3c3305d86a39",
          "scope": [],
          "audit_type": "ONESHOT",
          "state": "SUCCEEDED",
          "parameters": {},
          "interval": null,
          "updated_at": null
        }
      },
      "uuid": "76be87bd-3422-43f9-93a0-e85a577e3061",
      "fault": null,
      "state": "CANCELLING",
      "global_efficacy": {},
      "strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
      "strategy": {
         "watcher_object.namespace": "watcher",
         "watcher_object.name": "StrategyPayload",
         "watcher_object.version": "1.0",
         "watcher_object.data": {
           "created_at": "2016-10-18T09:52:05Z",
           "deleted_at": null,
           "name": "TEST",
           "uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
           "parameters_spec": {},
           "display_name": "test strategy",
           "updated_at": null
         }
       },
       "updated_at": null
      }
    },
    "priority": "INFO",
    "message_id": "3984dc2b-8aef-462b-a220-8ae04237a56e",
    "timestamp": "2016-10-18 09:52:05.219414",
    "publisher_id": "infra-optim:node0"
  }

actionplan.cancel.end

{
  "event_type": "action_plan.execution.end",
  "payload": {
    "watcher_object.namespace": "watcher",
    "watcher_object.name": "ActionPlanCancelPayload",
    "watcher_object.version": "1.0",
    "watcher_object.data": {
      "created_at": "2016-10-18T09:52:05Z",
      "deleted_at": null,
      "audit_uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
      "audit": {
        "watcher_object.namespace": "watcher",
        "watcher_object.name": "TerseAuditPayload",
        "watcher_object.version": "1.0",
        "watcher_object.data": {
          "created_at": "2016-10-18T09:52:05Z",
          "deleted_at": null,
          "uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
          "goal_uuid": "bc830f84-8ae3-4fc6-8bc6-e3dd15e8b49a",
          "strategy_uuid": "75234dfe-87e3-4f11-a0e0-3c3305d86a39",
          "scope": [],
          "audit_type": "ONESHOT",
          "state": "SUCCEEDED",
          "parameters": {},
          "interval": null,
          "updated_at": null
        }
      },
      "uuid": "76be87bd-3422-43f9-93a0-e85a577e3061",
      "fault": null,
      "state": "CANCELLED",
      "global_efficacy": {},
      "strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
      "strategy": {
        "watcher_object.namespace": "watcher",
        "watcher_object.name": "StrategyPayload",
        "watcher_object.version": "1.0",
        "watcher_object.data": {
          "created_at": "2016-10-18T09:52:05Z",
          "deleted_at": null,
          "name": "TEST",
          "uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
          "parameters_spec": {},
          "display_name": "test strategy",
          "updated_at": null
        }
      },
      "updated_at": null
    }
  },
  "priority": "INFO",
  "message_id": "3984dc2b-8aef-462b-a220-8ae04237a56e",
  "timestamp": "2016-10-18 09:52:05.219414",
  "publisher_id": "infra-optim:node0"
}

actionplan.cancel.error

   {
     "event_type": "action_plan.cancel.error",
     "publisher_id": "infra-optim:node0",
     "priority": "ERROR",
     "message_id": "9a45c5ae-0e21-4300-8fa0-5555d52a66d9",
     "payload": {
       "watcher_object.version": "1.0",
       "watcher_object.namespace": "watcher",
       "watcher_object.name": "ActionPlanCancelPayload",
       "watcher_object.data": {
         "fault": {
           "watcher_object.version": "1.0",
           "watcher_object.namespace": "watcher",
           "watcher_object.name": "ExceptionPayload",
           "watcher_object.data": {
           "exception_message": "TEST",
           "module_name": "watcher.tests.notifications.test_action_plan_notification",
           "function_name": "test_send_action_plan_cancel_with_error",
           "exception": "WatcherException"
         }
       },
       "uuid": "76be87bd-3422-43f9-93a0-e85a577e3061",
       "created_at": "2016-10-18T09:52:05Z",
       "strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
       "strategy": {
         "watcher_object.version": "1.0",
         "watcher_object.namespace": "watcher",
         "watcher_object.name": "StrategyPayload",
         "watcher_object.data": {
           "uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
           "created_at": "2016-10-18T09:52:05Z",
           "name": "TEST",
           "updated_at": null,
           "display_name": "test strategy",
           "parameters_spec": {},
          "deleted_at": null
        }
      },
      "updated_at": null,
      "deleted_at": null,
      "audit_uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
      "audit": {
        "watcher_object.version": "1.0",
        "watcher_object.namespace": "watcher",
        "watcher_object.name": "TerseAuditPayload",
        "watcher_object.data": {
          "parameters": {},
          "uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
          "goal_uuid": "bc830f84-8ae3-4fc6-8bc6-e3dd15e8b49a",
          "strategy_uuid": "75234dfe-87e3-4f11-a0e0-3c3305d86a39",
          "created_at": "2016-10-18T09:52:05Z",
          "scope": [],
          "updated_at": null,
          "audit_type": "ONESHOT",
          "interval": null,
          "deleted_at": null,
          "state": "SUCCEEDED"
        }
      },
      "global_efficacy": {},
      "state": "CANCELLING"
    }
  },
  "timestamp": "2016-10-18 09:52:05.219414"
}

action.cancel.start

{
  "priority": "INFO",
  "payload": {
    "watcher_object.namespace": "watcher",
    "watcher_object.version": "1.0",
    "watcher_object.name": "ActionCancelPayload",
    "watcher_object.data": {
      "uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
      "input_parameters": {
        "param2": 2,
        "param1": 1
      },
      "fault": null,
      "created_at": "2016-10-18T09:52:05Z",
      "updated_at": null,
      "state": "CANCELLING",
      "action_plan": {
        "watcher_object.namespace": "watcher",
        "watcher_object.version": "1.0",
        "watcher_object.name": "TerseActionPlanPayload",
        "watcher_object.data": {
          "uuid": "76be87bd-3422-43f9-93a0-e85a577e3061",
          "global_efficacy": {},
          "created_at": "2016-10-18T09:52:05Z",
          "updated_at": null,
          "state": "CANCELLING",
          "audit_uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
          "strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
          "deleted_at": null
        }
      },
      "parents": [],
      "action_type": "nop",
      "deleted_at": null
    }
  },
  "event_type": "action.cancel.start",
  "publisher_id": "infra-optim:node0",
  "timestamp": "2017-01-01 00:00:00.000000",
  "message_id": "530b409c-9b6b-459b-8f08-f93dbfeb4d41"
}

action.cancel.end

{
  "priority": "INFO",
  "payload": {
    "watcher_object.namespace": "watcher",
    "watcher_object.version": "1.0",
    "watcher_object.name": "ActionCancelPayload",
    "watcher_object.data": {
      "uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
      "input_parameters": {
        "param2": 2,
        "param1": 1
      },
      "fault": null,
      "created_at": "2016-10-18T09:52:05Z",
      "updated_at": null,
      "state": "CANCELLED",
      "action_plan": {
        "watcher_object.namespace": "watcher",
        "watcher_object.version": "1.0",
        "watcher_object.name": "TerseActionPlanPayload",
        "watcher_object.data": {
          "uuid": "76be87bd-3422-43f9-93a0-e85a577e3061",
          "global_efficacy": {},
          "created_at": "2016-10-18T09:52:05Z",
          "updated_at": null,
          "state": "CANCELLING",
          "audit_uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
          "strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
          "deleted_at": null
        }
      },
      "parents": [],
      "action_type": "nop",
      "deleted_at": null
    }
  },
  "event_type": "action.cancel.end",
  "publisher_id": "infra-optim:node0",
  "timestamp": "2017-01-01 00:00:00.000000",
  "message_id": "530b409c-9b6b-459b-8f08-f93dbfeb4d41"
}

action.cancel.error

 {
   "priority": "ERROR",
   "payload": {
     "watcher_object.namespace": "watcher",
     "watcher_object.version": "1.0",
     "watcher_object.name": "ActionCancelPayload",
     "watcher_object.data": {
       "uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
       "input_parameters": {
         "param2": 2,
         "param1": 1
       },
       "fault": {
       "watcher_object.namespace": "watcher",
       "watcher_object.version": "1.0",
       "watcher_object.name": "ExceptionPayload",
       "watcher_object.data": {
         "module_name": "watcher.tests.notifications.test_action_notification",
         "exception": "WatcherException",
         "exception_message": "TEST",
         "function_name": "test_send_action_cancel_with_error"
       }
     },
     "created_at": "2016-10-18T09:52:05Z",
     "updated_at": null,
     "state": "FAILED",
     "action_plan": {
       "watcher_object.namespace": "watcher",
       "watcher_object.version": "1.0",
       "watcher_object.name": "TerseActionPlanPayload",
       "watcher_object.data": {
         "uuid": "76be87bd-3422-43f9-93a0-e85a577e3061",
         "global_efficacy": {},
         "created_at": "2016-10-18T09:52:05Z",
         "updated_at": null,
         "state": "CANCELLING",
         "audit_uuid": "10a47dd1-4874-4298-91cf-eff046dbdb8d",
         "strategy_uuid": "cb3d0b58-4415-4d90-b75b-1e96878730e3",
         "deleted_at": null
       }
     },
     "parents": [],
     "action_type": "nop",
     "deleted_at": null
   }
 },
 "event_type": "action.cancel.error",
 "publisher_id": "infra-optim:node0",
 "timestamp": "2017-01-01 00:00:00.000000",
 "message_id": "530b409c-9b6b-459b-8f08-f93dbfeb4d41"
}

备选方案

我们可以使用 actionplan.update 和 action.update 通知,但 actionplan cancel 是一个完整的操作,而不仅仅是状态更新,因此定义新的通知是更好的方法。

数据模型影响

无。

REST API 影响

无。

安全影响

无。

通知影响

此蓝图将实现以下通知

  • actionplan.cancel.start

  • actionplan.cancel.end

  • actionplan.cancel.error

  • action.cancel.start

  • action.cancel.end

  • action.cancel.error

其他最终用户影响

无。

性能影响

无。

其他部署者影响

无。

开发人员影响

无。

实现

负责人

主要负责人

adisky <aditi.s@nectechnologies.in>

工作项

实现“建议更改”部分中描述的通知。

依赖项

无。

测试

应为新通知添加单元测试。

文档影响

应在 Watcher 文档中添加一个通知示例。

参考资料