Jump to: navigation, search

Difference between revisions of "Manila/design/manila-liberty-consistency-groups/api-schema"

(Created page with "GET /consistencygroups Response Schema: { "$schema": "http://json-schema.org/draft-04/schema#", "title": "Consistency Group (CG)", "description": "A resource repr...")
 
m (Detailed CG)
 
(33 intermediate revisions by 2 users not shown)
Line 1: Line 1:
GET /consistencygroups
+
= Resource schemas=
  
Response Schema:
+
== Simple CG ==
{
+
{
 
     "$schema": "http://json-schema.org/draft-04/schema#",
 
     "$schema": "http://json-schema.org/draft-04/schema#",
 
     "title": "Consistency Group (CG)",
 
     "title": "Consistency Group (CG)",
Line 18: Line 18:
 
     },
 
     },
 
     "required": ["id", "name"]
 
     "required": ["id", "name"]
}
+
}
  
GET /consistencygroups/detail
+
== Detailed CG ==
  Response:
+
 
{
+
  {
 
     "$schema": "http://json-schema.org/draft-04/schema#",
 
     "$schema": "http://json-schema.org/draft-04/schema#",
 
     "title": "Consistency Group (CG)",
 
     "title": "Consistency Group (CG)",
Line 30: Line 30:
 
         "id": {
 
         "id": {
 
             "description": "The unique identifier for a product",
 
             "description": "The unique identifier for a product",
             "type": "integer",
+
             "type": "string",
 +
            'maxLength': 36,
 +
            'pattern': ('^([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}'
 +
                        '-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}$'),
 +
        },
 +
        "share_network_id": {
 +
            "description": "The share network to provision the CG and all of it's shares into",
 +
            "type": "string",
 +
            'maxLength': 36,
 +
            'pattern': ('^([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}'
 +
                        '-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}$'),
 +
        },
 +
        "share_server_id": {
 +
            "description": "The share server on which the CG is provisioned, visible only to admins",
 +
            "type": "string",
 +
            'maxLength': 36,
 
             'pattern': ('^([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}'
 
             'pattern': ('^([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}'
 
                         '-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}$'),
 
                         '-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}$'),
Line 50: Line 65:
 
             "description": "Status of the CG",
 
             "description": "Status of the CG",
 
             "type": "string",
 
             "type": "string",
             "enum": ["ACTIVE", "ERROR"]
+
             "enum": ["creating", "available", "deleting", "error"]
 
         },
 
         },
 
         "project_id": {
 
         "project_id": {
Line 66: Line 81:
 
         "share_types": {
 
         "share_types": {
 
             "description": "The share types that shares in the CG are allowed to be a part of",
 
             "description": "The share types that shares in the CG are allowed to be a part of",
 +
            "type": "array",
 +
            "items": {
 +
                "type": "string"
 +
            },
 +
        },
 +
    },
 +
    "required": ["id", "name", "description", "created_at", "status", "project_id", "host"]
 +
}
 +
 +
== Simple CG Snapshot ==
 +
{
 +
    "$schema": "http://json-schema.org/draft-04/schema#",
 +
    "title": "Consistency Group Snapshot",
 +
    "description": "A resource representing a snapshot of a group of shares",
 +
    "type": "object",
 +
    "properties": {
 +
        "id": {
 +
            "description": "The unique identifier for a product",
 +
            "type": "string",
 +
            'pattern': ('^([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}'
 +
                        '-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}$'),
 +
        },
 +
        "name": {
 +
            "description": "A non-unique name for a CGsnapshot",
 +
            "type": "string"
 +
        },
 +
    },
 +
    "required": ["id", "name"]
 +
}
 +
 +
== Detailed CG Snapshot ==
 +
 +
{
 +
    "$schema": "http://json-schema.org/draft-04/schema#",
 +
    "title": "Consistency Group Snapshot",
 +
    "description": "A resource representing a snapshot of a group of shares",
 +
    "type": "object",
 +
    "properties": {
 +
        "id": {
 +
            "description": "The unique identifier for a product",
 +
            "type": "string",
 +
            'pattern': ('^([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}'
 +
                        '-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}$'),
 +
        },
 +
        "name": {
 +
            "description": "A non-unique name for a CG snapshot",
 +
            "type": "string",
 +
            'maxLength': 255,
 +
        },
 +
        "description": {
 +
            "description": "A short description of the CG snapshot",
 +
            "type": "string"
 +
        },
 +
        "created_at": {
 +
            "description": "The time at which the CG snapshot was created",
 +
            "type": "string"
 +
        },
 +
        "status": {
 +
            "description": "Status of the CG snapshot",
 +
            "type": "string",
 +
            "enum": ["creating", "available", "deleting", "error"]
 +
        },
 +
        "project_id": {
 +
            "description": "The owner of the CG snapshot",
 +
            "type": "string"
 +
        },
 +
        "consistency_group_id": {
 +
            "description": "The uuid of the consistency group from which this CG snapshot was created.",
 +
            "type": ['null', 'string'],
 +
            'pattern': ('^([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}'
 +
                        '-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}$'),
 +
        },
 +
    },
 +
    "required": ["id", "name", "description", "created_at", "status", "project_id"]
 +
}
 +
 +
== CG Snapshot member ==
 +
 +
{
 +
    "$schema": "http://json-schema.org/draft-04/schema#",
 +
    "title": "Consistency Group Snapshot Member",
 +
    "description": "A resource representing a member of a CGSnapshot",
 +
    "type": "object",
 +
    "properties": {
 +
        "id": {
 +
            "description": "The unique identifier for a product",
 +
            "type": "string",
 +
            'pattern': ('^([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}'
 +
                        '-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}$'),
 +
        },
 +
        "cgsnapshot_id": {
 +
            "description": "The unique identifier for the parent cg_snapshot",
 +
            "type": "string",
 +
            'pattern': ('^([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}'
 +
                        '-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}$'),
 +
        },
 +
        "share_id": {
 +
            "description": "The unique identifier for the share this snapshot was created from.",
 +
            "type": "string",
 +
            'pattern': ('^([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}'
 +
                        '-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}$'),
 +
        },
 +
        "share_type_id": {
 +
            "description": "The unique identifier for the share_type of the share this snapshot was created from.",
 +
            "type": "string",
 +
            'pattern': ('^([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}'
 +
                        '-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}$'),
 +
        },
 +
        "size": {
 +
            "description": "The storage size of this snapshot",
 +
            "type": "integer",
 +
        },
 +
        "share_protocol": {
 +
            "description": "The share protocol of the parent share",
 +
            "type": "string",
 +
        },
 +
    },
 +
}
 +
 +
= Request schemas =
 +
 +
== POST /os-consistency-groups ==
 +
{ "consistency_group" {
 +
    "$schema": "http://json-schema.org/draft-04/schema#",
 +
    "title": "Consistency Group (CG)",
 +
    "description": "A resource representing a group of shares that can be snapshotted in unison",
 +
    "type": "object",
 +
    "properties": {
 +
        "name": {
 +
            "description": "A non-unique name for a CG",
 +
            "type": "string",
 +
            'maxLength': 255,
 +
        },
 +
        "description": {
 +
            "description": "A short description of the CG",
 +
            "type": "string"
 +
        },
 +
        "source_cgsnapshot_id": {
 +
            "description": "The uuid of the cgsnapshot from which this CG was created. Cannot be supplied when 'share_types' is provided.",
 +
            "type": ['null', 'string'],
 +
        },
 +
        "share_types": {
 +
            "description": "The share types that shares in the CG are allowed to be a part of. Cannot be supplied when 'source_cgsnapshot_id' is provided.",
 +
            "type": "string"
 +
        },
 +
    },
 +
    "required": []
 +
  }
 +
}
 +
 +
Response: {'consistency_group":  detailed CG}
 +
 +
== GET /os-consistency-groups ==
 +
Response:
 +
{'consistency_groups": [Simple CG]}
 +
 +
== GET /os-consistency-groups/detail ==
 +
Response:
 +
{'consistency_groups": [Detailed CG]}
 +
 +
==  GET /os-consistency-groups/<id> ==
 +
Response: {'consistency_group": Detailed CG}
 +
 +
 +
== PUT /os-consistency-groups/<id> ==
 +
{
 +
    "$schema": "http://json-schema.org/draft-04/schema#",
 +
    "title": "Consistency Group (CG)",
 +
    "description": "A resource representing a group of shares that can be snapshotted in unison",
 +
    "type": "object",
 +
    "properties": {
 +
        "name": {
 +
            "description": "A non-unique name for a CG",
 +
            "type": "string",
 +
            'maxLength': 255,
 +
        },
 +
        "description": {
 +
            "description": "A short description of the CG",
 +
            "type": "string"
 +
        },
 +
    "required": []
 +
}
 +
 +
Response: {'consistency_group": Detailed CG}
 +
 +
== POST /os-cgsnapshots ==
 +
{'cgsnapshot":  {
 +
    "$schema": "http://json-schema.org/draft-04/schema#",
 +
    "title": "Consistency Group Snapshot",
 +
    "description": "A resource representing a snapshot of a group of shares",
 +
    "type": "object",
 +
    "properties": {
 +
        "name": {
 +
            "description": "A non-unique name for a CG",
 +
            "type": "string",
 +
            'maxLength': 255,
 +
        },
 +
        "description": {
 +
            "description": "A short description of the CG",
 
             "type": "string"
 
             "type": "string"
 +
        },
 +
        "consistency_group_id": {
 +
            "description": "The uuid of the CG from which to create this CG snapshot.",
 +
            "type": 'string',
 
         },
 
         },
 
     },
 
     },
     "required": ["id", "name", "description", "created_at", "status", "project_id", "host"]
+
     "required": ['consistency_group_id']
}
+
}}
 +
Response: {'cgsnapshot":  detailed CGSnapshot}
 +
 
 +
== PUT /os-cgsnapshots/<id> ==
 +
{
 +
    "$schema": "http://json-schema.org/draft-04/schema#",
 +
    "title": "Consistency Group Snapshot",
 +
    "description": "A resource representing a snapshot of a group of shares",
 +
    "type": "object",
 +
    "properties": {
 +
        "name": {
 +
            "description": "A non-unique name for a CG",
 +
            "type": "string",
 +
            'maxLength': 255,
 +
        },
 +
        "description": {
 +
            "description": "A short description of the CG",
 +
            "type": "string"
 +
        },
 +
    "required": []
 +
}
 +
 
 +
Response: {'cgsnapshot":  Detailed CGSnapshot}

Latest revision as of 20:00, 15 August 2015

Resource schemas

Simple CG

{
   "$schema": "http://json-schema.org/draft-04/schema#",
   "title": "Consistency Group (CG)",
   "description": "A resource representing a group of shares that can be snapshotted in unison",
   "type": "object",
   "properties": {
       "id": {
           "description": "The unique identifier for a product",
           "type": "integer"
       },
       "name": {
           "description": "A non-unique name for a CG",
           "type": "string"
       },
   },
   "required": ["id", "name"]
}

Detailed CG

{
   "$schema": "http://json-schema.org/draft-04/schema#",
   "title": "Consistency Group (CG)",
   "description": "A resource representing a group of shares that can be snapshotted in unison",
   "type": "object",
   "properties": {
       "id": {
           "description": "The unique identifier for a product",
           "type": "string",
           'maxLength': 36,
           'pattern': ('^([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}'
                       '-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}$'),
       },
       "share_network_id": {
           "description": "The share network to provision the CG and all of it's shares into",
           "type": "string",
           'maxLength': 36,
           'pattern': ('^([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}'
                       '-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}$'),
       },
       "share_server_id": {
           "description": "The share server on which the CG is provisioned, visible only to admins",
           "type": "string",
           'maxLength': 36,
           'pattern': ('^([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}'
                       '-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}$'),
       },
       "name": {
           "description": "A non-unique name for a CG",
           "type": "string",
           'maxLength': 255,
       },
       "description": {
           "description": "A short description of the CG",
           "type": "string"
       },
       "created_at": {
           "description": "The time at which the CG was created",
           "type": "string"
       },
       "status": {
           "description": "Status of the CG",
           "type": "string",
           "enum": ["creating", "available", "deleting", "error"]
       },
       "project_id": {
           "description": "The owner of the CG",
           "type": "string"
       },
       "host": {
           "description": "The backend where the CG lives",
           "type": "string"
       },
       "source_cgsnapshot_id": {
           "description": "The uuid of the cgsnapshot from which this CG was created.",
           "type": ['null', 'string'],
       },
       "share_types": {
           "description": "The share types that shares in the CG are allowed to be a part of",
           "type": "array",
           "items": {
               "type": "string"
           },
       },
   },
   "required": ["id", "name", "description", "created_at", "status", "project_id", "host"]
}

Simple CG Snapshot

{
   "$schema": "http://json-schema.org/draft-04/schema#",
   "title": "Consistency Group Snapshot",
   "description": "A resource representing a snapshot of a group of shares",
   "type": "object",
   "properties": {
       "id": {
           "description": "The unique identifier for a product",
           "type": "string",
           'pattern': ('^([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}'
                       '-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}$'),
       },
       "name": {
           "description": "A non-unique name for a CGsnapshot",
           "type": "string"
       },
   },
   "required": ["id", "name"]
}

Detailed CG Snapshot

{
   "$schema": "http://json-schema.org/draft-04/schema#",
   "title": "Consistency Group Snapshot",
   "description": "A resource representing a snapshot of a group of shares",
   "type": "object",
   "properties": {
       "id": {
           "description": "The unique identifier for a product",
           "type": "string",
           'pattern': ('^([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}'
                       '-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}$'),
       },
       "name": {
           "description": "A non-unique name for a CG snapshot",
           "type": "string",
           'maxLength': 255,
       },
       "description": {
           "description": "A short description of the CG snapshot",
           "type": "string"
       },
       "created_at": {
           "description": "The time at which the CG snapshot was created",
           "type": "string"
       },
       "status": {
           "description": "Status of the CG snapshot",
           "type": "string",
           "enum": ["creating", "available", "deleting", "error"]
       },
       "project_id": {
           "description": "The owner of the CG snapshot",
           "type": "string"
       },
       "consistency_group_id": {
           "description": "The uuid of the consistency group from which this CG snapshot was created.",
           "type": ['null', 'string'],
           'pattern': ('^([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}'
                       '-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}$'),
       },
   },
   "required": ["id", "name", "description", "created_at", "status", "project_id"]
}

CG Snapshot member

{
   "$schema": "http://json-schema.org/draft-04/schema#",
   "title": "Consistency Group Snapshot Member",
   "description": "A resource representing a member of a CGSnapshot",
   "type": "object",
   "properties": {
       "id": {
           "description": "The unique identifier for a product",
           "type": "string",
           'pattern': ('^([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}'
                       '-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}$'),
       },
       "cgsnapshot_id": {
           "description": "The unique identifier for the parent cg_snapshot",
           "type": "string",
           'pattern': ('^([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}'
                       '-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}$'),
       },
       "share_id": {
           "description": "The unique identifier for the share this snapshot was created from.",
           "type": "string",
           'pattern': ('^([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}'
                       '-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}$'),
       },
       "share_type_id": {
           "description": "The unique identifier for the share_type of the share this snapshot was created from.",
           "type": "string",
           'pattern': ('^([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}'
                       '-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}$'),
       },
       "size": {
           "description": "The storage size of this snapshot",
           "type": "integer",
       },
       "share_protocol": {
           "description": "The share protocol of the parent share",
           "type": "string",
       },
   },
}

Request schemas

POST /os-consistency-groups

{ "consistency_group" {
   "$schema": "http://json-schema.org/draft-04/schema#",
   "title": "Consistency Group (CG)",
   "description": "A resource representing a group of shares that can be snapshotted in unison",
   "type": "object",
   "properties": {
       "name": {
           "description": "A non-unique name for a CG",
           "type": "string",
           'maxLength': 255,
       },
       "description": {
           "description": "A short description of the CG",
           "type": "string"
       },
       "source_cgsnapshot_id": {
           "description": "The uuid of the cgsnapshot from which this CG was created. Cannot be supplied when 'share_types' is provided.",
           "type": ['null', 'string'],
       },
       "share_types": {
           "description": "The share types that shares in the CG are allowed to be a part of. Cannot be supplied when 'source_cgsnapshot_id' is provided.",
           "type": "string"
       },
   },
   "required": []
 }
}
Response: {'consistency_group":  detailed CG}

GET /os-consistency-groups

Response: 
{'consistency_groups": [Simple CG]}

GET /os-consistency-groups/detail

Response: 
{'consistency_groups": [Detailed CG]}

GET /os-consistency-groups/<id>

Response: {'consistency_group": Detailed CG}


PUT /os-consistency-groups/<id>

{
   "$schema": "http://json-schema.org/draft-04/schema#",
   "title": "Consistency Group (CG)",
   "description": "A resource representing a group of shares that can be snapshotted in unison",
   "type": "object",
   "properties": {
       "name": {
           "description": "A non-unique name for a CG",
           "type": "string",
           'maxLength': 255,
       },
       "description": {
           "description": "A short description of the CG",
           "type": "string"
       },
   "required": []
}
Response: {'consistency_group": Detailed CG}

POST /os-cgsnapshots

{'cgsnapshot": {

   "$schema": "http://json-schema.org/draft-04/schema#",
   "title": "Consistency Group Snapshot",
   "description": "A resource representing a snapshot of a group of shares",
   "type": "object",
   "properties": {
       "name": {
           "description": "A non-unique name for a CG",
           "type": "string",
           'maxLength': 255,
       },
       "description": {
           "description": "A short description of the CG",
           "type": "string"
       },
       "consistency_group_id": {
           "description": "The uuid of the CG from which to create this CG snapshot.",
           "type": 'string',
       },
   },
   "required": ['consistency_group_id']
}}
Response: {'cgsnapshot":  detailed CGSnapshot}

PUT /os-cgsnapshots/<id>

{
   "$schema": "http://json-schema.org/draft-04/schema#",
   "title": "Consistency Group Snapshot",
   "description": "A resource representing a snapshot of a group of shares",
   "type": "object",
   "properties": {
       "name": {
           "description": "A non-unique name for a CG",
           "type": "string",
           'maxLength': 255,
       },
       "description": {
           "description": "A short description of the CG",
           "type": "string"
       },
   "required": []
}
Response: {'cgsnapshot":  Detailed CGSnapshot}