cloud/awscloud: fix nil pointer dereference
When the cleanup function gets called, there's a chance the Instnace
field isn't populated yet, so store the instance ID separately and wait
for it to be terminated in case it's present.
The error would produce the following trace:
```
goroutine 1 [running]:
...
main.(*OSBuildJobImpl).Run.func1()
osbuild/osbuild-composer/cmd/osbuild-worker/jobimpl-osbuild.go:404 +0xc5
panic({0x55e2a76a1e40?, 0x55e2a906d2f0?})
/usr/lib/golang/src/runtime/panic.go:920 +0x270
github.com/osbuild/osbuild-composer/internal/cloud/awscloud.(*AWS).deleteFleetIfExists(0xc000faa840, 0xc0012718c0)
osbuild/osbuild-composer/internal/cloud/awscloud/secure-instance.go:441 +0x175
github.com/osbuild/osbuild-composer/internal/cloud/awscloud.(*AWS).TerminateSecureInstance(0x55e2a90825e0?, 0x2?)
osbuild/osbuild-composer/internal/cloud/awscloud/secure-instance.go:192 +0x1d
github.com/osbuild/osbuild-composer/internal/cloud/awscloud.(*AWS).RunSecureInstance.func1()
osbuild/osbuild-composer/internal/cloud/awscloud/secure-instance.go:75 +0x69
github.com/osbuild/osbuild-composer/internal/cloud/awscloud.(*AWS).RunSecureInstance(0xc000faa840, {0xc000afeade, 0x10}, {0x0, 0x0}, {0x0, 0x0}, {0xc001120f30, 0x24})
osbuild/osbuild-composer/internal/cloud/awscloud/secure-instance.go:169 +0x12a7
...
```
This commit is contained in:
parent
54904d47da
commit
dc389eaa71
1 changed files with 20 additions and 16 deletions
|
|
@ -16,6 +16,7 @@ type SecureInstance struct {
|
|||
SGID string
|
||||
LTID string
|
||||
Instance *ec2.Instance
|
||||
InstanceID string
|
||||
}
|
||||
|
||||
// SecureInstanceUserData returns the cloud-init user data for a secure instance.
|
||||
|
|
@ -159,10 +160,10 @@ func (a *AWS) RunSecureInstance(iamProfile, keyName, cloudWatchGroup, hostname s
|
|||
}
|
||||
secureInstance.FleetID = *createFleetOutput.FleetId
|
||||
|
||||
instanceID := createFleetOutput.Instances[0].InstanceIds[0]
|
||||
secureInstance.InstanceID = *createFleetOutput.Instances[0].InstanceIds[0]
|
||||
err = a.ec2.WaitUntilInstanceStatusOk(&ec2.DescribeInstanceStatusInput{
|
||||
InstanceIds: []*string{
|
||||
instanceID,
|
||||
aws.String(secureInstance.InstanceID),
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
|
|
@ -171,17 +172,17 @@ func (a *AWS) RunSecureInstance(iamProfile, keyName, cloudWatchGroup, hostname s
|
|||
|
||||
descrInstOutput, err := a.ec2.DescribeInstances(&ec2.DescribeInstancesInput{
|
||||
InstanceIds: []*string{
|
||||
instanceID,
|
||||
aws.String(secureInstance.InstanceID),
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if len(descrInstOutput.Reservations) != 1 {
|
||||
return nil, fmt.Errorf("Expected exactly 1 reservation for instance: %s, got %d", *instanceID, len(descrInstOutput.Reservations))
|
||||
return nil, fmt.Errorf("Expected exactly 1 reservation for instance: %s, got %d", secureInstance.InstanceID, len(descrInstOutput.Reservations))
|
||||
}
|
||||
if len(descrInstOutput.Reservations[0].Instances) != 1 {
|
||||
return nil, fmt.Errorf("Expected exactly 1 instance for instance: %s, got %d", *instanceID, len(descrInstOutput.Reservations[0].Instances))
|
||||
return nil, fmt.Errorf("Expected exactly 1 instance for instance: %s, got %d", secureInstance.InstanceID, len(descrInstOutput.Reservations[0].Instances))
|
||||
}
|
||||
secureInstance.Instance = descrInstOutput.Reservations[0].Instances[0]
|
||||
|
||||
|
|
@ -436,15 +437,18 @@ func (a *AWS) deleteFleetIfExists(si *SecureInstance) error {
|
|||
return fmt.Errorf("Deleting fleet unsuccessful")
|
||||
}
|
||||
|
||||
if si.InstanceID != "" {
|
||||
err = a.ec2.WaitUntilInstanceTerminated(&ec2.DescribeInstancesInput{
|
||||
InstanceIds: []*string{
|
||||
si.Instance.InstanceId,
|
||||
aws.String(si.InstanceID),
|
||||
},
|
||||
})
|
||||
if err == nil {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
si.FleetID = ""
|
||||
}
|
||||
return err
|
||||
return nil
|
||||
}
|
||||
|
||||
func (a *AWS) deleteLTIfExists(si *SecureInstance) error {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue