code: func (gce *Cloud) CreateSnapshot(diskName string, zone string, snapshotName string, tags map[string]string) error {
  	isManaged := false
  	for _, managedZone := range gce.managedZones {
  		if zone == managedZone {
  			isManaged = true
  			break
  		}
  	}
  	if !isManaged {
  		return fmt.Errorf("kubernetes does not manage zone %q", zone)
  	}
  	tagsStr, err := gce.encodeDiskTags(tags)
  	if err != nil {
  		glog.Infof("CreateSnapshot err %v", err)
  		return err
  	}
  
  	snapshotToCreate := &compute.Snapshot{
  		Name:        snapshotName,
  		Description: tagsStr,
  	}
  	glog.V(4).Infof("Create snapshot project %s, zone %s, diskName %s, snapshotToCreate %+v", gce.projectID, zone, diskName, snapshotToCreate)
  	createOp, err := gce.service.Disks.CreateSnapshot(gce.projectID, zone, diskName, snapshotToCreate).Do()
  	glog.V(4).Infof("Create snapshot operation %v", createOp)
  	return err
  }
docs: // CreateSnapshot creates a snapshot