go.mondoo.com/cnquery@v0.0.0-20231005093811-59568235f6ea/_motor/providers/awsec2ebs/destroy.go (about)

     1  // Copyright (c) Mondoo, Inc.
     2  // SPDX-License-Identifier: BUSL-1.1
     3  
     4  package awsec2ebs
     5  
     6  import (
     7  	"context"
     8  	"time"
     9  
    10  	"github.com/aws/aws-sdk-go-v2/service/ec2"
    11  	"github.com/aws/aws-sdk-go-v2/service/ec2/types"
    12  	"github.com/aws/aws-sdk-go/aws"
    13  	"github.com/rs/zerolog/log"
    14  )
    15  
    16  func (p *Provider) DetachVolumeFromInstance(ctx context.Context, volume *VolumeInfo) error {
    17  	log.Info().Msg("detach volume")
    18  	res, err := p.scannerRegionEc2svc.DetachVolume(ctx, &ec2.DetachVolumeInput{
    19  		Device: aws.String(p.volumeMounter.VolumeAttachmentLoc), VolumeId: &volume.Id,
    20  		InstanceId: &p.scannerInstance.Id,
    21  	})
    22  	if err != nil {
    23  		return err
    24  	}
    25  	if res.State != types.VolumeAttachmentStateDetached { // check if it's detached already
    26  		var volState types.VolumeState
    27  		for volState != types.VolumeStateAvailable {
    28  			time.Sleep(10 * time.Second)
    29  			resp, err := p.scannerRegionEc2svc.DescribeVolumes(ctx, &ec2.DescribeVolumesInput{VolumeIds: []string{volume.Id}})
    30  			if err != nil {
    31  				return err
    32  			}
    33  			if len(resp.Volumes) == 1 {
    34  				volState = resp.Volumes[0].State
    35  			}
    36  			log.Info().Interface("state", volState).Msg("waiting for volume detachment completion")
    37  		}
    38  	}
    39  	return nil
    40  }
    41  
    42  func (p *Provider) DeleteCreatedVolume(ctx context.Context, volume *VolumeInfo) error {
    43  	log.Info().Msg("delete created volume")
    44  	_, err := p.scannerRegionEc2svc.DeleteVolume(ctx, &ec2.DeleteVolumeInput{VolumeId: &volume.Id})
    45  	return err
    46  }