Make interface optional like aws api.
This commit is contained in:
		
							parent
							
								
									d4b5e6a781
								
							
						
					
					
						commit
						bff8b09c42
					
				| 
						 | 
					@ -63,9 +63,16 @@ func (c *Cluster) syncVolumes() error {
 | 
				
			||||||
func (c *Cluster) syncUnderlyingEBSVolume() error {
 | 
					func (c *Cluster) syncUnderlyingEBSVolume() error {
 | 
				
			||||||
	c.logger.Infof("starting to sync EBS volume: type, iops, throughput and size")
 | 
						c.logger.Infof("starting to sync EBS volume: type, iops, throughput and size")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						var err error
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	targetValue := c.Spec.Volume
 | 
						targetValue := c.Spec.Volume
 | 
				
			||||||
 | 
						newSize, err := resource.ParseQuantity(targetValue.Size)
 | 
				
			||||||
 | 
						targetSize := quantityToGigabyte(newSize)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	awsGp3 := aws.String("gp3")
 | 
						awsGp3 := aws.String("gp3")
 | 
				
			||||||
 | 
						awsIo2 := aws.String("io2")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						errors := []string{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for _, volume := range c.EBSVolumes {
 | 
						for _, volume := range c.EBSVolumes {
 | 
				
			||||||
		var modifyIops *int64
 | 
							var modifyIops *int64
 | 
				
			||||||
| 
						 | 
					@ -85,9 +92,17 @@ func (c *Cluster) syncUnderlyingEBSVolume() error {
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if targetSize > volume.Size {
 | 
				
			||||||
 | 
								modifySize = &targetSize
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if modifyIops != nil || modifyThroughput != nil || modifySize != nil {
 | 
							if modifyIops != nil || modifyThroughput != nil || modifySize != nil {
 | 
				
			||||||
			if modifyThroughput != nil || modifyIops != nil {
 | 
								if modifyThroughput != nil || modifyIops != nil {
 | 
				
			||||||
 | 
									// we default to gp3 if iops and throughput are configured
 | 
				
			||||||
				modifyType = awsGp3
 | 
									modifyType = awsGp3
 | 
				
			||||||
 | 
									if targetValue.VolumeType == "io2" {
 | 
				
			||||||
 | 
										modifyType = awsIo2
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
			} else if targetValue.VolumeType == "gp3" && volume.VolumeType != "gp3" {
 | 
								} else if targetValue.VolumeType == "gp3" && volume.VolumeType != "gp3" {
 | 
				
			||||||
				modifyType = awsGp3
 | 
									modifyType = awsGp3
 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
| 
						 | 
					@ -95,10 +110,20 @@ func (c *Cluster) syncUnderlyingEBSVolume() error {
 | 
				
			||||||
				modifyType = nil
 | 
									modifyType = nil
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			err = c.VolumeResizer.ModifyVolume(volume.VolumeID, modifyType, volume.Size, 3000, 125)
 | 
								err = c.VolumeResizer.ModifyVolume(volume.VolumeID, modifyType, &volume.Size, modifyIops, modifyThroughput)
 | 
				
			||||||
 | 
								if err != nil {
 | 
				
			||||||
 | 
									errors = append(errors, fmt.Sprintf("modify volume failed: volume=%s size=%d iops=%d throughput=%d", volume.VolumeID, volume.Size, volume.Iops, volume.Throughput))
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if len(errors) > 0 {
 | 
				
			||||||
 | 
							for _, s := range errors {
 | 
				
			||||||
 | 
								c.logger.Warningf(s)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							// c.logger.Errorf("failed to modify %d of %d volumes", len(c.EBSVolumes), len(errors))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (c *Cluster) populateVolumeMetaData() error {
 | 
					func (c *Cluster) populateVolumeMetaData() error {
 | 
				
			||||||
| 
						 | 
					@ -446,10 +471,13 @@ func (c *Cluster) executeEBSMigration() error {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						var i3000 int64 = 3000
 | 
				
			||||||
 | 
						var i125 int64 = 125
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for _, volume := range awsVolumes {
 | 
						for _, volume := range awsVolumes {
 | 
				
			||||||
		if volume.VolumeType == "gp2" && volume.Size < c.OpConfig.EnableEBSGp3MigrationMaxSize {
 | 
							if volume.VolumeType == "gp2" && volume.Size < c.OpConfig.EnableEBSGp3MigrationMaxSize {
 | 
				
			||||||
			c.logger.Infof("modifying EBS volume %s to type gp3 migration (%d)", volume.VolumeID, volume.Size)
 | 
								c.logger.Infof("modifying EBS volume %s to type gp3 migration (%d)", volume.VolumeID, volume.Size)
 | 
				
			||||||
			err = c.VolumeResizer.ModifyVolume(volume.VolumeID, "gp3", volume.Size, 3000, 125)
 | 
								err = c.VolumeResizer.ModifyVolume(volume.VolumeID, aws.String("gp3"), &volume.Size, &i3000, &i125)
 | 
				
			||||||
			if nil != err {
 | 
								if nil != err {
 | 
				
			||||||
				c.logger.Warningf("modifying volume %s failed: %v", volume.VolumeID, err)
 | 
									c.logger.Warningf("modifying volume %s failed: %v", volume.VolumeID, err)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -141,7 +141,7 @@ func (r *EBSVolumeResizer) ResizeVolume(volumeID string, newSize int64) error {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ModifyVolume Modify EBS volume
 | 
					// ModifyVolume Modify EBS volume
 | 
				
			||||||
func (r *EBSVolumeResizer) ModifyVolume(volumeID string, newType string, newSize int64, iops int64, throughput int64) error {
 | 
					func (r *EBSVolumeResizer) ModifyVolume(volumeID string, newType *string, newSize *int64, iops *int64, throughput *int64) error {
 | 
				
			||||||
	/* first check if the volume is already of a requested size */
 | 
						/* first check if the volume is already of a requested size */
 | 
				
			||||||
	volumeOutput, err := r.connection.DescribeVolumes(&ec2.DescribeVolumesInput{VolumeIds: []*string{&volumeID}})
 | 
						volumeOutput, err := r.connection.DescribeVolumes(&ec2.DescribeVolumesInput{VolumeIds: []*string{&volumeID}})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
| 
						 | 
					@ -152,7 +152,7 @@ func (r *EBSVolumeResizer) ModifyVolume(volumeID string, newType string, newSize
 | 
				
			||||||
		return fmt.Errorf("describe volume %q returned information about a non-matching volume %q", volumeID, *vol.VolumeId)
 | 
							return fmt.Errorf("describe volume %q returned information about a non-matching volume %q", volumeID, *vol.VolumeId)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	input := ec2.ModifyVolumeInput{Size: &newSize, VolumeId: &volumeID, VolumeType: &newType, Iops: &iops, Throughput: &throughput}
 | 
						input := ec2.ModifyVolumeInput{Size: newSize, VolumeId: &volumeID, VolumeType: newType, Iops: iops, Throughput: throughput}
 | 
				
			||||||
	output, err := r.connection.ModifyVolume(&input)
 | 
						output, err := r.connection.ModifyVolume(&input)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return fmt.Errorf("could not modify persistent volume: %v", err)
 | 
							return fmt.Errorf("could not modify persistent volume: %v", err)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -21,7 +21,7 @@ type VolumeResizer interface {
 | 
				
			||||||
	GetProviderVolumeID(pv *v1.PersistentVolume) (string, error)
 | 
						GetProviderVolumeID(pv *v1.PersistentVolume) (string, error)
 | 
				
			||||||
	ExtractVolumeID(volumeID string) (string, error)
 | 
						ExtractVolumeID(volumeID string) (string, error)
 | 
				
			||||||
	ResizeVolume(providerVolumeID string, newSize int64) error
 | 
						ResizeVolume(providerVolumeID string, newSize int64) error
 | 
				
			||||||
	ModifyVolume(providerVolumeID string, newType string, newSize int64, iops int64, throughput int64) error
 | 
						ModifyVolume(providerVolumeID string, newType *string, newSize *int64, iops *int64, throughput *int64) error
 | 
				
			||||||
	DisconnectFromProvider() error
 | 
						DisconnectFromProvider() error
 | 
				
			||||||
	DescribeVolumes(providerVolumesID []string) ([]VolumeProperties, error)
 | 
						DescribeVolumes(providerVolumesID []string) ([]VolumeProperties, error)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue