{"record":{"id":"92ae6ae34bc2ffa4","repo":"kubernetes/kops","slug":"error-listing-volumes-v","errorCode":null,"errorMessage":"error listing volumes: %v","messagePattern":"error listing volumes: (.+?)","errorType":"error_code","errorClass":null,"httpStatus":null,"severity":"error","filePath":"upup/pkg/fi/cloudup/awstasks/ebsvolume.go","lineNumber":68,"sourceCode":"var _ fi.CompareWithID = (*EBSVolume)(nil)\nvar _ fi.CloudupTaskNormalize = (*EBSVolume)(nil)\n\nfunc (e *EBSVolume) CompareWithID() *string {\n\treturn e.ID\n}\n\nfunc (e *EBSVolume) Find(c *fi.CloudupContext) (*EBSVolume, error) {\n\tctx := c.Context()\n\tcloud := awsup.GetCloud(c)\n\n\tfilters := cloud.BuildFilters(e.Name)\n\trequest := &ec2.DescribeVolumesInput{\n\t\tFilters: filters,\n\t}\n\n\tresponse, err := cloud.EC2().DescribeVolumes(ctx, request)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"error listing volumes: %v\", err)\n\t}\n\n\tif response == nil || len(response.Volumes) == 0 {\n\t\treturn nil, nil\n\t}\n\n\tif len(response.Volumes) != 1 {\n\t\treturn nil, fmt.Errorf(\"found multiple Volumes with name: %s\", *e.Name)\n\t}\n\tklog.V(2).Info(\"found existing volume\")\n\tv := response.Volumes[0]\n\tactual := &EBSVolume{\n\t\tID:               v.VolumeId,\n\t\tAvailabilityZone: v.AvailabilityZone,\n\t\tVolumeType:       v.VolumeType,\n\t\tSizeGB:           v.Size,\n\t\tKmsKeyId:         v.KmsKeyId,\n\t\tEncrypted:        v.Encrypted,","sourceCodeStart":50,"sourceCodeEnd":86,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/upup/pkg/fi/cloudup/awstasks/ebsvolume.go#L50-L86","documentation":"The EBSVolume task's Find() calls EC2 DescribeVolumes with name-tag filters and this error wraps any API failure from that call. It means kOps could not enumerate the volumes, so reconciliation cannot compare actual vs desired state. The wrapped AWS error carries the true cause.","triggerScenarios":"DescribeVolumes call in Find() fails — invalid filter syntax, missing ec2:DescribeVolumes permission, throttling, or connectivity/credential issues against AWS.","commonSituations":"IAM credentials without ec2:DescribeVolumes; AWS API rate limiting on large accounts; expired or misconfigured credentials during `kops update cluster --yes`.","solutions":["Grant ec2:DescribeVolumes in the IAM policy","Inspect the wrapped %v error for throttling and retry with backoff","Verify AWS credentials/region configuration","Reduce call frequency if hitting API limits"],"exampleFix":null,"handlingStrategy":"retry","validationCode":"// Validate credentials and permission up front\n_, err := iamSimulatePrincipalPolicy(iamClient, &iamsim.SimulatePrincipalPolicyInput{\n    PolicySourceArn: aws.String(roleArn),\n    ActionNames: []string{\"ec2:DescribeVolumes\"},\n})","typeGuard":null,"tryCatchPattern":"resp, err := cloud.EC2().DescribeVolumes(ctx, request)\nif err != nil {\n    var terr *ec2types.ThrottlingException\n    if errors.As(err, &terr) { /* backoff and retry */ }\n    return fmt.Errorf(\"error listing volumes: %w\", err)\n}","preventionTips":["Include ec2:DescribeVolumes in kOps IAM policy","Implement exponential backoff for AWS throttling errors","Validate AWS credentials/region before update runs"],"tags":["aws","ec2","ebs"],"backgroundTag":"describe-volumes-api-error","analyzedSha":"4c8573c808a73d578c5eadc86d410646ea0b0d73","analyzedAt":"2026-09-05T04:13:19.212Z","contentChangedAt":"2026-09-05T04:13:19.212Z","schemaVersion":2},"datasetVersion":"2026-09-12T07:17:12.445Z"}