Skip to content

Commit e21e466

Browse files
tas50claude
andcommitted
🐛 Fix ID collisions, access-denied handling, and spell check
Fix featureDefinition and clusterNode cache key collisions by including parent resource identifiers in IDs. Add Is400AccessDeniedError handling to ListClusterNodes. Add Slurm to spell-check dictionary and document modelPackages listing limitation. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 41d22e8 commit e21e466

File tree

5 files changed

+135
-7
lines changed

5 files changed

+135
-7
lines changed

.github/actions/spelling/expect.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,7 @@ Sflags
272272
signin
273273
singlequeryargument
274274
sizeconstraintstatement
275+
Slurm
275276
smbv
276277
Snat
277278
SNYK

providers/aws/resources/aws.lr

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1645,7 +1645,7 @@ aws.sagemaker {
16451645
clusters() []aws.sagemaker.cluster
16461646
// List of SageMaker feature groups
16471647
featureGroups() []aws.sagemaker.featureGroup
1648-
// List of SageMaker model packages
1648+
// List of SageMaker model packages (excludes packages within model package groups)
16491649
modelPackages() []aws.sagemaker.modelPackage
16501650
// List of SageMaker model package groups
16511651
modelPackageGroups() []aws.sagemaker.modelPackageGroup

providers/aws/resources/aws.lr.go

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

providers/aws/resources/aws.permissions.json

Lines changed: 113 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"provider": "aws",
3-
"version": "13.10.0",
4-
"generated_at": "2026-04-08T16:03:53-07:00",
3+
"version": "13.12.0",
4+
"generated_at": "2026-04-10T12:51:16-07:00",
55
"permissions": [
66
"access-analyzer:ListAnalyzers",
77
"access-analyzer:ListFindingsV2",
@@ -397,23 +397,38 @@
397397
"s3:GetPublicAccessBlock",
398398
"s3:ListBucketMetricsConfigurations",
399399
"s3:ListBuckets",
400+
"sagemaker:DescribeCluster",
400401
"sagemaker:DescribeDomain",
401402
"sagemaker:DescribeEndpointConfig",
403+
"sagemaker:DescribeFeatureGroup",
402404
"sagemaker:DescribeInferenceComponent",
403405
"sagemaker:DescribeModel",
406+
"sagemaker:DescribeModelCard",
407+
"sagemaker:DescribeModelPackage",
408+
"sagemaker:DescribeModelPackageGroup",
404409
"sagemaker:DescribeNotebookInstance",
405410
"sagemaker:DescribePipeline",
406411
"sagemaker:DescribeProcessingJob",
412+
"sagemaker:DescribeSpace",
407413
"sagemaker:DescribeTrainingJob",
414+
"sagemaker:DescribeUserProfile",
415+
"sagemaker:ListClusterNodes",
416+
"sagemaker:ListClusters",
408417
"sagemaker:ListDomains",
409418
"sagemaker:ListEndpoints",
419+
"sagemaker:ListFeatureGroups",
410420
"sagemaker:ListInferenceComponents",
421+
"sagemaker:ListModelCards",
422+
"sagemaker:ListModelPackageGroups",
423+
"sagemaker:ListModelPackages",
411424
"sagemaker:ListModels",
412425
"sagemaker:ListNotebookInstances",
413426
"sagemaker:ListPipelines",
414427
"sagemaker:ListProcessingJobs",
428+
"sagemaker:ListSpaces",
415429
"sagemaker:ListTags",
416430
"sagemaker:ListTrainingJobs",
431+
"sagemaker:ListUserProfiles",
417432
"scheduler:GetSchedule",
418433
"scheduler:ListScheduleGroups",
419434
"scheduler:ListSchedules",
@@ -1279,6 +1294,12 @@
12791294
"action": "DescribeSnapshots",
12801295
"source_file": "aws_ec2.go"
12811296
},
1297+
{
1298+
"permission": "ec2:DescribeSubnets",
1299+
"service": "ec2",
1300+
"action": "DescribeSubnets",
1301+
"source_file": "aws_sagemaker.go"
1302+
},
12821303
{
12831304
"permission": "ec2:DescribeSubnets",
12841305
"service": "ec2",
@@ -2947,6 +2968,12 @@
29472968
"action": "ListBuckets",
29482969
"source_file": "aws_s3.go"
29492970
},
2971+
{
2972+
"permission": "sagemaker:DescribeCluster",
2973+
"service": "sagemaker",
2974+
"action": "DescribeCluster",
2975+
"source_file": "aws_sagemaker.go"
2976+
},
29502977
{
29512978
"permission": "sagemaker:DescribeDomain",
29522979
"service": "sagemaker",
@@ -2959,6 +2986,12 @@
29592986
"action": "DescribeEndpointConfig",
29602987
"source_file": "aws_sagemaker.go"
29612988
},
2989+
{
2990+
"permission": "sagemaker:DescribeFeatureGroup",
2991+
"service": "sagemaker",
2992+
"action": "DescribeFeatureGroup",
2993+
"source_file": "aws_sagemaker.go"
2994+
},
29622995
{
29632996
"permission": "sagemaker:DescribeInferenceComponent",
29642997
"service": "sagemaker",
@@ -2971,6 +3004,24 @@
29713004
"action": "DescribeModel",
29723005
"source_file": "aws_sagemaker.go"
29733006
},
3007+
{
3008+
"permission": "sagemaker:DescribeModelCard",
3009+
"service": "sagemaker",
3010+
"action": "DescribeModelCard",
3011+
"source_file": "aws_sagemaker.go"
3012+
},
3013+
{
3014+
"permission": "sagemaker:DescribeModelPackage",
3015+
"service": "sagemaker",
3016+
"action": "DescribeModelPackage",
3017+
"source_file": "aws_sagemaker.go"
3018+
},
3019+
{
3020+
"permission": "sagemaker:DescribeModelPackageGroup",
3021+
"service": "sagemaker",
3022+
"action": "DescribeModelPackageGroup",
3023+
"source_file": "aws_sagemaker.go"
3024+
},
29743025
{
29753026
"permission": "sagemaker:DescribeNotebookInstance",
29763027
"service": "sagemaker",
@@ -2989,12 +3040,36 @@
29893040
"action": "DescribeProcessingJob",
29903041
"source_file": "aws_sagemaker.go"
29913042
},
3043+
{
3044+
"permission": "sagemaker:DescribeSpace",
3045+
"service": "sagemaker",
3046+
"action": "DescribeSpace",
3047+
"source_file": "aws_sagemaker.go"
3048+
},
29923049
{
29933050
"permission": "sagemaker:DescribeTrainingJob",
29943051
"service": "sagemaker",
29953052
"action": "DescribeTrainingJob",
29963053
"source_file": "aws_sagemaker.go"
29973054
},
3055+
{
3056+
"permission": "sagemaker:DescribeUserProfile",
3057+
"service": "sagemaker",
3058+
"action": "DescribeUserProfile",
3059+
"source_file": "aws_sagemaker.go"
3060+
},
3061+
{
3062+
"permission": "sagemaker:ListClusterNodes",
3063+
"service": "sagemaker",
3064+
"action": "ListClusterNodes",
3065+
"source_file": "aws_sagemaker.go"
3066+
},
3067+
{
3068+
"permission": "sagemaker:ListClusters",
3069+
"service": "sagemaker",
3070+
"action": "ListClusters",
3071+
"source_file": "aws_sagemaker.go"
3072+
},
29983073
{
29993074
"permission": "sagemaker:ListDomains",
30003075
"service": "sagemaker",
@@ -3007,12 +3082,36 @@
30073082
"action": "ListEndpoints",
30083083
"source_file": "aws_sagemaker.go"
30093084
},
3085+
{
3086+
"permission": "sagemaker:ListFeatureGroups",
3087+
"service": "sagemaker",
3088+
"action": "ListFeatureGroups",
3089+
"source_file": "aws_sagemaker.go"
3090+
},
30103091
{
30113092
"permission": "sagemaker:ListInferenceComponents",
30123093
"service": "sagemaker",
30133094
"action": "ListInferenceComponents",
30143095
"source_file": "aws_sagemaker.go"
30153096
},
3097+
{
3098+
"permission": "sagemaker:ListModelCards",
3099+
"service": "sagemaker",
3100+
"action": "ListModelCards",
3101+
"source_file": "aws_sagemaker.go"
3102+
},
3103+
{
3104+
"permission": "sagemaker:ListModelPackageGroups",
3105+
"service": "sagemaker",
3106+
"action": "ListModelPackageGroups",
3107+
"source_file": "aws_sagemaker.go"
3108+
},
3109+
{
3110+
"permission": "sagemaker:ListModelPackages",
3111+
"service": "sagemaker",
3112+
"action": "ListModelPackages",
3113+
"source_file": "aws_sagemaker.go"
3114+
},
30163115
{
30173116
"permission": "sagemaker:ListModels",
30183117
"service": "sagemaker",
@@ -3037,6 +3136,12 @@
30373136
"action": "ListProcessingJobs",
30383137
"source_file": "aws_sagemaker.go"
30393138
},
3139+
{
3140+
"permission": "sagemaker:ListSpaces",
3141+
"service": "sagemaker",
3142+
"action": "ListSpaces",
3143+
"source_file": "aws_sagemaker.go"
3144+
},
30403145
{
30413146
"permission": "sagemaker:ListTags",
30423147
"service": "sagemaker",
@@ -3049,6 +3154,12 @@
30493154
"action": "ListTrainingJobs",
30503155
"source_file": "aws_sagemaker.go"
30513156
},
3157+
{
3158+
"permission": "sagemaker:ListUserProfiles",
3159+
"service": "sagemaker",
3160+
"action": "ListUserProfiles",
3161+
"source_file": "aws_sagemaker.go"
3162+
},
30523163
{
30533164
"permission": "scheduler:GetSchedule",
30543165
"service": "scheduler",

providers/aws/resources/aws_sagemaker.go

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2044,6 +2044,10 @@ func (a *mqlAwsSagemakerCluster) nodes() ([]any, error) {
20442044
for paginator.HasMorePages() {
20452045
page, err := paginator.NextPage(ctx)
20462046
if err != nil {
2047+
if Is400AccessDeniedError(err) {
2048+
log.Warn().Str("cluster", clusterName).Msg("error accessing AWS SageMaker cluster nodes")
2049+
return res, nil
2050+
}
20472051
return nil, err
20482052
}
20492053
for _, node := range page.ClusterNodeSummaries {
@@ -2067,6 +2071,8 @@ func (a *mqlAwsSagemakerCluster) nodes() ([]any, error) {
20672071
if err != nil {
20682072
return nil, err
20692073
}
2074+
nodeRes := mqlNode.(*mqlAwsSagemakerClusterNode)
2075+
nodeRes.cacheClusterName = clusterName
20702076
res = append(res, mqlNode)
20712077
}
20722078
}
@@ -2103,8 +2109,12 @@ func (a *mqlAwsSagemakerClusterInstanceGroup) lifecycleConfig() (map[string]any,
21032109
return convert.JsonToDict(a.cacheLifecycleConfig)
21042110
}
21052111

2112+
type mqlAwsSagemakerClusterNodeInternal struct {
2113+
cacheClusterName string
2114+
}
2115+
21062116
func (a *mqlAwsSagemakerClusterNode) id() (string, error) {
2107-
return a.Region.Data + "/" + a.InstanceGroupName.Data + "/" + a.InstanceId.Data, nil
2117+
return a.Region.Data + "/" + a.cacheClusterName + "/" + a.InstanceGroupName.Data + "/" + a.InstanceId.Data, nil
21082118
}
21092119

21102120
// ---- Feature Groups ----
@@ -2273,13 +2283,19 @@ func (a *mqlAwsSagemakerFeatureGroup) featureDefinitions() ([]any, error) {
22732283
if err != nil {
22742284
return nil, err
22752285
}
2286+
fdRes := mqlFD.(*mqlAwsSagemakerFeatureDefinition)
2287+
fdRes.cacheFeatureGroupArn = a.Arn.Data
22762288
res = append(res, mqlFD)
22772289
}
22782290
return res, nil
22792291
}
22802292

2293+
type mqlAwsSagemakerFeatureDefinitionInternal struct {
2294+
cacheFeatureGroupArn string
2295+
}
2296+
22812297
func (a *mqlAwsSagemakerFeatureDefinition) id() (string, error) {
2282-
return a.FeatureName.Data + "/" + a.FeatureType.Data, nil
2298+
return a.cacheFeatureGroupArn + "/" + a.FeatureName.Data + "/" + a.FeatureType.Data, nil
22832299
}
22842300

22852301
func (a *mqlAwsSagemakerFeatureGroup) eventTimeFeatureName() (string, error) {

0 commit comments

Comments
 (0)