code: func (os *OpenStack) CreateSnapshot(sourceVolumeID, name, description string, tags map[string]string) (string, string, error) {
  	snapshots, err := os.snapshotService()
  	if err != nil || snapshots == nil {
  		glog.Errorf("Unable to initialize cinder client for region: %s", os.region)
  		return "", "", fmt.Errorf("Failed to create snapshot for volume %s: %v", sourceVolumeID, err)
  	}
  
  	opts := SnapshotCreateOpts{
  		VolumeID:    sourceVolumeID,
  		Name:        name,
  		Description: description,
  	}
  	if tags != nil {
  		opts.Metadata = tags
  	}
  
  	snapshotID, status, err := snapshots.createSnapshot(opts)
  
  	if err != nil {
  		glog.Errorf("Failed to snapshot volume %s : %v", sourceVolumeID, err)
  		return "", "", err
  	}
  
  	glog.Infof("Created snapshot %v from volume: %v", snapshotID, sourceVolumeID)
  	return snapshotID, status, nil
  }
docs: // CreateSnapshot from the specified volume