'Creates a cgsnapshot.
:param context: the context of the caller.
:param cgsnapshot: the dictionary of the cgsnapshot to be created.
:param snapshots: a list of snapshot dictionaries in the cgsnapshot.
:returns: model_update, snapshots_model_update
param snapshots is retrieved directly from the db. It is a list of
cinder.db.sqlalchemy.models.Snapshot to be precise. It cannot be
assigned to snapshots_model_update. snapshots_model_update is a list
of dictionaries. It has to be built by the driver. An entry will be
in this format: {\'id\': xxx, \'status\': xxx, ......}. model_update
will be in this format: {\'status\': xxx, ......}.
The driver should populate snapshots_model_update and model_update
and return them.
The manager will check snapshots_model_update and update db accordingly
for each snapshot. If the driver successfully deleted some snapshots
but failed to delete others, it should set statuses of the snapshots
accordingly so that the manager can update db correctly.
If the status in any entry of snapshots_model_update is \'error\', the
status in model_update will be set to the same if it is not already
\'error\'.
If the status in model_update is \'error\', the manager will raise an
exception and the status of cgsnapshot will be set to \'error\' in the
db. If snapshots_model_update is not returned by the driver, the
manager will set the status of every snapshot to \'error\' in the except
block.
If the driver raises an exception during the operation, it will be
caught by the try-except block in the manager and the statuses of
cgsnapshot and all snapshots will be set to \'error\'.
For a successful operation, the driver can either build the
model_update and snapshots_model_update and return them or
return None, None. The statuses of cgsnapshot and all snapshots
will be set to \'available\' at the end of the manager function.'

def create_cgsnapshot(self, context, cgsnapshot, snapshots):

    raise NotImplementedError()
