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 }