'Creates a Cinder group snapshot object.
The Cinder group snapshot object is created by making use of an ONTAP
consistency group snapshot in order to provide write-order consistency
for a set of flexvols snapshots. First, a list of the flexvols backing
the given Cinder group must be gathered. An ONTAP group-snapshot of
these flexvols will create a snapshot copy of all the Cinder volumes in
the generic volume group. For each Cinder volume in the group, it is
then necessary to clone its backing file from the ONTAP cg-snapshot.
The naming convention used to for the clones is what indicates the
clone\'s role as a Cinder snapshot and its inclusion in a Cinder group.
The ONTAP cg-snapshot of the flexvols is deleted after the cloning
operation is completed.
:returns: An implicit update for the group snapshot and snapshot models
that is then used by the manager to set the models to
available.'

@utils.trace_method
def create_group_snapshot(self, context, group_snapshot, snapshots):

    try:
        if volume_utils.is_group_a_cg_snapshot_type(group_snapshot):
            self._create_consistent_group_snapshot(group_snapshot, snapshots)
        else:
            for snapshot in snapshots:
                self._clone_backing_file_for_volume(snapshot['volume_name'], snapshot['name'], snapshot['volume_id'], is_snapshot=True)
    except Exception as ex:
        err_msg = (_('Create    group    snapshot    failed    (%s).') % ex)
        LOG.exception(err_msg, resource=group_snapshot)
        raise exception.NetAppDriverException(err_msg)
    return (None, None)
