Manila/design/manila-liberty-consistency-groups/api-schema

= 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/
Response: {'consistency_group": Detailed CG}

PUT /os-consistency-groups/
{   "$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/
{   "$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}