diff options
author | Jerry Flood <jflood@att.com> | 2018-11-08 12:25:29 -0500 |
---|---|---|
committer | Jerry Flood <jflood@att.com> | 2018-11-08 13:48:57 -0500 |
commit | 5b60091b06c7ba43700a44348ea0108213aa7d34 (patch) | |
tree | ad7e08af69b384df7f8addd72a6d31aedc17870a | |
parent | 2fee92d507c77890b093ad76d693eebc1f06be65 (diff) |
Create docs outline for CMSO
Issue-ID: OPTFRA-394
Change-Id: I55e1738c3397c71d73399ebf78cb42a3b441afec
Signed-off-by: Jerry Flood <jflood@att.com>
-rw-r--r-- | docs/index.rst | 35 | ||||
-rw-r--r-- | docs/sections/administration.rst | 6 | ||||
-rw-r--r-- | docs/sections/architecture.rst | 53 | ||||
-rw-r--r-- | docs/sections/configuration.rst | 37 | ||||
-rw-r--r-- | docs/sections/consumedapis.rst | 43 | ||||
-rw-r--r-- | docs/sections/example.rst | 17 | ||||
-rw-r--r-- | docs/sections/glossary.rst | 13 | ||||
-rw-r--r-- | docs/sections/humaninterfaces.rst | 6 | ||||
-rw-r--r-- | docs/sections/installation.rst | 23 | ||||
-rw-r--r-- | docs/sections/logging.rst | 15 | ||||
-rw-r--r-- | docs/sections/offeredapis.rst | 26 | ||||
-rw-r--r-- | docs/sections/release-notes.rst | 41 | ||||
-rw-r--r-- | docs/sections/swaggerdoc/oof-cmso-api.json | 1161 |
13 files changed, 1476 insertions, 0 deletions
diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 0000000..d4bb9f5 --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,35 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International License. + +Optimization Framework: Change Management Schedule Optimization + +============================================= + +OOF-CMSO is an optimizing service that allows for the scheduling of VNF change management +work flows to be executed at a time in the future. It enables a 3rd party client to provide +SO work flow requests for multiple VNFs to be executed within a provided change window. The schedule +optimizer is designed to determine a "conflict free" time within that change window that is suitable for +submitting the changes to SO. + +The initial release provides a skeletal implementation that runs in "standalone" mode, that is, the +intended interfaces are stubbed out (i,e, "loop-back mode"). + + * SO interface for dispatching the work flow and checking status + * Optimizer Interface for determining the "conflict free" change window (loop-back mode selects the start of change window provided the client) + +CMSO also models interfacing an external ticket/change management system to create, update, close/cancel tickets at relevant points in the CMSO flow. + +.. toctree:: + :maxdepth: 1 + + ./sections/architecture.rst + ./sections/offeredapis.rst + ./sections/consumedapis.rst + ./sections/logging.rst + ./sections/installation.rst + ./sections/configuration.rst + ./sections/administration.rst + ./sections/humaninterfaces.rst + ./sections/glossary.rst + Example CMSO Messages <./sections/example.rst> + ./sections/release-notes.rst + diff --git a/docs/sections/administration.rst b/docs/sections/administration.rst new file mode 100644 index 0000000..0650561 --- /dev/null +++ b/docs/sections/administration.rst @@ -0,0 +1,6 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International License. + +Administration +============================================= + + Administration - TBD
\ No newline at end of file diff --git a/docs/sections/architecture.rst b/docs/sections/architecture.rst new file mode 100644 index 0000000..2c5a8c8 --- /dev/null +++ b/docs/sections/architecture.rst @@ -0,0 +1,53 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International License. + +Architecture +============================================= + +Introduction +------------------ +OOF-CMSO is an optimizing service that allows for the scheduling of VNF change management +work flows to be executed at a time in the future. It enables a 3rd party client to provide +SO work flow requests for multiple VNFs to be executed within a provided change window. The schedule +optimizer is designed to determine a "conflict free" time within that change window that is suitable for +submitting the changes to SO. + +The initial release provides a skeletal implementation that runs in "standalone" mode, that is, the +intended interfaces are stubbed out (i,e, "loop-back mode"). + + * SO interface for dispatching the work flow and checking status + * Optimizer Interface for determining the "conflict free" change window (loop-back mode selects the start of change window provided the client) + +CMSO also models interfacing an external ticket/change management system to create, update, close/cancel tickets at relevant points in the CMSO flow. + +CMSO in Change Management Flow +-------------------------------------------- +CMSO is designed to be agnostic of the type of change management work flow that is to be scheduled in SO. A 3rd party +application will be responsible for preparing the change management request messages to be forwarded to SO. This data, +along with the list of targeted VNFs and the scheduling requirements are used by CMSO to create and ultimately execute +the schedule to dispathc the work to SO. + +The information provided to CMSO to accomplish the scheduling of the changes: + + * Work flow information + + * Name of the work flow + * Message(s) to be forwarded to SO to initiate the work flow + + * Schedule information + + * The list of targeted VNFs + * The desired change window + + * Earliest start date/time + * Latest end date/time + + * Expected duration of the work flow execution + * Number of concurrent work flows to be scheduled + +The design of CMSO is to ensure that the scheduling of the work flows will not conflict with other scheduled work. + + #. Ensure that asset(s) required to execute the work flow are available so that the work flow will be able to complete successfully + #. Ensure that the execution of teh work flow does not cause a network outage. + +TBD +----
\ No newline at end of file diff --git a/docs/sections/configuration.rst b/docs/sections/configuration.rst new file mode 100644 index 0000000..b394436 --- /dev/null +++ b/docs/sections/configuration.rst @@ -0,0 +1,37 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International License. + +Configuration +============================================= + +Executing CMSO in a standalone environment requires + + * MarisDB instance + * Maven + * Java JDK 1.8 + +Executing the Robot testsuite requires + + * Pyhton 2.7 + * Robot Framework + +Running the example +----------------------- + +TBD + +Running the Robot Framework ETE testsuite +---------------------------------------------- + +TBD + +Committing the Code +----------------------- + $ git commit -am "Initial proj struct" + + $ git review -s + + $ git commit -as --amend + +# scroll down 2 lines (above your Change-ID) insert "Issue-ID: {issue_id}" + + $ git review diff --git a/docs/sections/consumedapis.rst b/docs/sections/consumedapis.rst new file mode 100644 index 0000000..ce4a2fc --- /dev/null +++ b/docs/sections/consumedapis.rst @@ -0,0 +1,43 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International License. + +Consumed APIs +============================================= +The following are the dependencies for CMSO project. + + +SO (Dublin) +-------------------------------------------- + +CMSO is designed to invoke SO API to + + * Submit change management work flow requests + * Poll for status of submitted requests + + +Schedule Optimizer with Conflict Avoidance (Dublin) +------------------------------------------------------- + +There is currently no schedule optmizer that implements conflict avoidance. +Conflict avoidance requires: + + * Vertical topology assets relevant the availability of the VNF(s) under consideration. + + * Within ONAP topology information is available in A&AI + + * Horizontal topology assets ??? + + * Availability of the VNFs and the availability of the assets identified in the previous items. + This generally requires a change management + tracking/ticketing system system that identifies scheduled changes to all assets that contribute to the + functioning of the network. + + * There is no change management ticketing system within ONAP. CMSO itself may serve as such in a very limited capacity as it + tracks scheduled changes to VNFs. It does not track changes the all network assets which is necessarilty required for full + conflict avoidance. For ONAP Dublin, the conflict avoidance will necessarily be limited to VNF level conflict + checking using CMSO as the source of asset avaialability/unavailability. + + +Change Management Ticketing System (TBD) +----------------------------------------- + + diff --git a/docs/sections/example.rst b/docs/sections/example.rst new file mode 100644 index 0000000..749ebbc --- /dev/null +++ b/docs/sections/example.rst @@ -0,0 +1,17 @@ +Example CMSO Schedule Creation Templates +========================================= + + +Example 1 (TBD) +--------------- + +.. code:: json + + { + "scheduleId" : "<uuid>" + } + +Contact +-------------- + +Jerry Flood jflood@att.com
\ No newline at end of file diff --git a/docs/sections/glossary.rst b/docs/sections/glossary.rst new file mode 100644 index 0000000..3adce58 --- /dev/null +++ b/docs/sections/glossary.rst @@ -0,0 +1,13 @@ +Glossary +======== + ++-----------------------+-----------------------+ +| Term | Description | ++=======================+=======================+ +| **SO** | Service Orchestrator | ++-----------------------+-----------------------+ + +Contact +------- + +Jerry Flood jflood@att.com diff --git a/docs/sections/humaninterfaces.rst b/docs/sections/humaninterfaces.rst new file mode 100644 index 0000000..d33629a --- /dev/null +++ b/docs/sections/humaninterfaces.rst @@ -0,0 +1,6 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International License. + +Human Interfaces +============================================= + + OOF CMSO does not expose a human interface
\ No newline at end of file diff --git a/docs/sections/installation.rst b/docs/sections/installation.rst new file mode 100644 index 0000000..83167be --- /dev/null +++ b/docs/sections/installation.rst @@ -0,0 +1,23 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International License. + +Installation +============================================= + +Installing from the Source Code +------------------------------------ +Get CMSO seed code from the Linux Foundation Projects page + +.. code-block:: bash + + $ git clone https://gerrit.onap.org/r/a/optf/cmso + +There are 3 folders in the project + + * cmso-service - Java Maven project (cmso-service/pom.xml) + * cmso-database - Java Maven project (cmso-database/pom.xml) for managing database schema and migrations + + * Schema for the CMSO MariaDB database is in cmso-database/src/main/resources/cmso-dbchangelog/onap-cmso-v1-schema.sql + + * cmso-robot - Rabot framework project for used for unit and functional testing. See the project README for setup instructions. + + * Note that CMSO was developed using Robot framework as the primary unit testing vehicle. diff --git a/docs/sections/logging.rst b/docs/sections/logging.rst new file mode 100644 index 0000000..dd248ef --- /dev/null +++ b/docs/sections/logging.rst @@ -0,0 +1,15 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International License. + +Logging +============================================= + +CMSO uses the EELF logging package and produces the following logs + + * error + * audit + * metric + * application. + +The log statements follow the following format (values default to preset values when missing): + + diff --git a/docs/sections/offeredapis.rst b/docs/sections/offeredapis.rst new file mode 100644 index 0000000..76165e9 --- /dev/null +++ b/docs/sections/offeredapis.rst @@ -0,0 +1,26 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International License. +.. http://creativecommons.org/licenses/by/4.0 + +Offered APIs +============================================= + +This document describes the CMSO API, provided by the Change Management Schedule Optimizer (CMSO) + + +To view API documentation in the interactive swagger UI download the following and +paste into the swagger tool here: https://editor.swagger.io + +:download:`oof-cmso-api.json <./swaggerdoc/oof-cmso-api.json>` + +.. swaggerv2doc:: ./swaggerdoc/oof-cmso-api.json + +.. code:: json + + { + } + +.. code:: json + + { + } + diff --git a/docs/sections/release-notes.rst b/docs/sections/release-notes.rst new file mode 100644 index 0000000..4587beb --- /dev/null +++ b/docs/sections/release-notes.rst @@ -0,0 +1,41 @@ +.. + This work is licensed under a Creative Commons Attribution 4.0 + International License. + +============= +Release Notes +============= + + +Version: 1.0.1 +-------------- + +:Release Date: 2018-XX-XX (Casablanca) + +**New Project** + +**Known Issues** + + * [OPTFRA-386] - Integrate with SO + + * [OPTFRA-387] - Add conflict avoidance optimizaation to schedule creation + + +**Security Issues** + + * [OPTFRA-397] - Upgrade Spring Boot release + + * [OPTFRA-390] - Support AAF authentication/authorization + + * [OPTFRA-391] - Implement HTTPS on incoming requests + + + +**Upgrade Notes** +None. Initial release R3 Casablanca. No previous versions + +**Deprecation Notes** +None. Initial release R3 Casablanca. No previous versions + +**Other** +None
\ No newline at end of file diff --git a/docs/sections/swaggerdoc/oof-cmso-api.json b/docs/sections/swaggerdoc/oof-cmso-api.json new file mode 100644 index 0000000..751b276 --- /dev/null +++ b/docs/sections/swaggerdoc/oof-cmso-api.json @@ -0,0 +1,1161 @@ +{ + "swagger" : "2.0", + "info" : { + "version" : "1.0.0-SNAPSHOT", + "title" : "cmso-service" + }, + "basePath" : "/cmso", + "paths" : { + "/{apiVersion}/admin/{id}" : { + "get" : { + "summary" : "", + "description" : "Returns encrypted value of id.", + "operationId" : "exec", + "produces" : [ "text/plain" ], + "parameters" : [ { + "name" : "apiVersion", + "in" : "path", + "description" : "v1|v2", + "required" : true, + "type" : "string", + "default" : "v1" + }, { + "name" : "id", + "in" : "path", + "description" : "Identifier", + "required" : true, + "type" : "array", + "items" : { + "type" : "string" + }, + "collectionFormat" : "csv" + } ], + "responses" : { + "200" : { + "description" : "OK", + "schema" : { + "type" : "string" + } + }, + "400" : { + "description" : "Request failed" + } + } + } + }, + "/{apiVersion}/health" : { + "get" : { + "summary" : "", + "description" : "Returns health status of server.", + "operationId" : "healthCheck", + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "apiVersion", + "in" : "path", + "description" : "v1", + "required" : true, + "type" : "string", + "default" : "v1" + }, { + "name" : "checkInterfaces", + "in" : "query", + "description" : "Check Interfaces", + "required" : false, + "type" : "array", + "items" : { + "type" : "boolean", + "default" : true + }, + "collectionFormat" : "multi" + } ], + "responses" : { + "200" : { + "description" : "OK", + "schema" : { + "$ref" : "#/definitions/HealthCheckMessage" + } + }, + "400" : { + "description" : "Not healthy", + "schema" : { + "$ref" : "#/definitions/HealthCheckMessage" + } + } + } + } + }, + "/{apiVersion}/optimizerCallback" : { + "post" : { + "summary" : "", + "description" : "Processes optimizer results callback to a Pending Optimization schedule.", + "operationId" : "sniroCallback", + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "apiVersion", + "in" : "path", + "description" : "v1", + "required" : true, + "type" : "string", + "default" : "v1" + }, { + "in" : "body", + "name" : "body", + "description" : "Return schedules > lastScheduleId", + "required" : false, + "schema" : { + "$ref" : "#/definitions/Response from schedule optimizer" + } + } ], + "responses" : { + "200" : { + "description" : "OK" + }, + "500" : { + "description" : "Unexpected Runtime error" + } + } + } + }, + "/{apiVersion}/schedules" : { + "get" : { + "summary" : "", + "description" : "Returns a list of Scheduler Requests based upon the filter criteria.", + "operationId" : "searchScheduleRequests", + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "apiVersion", + "in" : "path", + "description" : "v1", + "required" : true, + "type" : "string", + "default" : "v1" + }, { + "name" : "includeDetails", + "in" : "query", + "description" : "Include details", + "required" : false, + "type" : "boolean", + "default" : false + }, { + "name" : "scheduleId", + "in" : "query", + "description" : "Schedule identifier", + "required" : false, + "type" : "array", + "items" : { + "type" : "string" + }, + "collectionFormat" : "multi" + }, { + "name" : "scheduleName", + "in" : "query", + "description" : "Schedule name", + "required" : false, + "type" : "array", + "items" : { + "type" : "string" + }, + "collectionFormat" : "multi" + }, { + "name" : "userId", + "in" : "query", + "description" : "SCheduler creator User id of ", + "required" : false, + "type" : "array", + "items" : { + "type" : "string" + }, + "collectionFormat" : "multi" + }, { + "name" : "status", + "in" : "query", + "description" : "Schedule status", + "required" : false, + "type" : "array", + "items" : { + "type" : "string" + }, + "collectionFormat" : "multi" + }, { + "name" : "createDateTime", + "in" : "query", + "description" : "Creation date and time (<low date>[,<hi date>])", + "required" : false, + "type" : "array", + "items" : { + "type" : "string" + }, + "collectionFormat" : "multi" + }, { + "name" : "optimizerStatus", + "in" : "query", + "description" : "Optimizer status", + "required" : false, + "type" : "array", + "items" : { + "type" : "string" + }, + "collectionFormat" : "multi" + }, { + "name" : "WorkflowName", + "in" : "query", + "description" : "Workflow", + "required" : false, + "type" : "array", + "items" : { + "type" : "string" + }, + "collectionFormat" : "multi" + } ], + "responses" : { + "200" : { + "description" : "OK", + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/Schedule" + } + } + }, + "404" : { + "description" : "No records found", + "schema" : { + "$ref" : "#/definitions/CMSRequestError" + } + }, + "500" : { + "description" : "Unexpected Runtime error" + } + } + } + }, + "/{apiVersion}/schedules/scheduleDetails" : { + "get" : { + "summary" : "", + "description" : "Returns a list of Schedule request details based upon the filter criteria.", + "operationId" : "searchScheduleRequestDetails", + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "apiVersion", + "in" : "path", + "description" : "v1", + "required" : true, + "type" : "string", + "default" : "v1" + }, { + "name" : "request.scheduleId", + "in" : "query", + "description" : "Schedule identifier", + "required" : false, + "type" : "array", + "items" : { + "type" : "string" + }, + "collectionFormat" : "multi" + }, { + "name" : "request.scheduleName", + "in" : "query", + "description" : "Schedule name", + "required" : false, + "type" : "array", + "items" : { + "type" : "string" + }, + "collectionFormat" : "multi" + }, { + "name" : "request.userId", + "in" : "query", + "description" : "Scheduler creator User id of ", + "required" : false, + "type" : "array", + "items" : { + "type" : "string" + }, + "collectionFormat" : "multi" + }, { + "name" : "request.status", + "in" : "query", + "description" : "Schedule status", + "required" : false, + "type" : "array", + "items" : { + "type" : "string" + }, + "collectionFormat" : "multi" + }, { + "name" : "request.createDateTime", + "in" : "query", + "description" : "Creation date and time (<low date>[,<hi date>])", + "required" : false, + "type" : "array", + "items" : { + "type" : "string" + }, + "collectionFormat" : "multi" + }, { + "name" : "request.optimizerStatus", + "in" : "query", + "description" : "Optimizer status", + "required" : false, + "type" : "array", + "items" : { + "type" : "string" + }, + "collectionFormat" : "multi" + }, { + "name" : "request.approvalUserId", + "in" : "query", + "description" : "Request Approval user id", + "required" : false, + "type" : "array", + "items" : { + "type" : "string" + }, + "collectionFormat" : "multi" + }, { + "name" : "request.approvalStatus", + "in" : "query", + "description" : "Request Approval status", + "required" : false, + "type" : "array", + "items" : { + "type" : "string" + }, + "collectionFormat" : "multi" + }, { + "name" : "request.approvalType", + "in" : "query", + "description" : "Request Approval type", + "required" : false, + "type" : "array", + "items" : { + "type" : "string" + }, + "collectionFormat" : "multi" + }, { + "name" : "WorkflowName", + "in" : "query", + "description" : "Workflow", + "required" : false, + "type" : "array", + "items" : { + "type" : "string" + }, + "collectionFormat" : "multi" + }, { + "name" : "vnfName", + "in" : "query", + "description" : "VNF Name", + "required" : false, + "type" : "array", + "items" : { + "type" : "string" + }, + "collectionFormat" : "multi" + }, { + "name" : "vnfId", + "in" : "query", + "description" : "VNF Id", + "required" : false, + "type" : "array", + "items" : { + "type" : "string" + }, + "collectionFormat" : "multi" + }, { + "name" : "vnfStatus", + "in" : "query", + "description" : "VNF Status", + "required" : false, + "type" : "array", + "items" : { + "type" : "string" + }, + "collectionFormat" : "multi" + }, { + "name" : "startTime", + "in" : "query", + "description" : "Start time <low>,<high>", + "required" : false, + "type" : "array", + "items" : { + "type" : "string" + }, + "collectionFormat" : "multi" + }, { + "name" : "finishTime", + "in" : "query", + "description" : "Finish time <low>,<high>", + "required" : false, + "type" : "array", + "items" : { + "type" : "string" + }, + "collectionFormat" : "multi" + }, { + "name" : "lastInstanceTime", + "in" : "query", + "description" : "Last instance start time <low>,<high>", + "required" : false, + "type" : "array", + "items" : { + "type" : "string" + }, + "collectionFormat" : "multi" + }, { + "name" : "tmChangeId", + "in" : "query", + "description" : "TM Change Ticket Change Id", + "required" : false, + "type" : "array", + "items" : { + "type" : "string" + }, + "collectionFormat" : "multi" + }, { + "name" : "maxSchedules", + "in" : "query", + "description" : "Maximum number of schedules to return", + "required" : false, + "type" : "integer", + "format" : "int32" + }, { + "name" : "lastScheduleId", + "in" : "query", + "description" : "Return schedules > lastScheduleId", + "required" : false, + "type" : "string" + }, { + "name" : "request.concurrencyLimit", + "in" : "query", + "description" : "Return concurrencyLimit", + "required" : false, + "type" : "integer", + "format" : "int32" + } ], + "responses" : { + "200" : { + "description" : "OK", + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/CmDetailsMessage" + } + } + }, + "404" : { + "description" : "No records found", + "schema" : { + "$ref" : "#/definitions/CMSRequestError" + } + }, + "500" : { + "description" : "Unexpected Runtime error" + } + } + } + }, + "/{apiVersion}/schedules/{scheduleId}" : { + "get" : { + "summary" : "", + "description" : "Retrieve the schedule request for scheduleId", + "operationId" : "getScheduleRequestInfo", + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "apiVersion", + "in" : "path", + "description" : "v1", + "required" : true, + "type" : "string", + "default" : "v1" + }, { + "name" : "scheduleId", + "in" : "path", + "description" : "Schedule id to uniquely identify the schedule info being retrieved.", + "required" : true, + "type" : "string" + } ], + "responses" : { + "200" : { + "description" : "OK", + "schema" : { + "$ref" : "#/definitions/Schedule" + } + }, + "404" : { + "description" : "No record found" + }, + "500" : { + "description" : "Unexpected Runtime error" + } + } + }, + "post" : { + "summary" : "", + "description" : "Creates a schedule request for scheduleId", + "operationId" : "createScheduleRequest", + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "apiVersion", + "in" : "path", + "description" : "v1", + "required" : true, + "type" : "string", + "default" : "v1" + }, { + "name" : "scheduleId", + "in" : "path", + "description" : "Schedule id to uniquely identify the schedule request being created.", + "required" : true, + "type" : "string" + }, { + "in" : "body", + "name" : "body", + "description" : "Data for creating a schedule request for the given schedule id", + "required" : false, + "schema" : { + "$ref" : "#/definitions/CMSMessage" + } + } ], + "responses" : { + "202" : { + "description" : "Schedule request accepted for optimization." + }, + "409" : { + "description" : "Schedule request already exists for this schedule id.", + "schema" : { + "$ref" : "#/definitions/CMSRequestError" + } + }, + "500" : { + "description" : "Unexpected Runtime error" + } + } + }, + "delete" : { + "summary" : "", + "description" : "Cancels the schedule request for scheduleId", + "operationId" : "deleteScheduleRequest", + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "apiVersion", + "in" : "path", + "description" : "v1", + "required" : true, + "type" : "string", + "default" : "v1" + }, { + "name" : "scheduleId", + "in" : "path", + "description" : "Schedule id to uniquely identify the schedule request being deleted.", + "required" : true, + "type" : "string" + } ], + "responses" : { + "204" : { + "description" : "Delete successful" + }, + "404" : { + "description" : "No record found", + "schema" : { + "$ref" : "#/definitions/CMSRequestError" + } + }, + "500" : { + "description" : "Unexpected Runtime error" + } + } + } + }, + "/{apiVersion}/schedules/{scheduleId}/approvals" : { + "post" : { + "summary" : "", + "description" : "Adds an accept/reject approval status to the schedule request identified by scheduleId", + "operationId" : "approveScheduleRequest", + "produces" : [ "application/json" ], + "parameters" : [ { + "name" : "apiVersion", + "in" : "path", + "description" : "v1", + "required" : true, + "type" : "string", + "default" : "v1" + }, { + "name" : "scheduleId", + "in" : "path", + "description" : "Schedule id to uniquely identify the schedule request being accepted or rejected.", + "required" : true, + "type" : "string" + }, { + "in" : "body", + "name" : "body", + "description" : "Accept or reject approval message", + "required" : false, + "schema" : { + "$ref" : "#/definitions/Schedule Approval Request" + } + } ], + "responses" : { + "200" : { + "description" : "OK" + }, + "404" : { + "description" : "No record found" + }, + "500" : { + "description" : "Unexpected Runtime error" + } + } + } + } + }, + "definitions" : { + "CMSMessage" : { + "type" : "object", + "properties" : { + "domain" : { + "type" : "string", + "description" : "Schedule domain : ChangeManagement" + }, + "scheduleId" : { + "type" : "string", + "description" : "Schedule id that must be unique within the domain. Use of UUID is highly recommended." + }, + "scheduleName" : { + "type" : "string", + "description" : "User provided name of the schedule (deaults to scheduleId" + }, + "userId" : { + "type" : "string", + "description" : "ATTUID of the user requesting the schedule." + }, + "domainData" : { + "type" : "array", + "description" : "Domain data as name value/pairs. (i.e. CallbackUrl, CallbackData, WorkflowName)", + "items" : { + "type" : "object", + "additionalProperties" : { + "type" : "string" + } + } + }, + "schedulingInfo" : { + "$ref" : "#/definitions/Change Management Scheduling Info" + } + } + }, + "CMSRequestError" : { + "type" : "object", + "properties" : { + "requestError" : { + "$ref" : "#/definitions/RequestError" + } + } + }, + "CMSchedule" : { + "type" : "object", + "properties" : { + "groupId" : { + "type" : "string" + }, + "startTime" : { + "type" : "string" + }, + "finishTime" : { + "type" : "string" + }, + "latestInstanceStartTime" : { + "type" : "string" + }, + "node" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + } + }, + "Change Management Group" : { + "type" : "object", + "properties" : { + "finishTime" : { + "type" : "string", + "description" : "Date/time by which all of the workflows should be completed." + }, + "groupId" : { + "type" : "string", + "description" : "Name of the group of VNFs to be scheduled" + }, + "lastInstanceStartTime" : { + "type" : "string", + "description" : "The latest date/time by which a workflow is to be started." + }, + "startTime" : { + "type" : "string", + "description" : "The date/time when workflows are to be started." + }, + "additionalDurationInSecs" : { + "type" : "integer", + "format" : "int32", + "description" : "Time added to the workflow interval to allow for rollback in case of failure." + }, + "concurrencyLimit" : { + "type" : "integer", + "format" : "int32", + "description" : "The maximum number of workflows that should be started simultaneiously." + }, + "normalDurationInSecs" : { + "type" : "integer", + "format" : "int32", + "description" : "Expected duration of a successful workflow execution." + }, + "policyId" : { + "type" : "string", + "description" : "The name of the schedule optimization policy used by the change management schedule optimizer." + }, + "changeManagementSchedules" : { + "type" : "array", + "description" : "The list of VNF workflows scheduled.", + "items" : { + "$ref" : "#/definitions/Change Management Schedule" + } + } + }, + "description" : "Scheduling critirea for a group of VNFs" + }, + "Change Management Schedule" : { + "type" : "object", + "properties" : { + "tmChangeId" : { + "type" : "string", + "description" : "TM Change Id" + }, + "tmStatus" : { + "type" : "string", + "description" : "TM ticket status", + "enum" : [ "<null>", "Closed" ] + }, + "tmApprovalStatus" : { + "type" : "string", + "description" : "TM ticket approval status", + "enum" : [ "<null>", "Approved" ] + }, + "finishTime" : { + "type" : "string", + "description" : "Anticipated time of completion based upon start time and duration" + }, + "startTime" : { + "type" : "string", + "description" : "Start time of this VNF workflow assigned by Scheduler based upon the group start time returned by the optimizer and concurrency." + }, + "status" : { + "type" : "string", + "description" : "Status of the VNF.", + "enum" : [ "See CMSStatusEnum" ] + }, + "vnfName" : { + "type" : "string", + "description" : "Name of the VNF." + }, + "dispatchTime" : { + "type" : "string", + "description" : "Actual time the VNF workflow was dispatched." + }, + "executionCompletedTime" : { + "type" : "string", + "description" : "Actual time the VNF workflow execution was completed as reported by MSO." + }, + "msoRequestId" : { + "type" : "string", + "description" : "MSO Request ID of the workflow returned at dispatch time." + }, + "msoStatus" : { + "type" : "string", + "description" : "Final MSO status.", + "enum" : [ "COMPLETED", "FAILED" ] + }, + "msoMessage" : { + "type" : "string", + "description" : "MSO final status message." + }, + "statusMessage" : { + "type" : "string", + "description" : "Scheduler status message." + }, + "msoTime" : { + "type" : "string", + "description" : "Time of last poll for MSO status." + } + }, + "description" : "VNF details for Change Management Schedule" + }, + "Change Management Scheduling Info" : { + "type" : "object", + "properties" : { + "normalDurationInSeconds" : { + "type" : "integer", + "format" : "int32", + "description" : "Expected duration (in seconds) of a successful execution of a single VNF change." + }, + "additionalDurationInSeconds" : { + "type" : "integer", + "format" : "int32", + "description" : "Additional duration (in seconds) to be added to support backout of an unsuccessful VNF change." + }, + "concurrencyLimit" : { + "type" : "integer", + "format" : "int32", + "description" : "Maximum number of VNF changes to schedule concurrently" + }, + "policyId" : { + "type" : "string", + "description" : "Name of schedule optimization policy used by the change management cmso optimizer to determine available time slot" + }, + "vnfDetails" : { + "type" : "array", + "description" : "Lists of the VNFs to be changed and the desired change windows", + "items" : { + "$ref" : "#/definitions/VNF Details" + } + } + }, + "description" : "Details of schedule being requested" + }, + "Change Window" : { + "type" : "object", + "properties" : { + "startTime" : { + "type" : "string", + "description" : "Earliest time that a set of changes may begin." + }, + "endTime" : { + "type" : "string", + "description" : "Latest time by which all changes must be completed" + } + }, + "description" : "Time window within which the scheduler optimizer can schedule the changes for the group of NVFs" + }, + "CmDetailsMessage" : { + "type" : "object", + "properties" : { + "vnfName" : { + "type" : "string", + "description" : "Name of the VNF." + }, + "status" : { + "type" : "string", + "description" : "Status of the VNF.", + "enum" : [ "See CMSStatusEnum" ] + }, + "tmChangeId" : { + "type" : "string", + "description" : "TM Change Id" + }, + "tmStatus" : { + "type" : "string", + "description" : "TM ticket status", + "enum" : [ "<null>", "Closed" ] + }, + "tmApprovalStatus" : { + "type" : "string", + "description" : "TM ticket approval status", + "enum" : [ "<null>", "Approved" ] + }, + "startTime" : { + "type" : "string", + "description" : "Start time of this VNF workflow assigned by Scheduler based upon the group start time returned by the optimizer and concurrency." + }, + "finishTime" : { + "type" : "string", + "description" : "Anticipated time of completion based upon start time and duration" + }, + "groupId" : { + "type" : "string", + "description" : "Name of the group of VNFs to be scheduled" + }, + "lastInstanceStartTime" : { + "type" : "string", + "description" : "The latest date/time by which a workflow is to be started." + }, + "policyId" : { + "type" : "string", + "description" : "Time of last poll for MSO status." + }, + "dispatchTime" : { + "type" : "string", + "description" : "Actual time the VNF workflow was dispatched." + }, + "executionCompletedTime" : { + "type" : "string", + "description" : "Actual time the VNF workflow execution was completed as reported by MSO." + }, + "msoRequestId" : { + "type" : "string", + "description" : "MSO Request ID of the workflow returned at dispatch time." + }, + "msoStatus" : { + "type" : "string", + "description" : "Final MSO status.", + "enum" : [ "COMPLETED", "FAILED" ] + }, + "msoMessage" : { + "type" : "string", + "description" : "MSO final status message." + }, + "statusMessage" : { + "type" : "string", + "description" : "Scheduler status message." + }, + "msoTime" : { + "type" : "string", + "description" : "Time of last poll for MSO status." + }, + "scheduleRequest" : { + "$ref" : "#/definitions/Schedule" + }, + "approvals" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/Schedule Approval Request" + } + }, + "schedulesId" : { + "type" : "integer", + "format" : "int32" + } + } + }, + "Domain data" : { + "type" : "object", + "properties" : { + "name" : { + "type" : "string" + }, + "value" : { + "type" : "string" + } + }, + "description" : "Domain specific data represented as name/value pairs" + }, + "HealthCheckComponent" : { + "type" : "object", + "properties" : { + "name" : { + "type" : "string" + }, + "url" : { + "type" : "string" + }, + "status" : { + "type" : "string" + }, + "healthy" : { + "type" : "boolean" + } + } + }, + "HealthCheckMessage" : { + "type" : "object", + "properties" : { + "healthy" : { + "type" : "boolean" + }, + "buildInfo" : { + "type" : "string" + }, + "currentTime" : { + "type" : "string" + }, + "hostname" : { + "type" : "string" + }, + "components" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/HealthCheckComponent" + } + } + } + }, + "RequestError" : { + "type" : "object", + "properties" : { + "messageId" : { + "type" : "string" + }, + "text" : { + "type" : "string" + }, + "variables" : { + "type" : "array", + "items" : { + "type" : "string" + } + } + } + }, + "Response from schedule optimizer" : { + "type" : "object", + "properties" : { + "transactionId" : { + "type" : "string", + "description" : "Unique id of optimization request." + }, + "scheduleId" : { + "type" : "string", + "description" : "Schedule id for which the optimization request was executed." + }, + "requestState" : { + "type" : "string", + "description" : "State of the request as reported by the optimizer." + }, + "status" : { + "type" : "string", + "description" : "Status of the request." + }, + "description" : { + "type" : "string", + "description" : "Description of the request status." + }, + "schedule" : { + "type" : "array", + "description" : "List of schedules returned, one per group. Only 1 group supported at this time.", + "items" : { + "$ref" : "#/definitions/CMSchedule" + } + } + }, + "description" : "Asynchronous response to schedule oprimizer request." + }, + "Schedule" : { + "type" : "object", + "properties" : { + "createDateTime" : { + "type" : "string", + "description" : "Date/time schedule was created." + }, + "optimizerDateTime" : { + "type" : "string" + }, + "optimizerMessage" : { + "type" : "string" + }, + "optimizerStatus" : { + "type" : "string" + }, + "optimizerReturnDateTime" : { + "type" : "string" + }, + "optimizerTransactionId" : { + "type" : "string" + }, + "schedule" : { + "type" : "string" + }, + "scheduleName" : { + "type" : "string" + }, + "scheduleInfo" : { + "type" : "string" + }, + "status" : { + "type" : "string" + }, + "userId" : { + "type" : "string" + }, + "domain" : { + "type" : "string" + }, + "deleteDateTime" : { + "type" : "string" + }, + "domainData" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/Domain data" + } + }, + "scheduleApprovals" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/Schedule Approval" + } + }, + "groups" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/Change Management Group" + } + } + } + }, + "Schedule Approval" : { + "type" : "object", + "properties" : { + "approvalDateTime" : { + "type" : "string", + "description" : "Date/time schedule time slot was accepted/rejected." + }, + "status" : { + "type" : "string", + "description" : "Approval status.", + "enum" : [ "Accepted", "Rejected" ] + }, + "userId" : { + "type" : "string", + "description" : "ATTUID of the user accepting/rejecting the time slot." + } + }, + "description" : "Details of a schedule approval/rejection." + }, + "Schedule Approval Request" : { + "type" : "object", + "properties" : { + "approvalUserId" : { + "type" : "string", + "description" : "ATTUID of the user accepting/rejecting the time slot." + }, + "approvalStatus" : { + "type" : "string", + "description" : "Approval status.", + "enum" : [ "Accepted", "Rejected" ] + }, + "approvalType" : { + "type" : "string", + "description" : "Type of approval.", + "enum" : [ "Tier 2" ] + }, + "approvalDateTime" : { + "type" : "string", + "format" : "date-time" + } + }, + "description" : "Request to accept or reject an optimized time slot." + }, + "VNF Details" : { + "type" : "object", + "properties" : { + "groupId" : { + "type" : "string", + "description" : "Name of the list of VNFs to be changed as a group" + }, + "node" : { + "type" : "array", + "description" : "Lists of the VNF names to be changed", + "items" : { + "type" : "string" + } + }, + "changeWindow" : { + "type" : "array", + "description" : "Lists of desired change windows that the optimizer can select from. (Only 1 change window supported at this time)", + "items" : { + "$ref" : "#/definitions/Change Window" + } + } + }, + "description" : "Details and scheduling criteria for the VNFs to be changed." + } + } +}
\ No newline at end of file |