Skip to content

Commit eaa004c

Browse files
authored
⭐️ AWS: Auto Scaling Groups tag propagation property (#6363)
1 parent ca259e9 commit eaa004c

File tree

5 files changed

+196
-5
lines changed

5 files changed

+196
-5
lines changed

providers/aws/resources/aws.lr

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1211,6 +1211,8 @@ private aws.autoscaling.group @defaults("name region minSize maxSize") {
12111211
healthCheckType string
12121212
// Tags for the asg
12131213
tags map[string]string
1214+
// Full tag properties
1215+
tagSpecifications []aws.autoscaling.group.tag
12141216
// Region of the Auto Scaling group
12151217
region string
12161218
// Minimum number of instances to scale down to
@@ -1239,6 +1241,20 @@ private aws.autoscaling.group @defaults("name region minSize maxSize") {
12391241
instances() []aws.ec2.instance
12401242
}
12411243

1244+
// AWS Auto Scaling group tag
1245+
private aws.autoscaling.group.tag @defaults("key value propagateAtLaunch") {
1246+
// Tag key
1247+
key string
1248+
// Tag value
1249+
value string
1250+
// Whether the tag propagates to instances launched by the ASG
1251+
propagateAtLaunch bool
1252+
// Resource ID (ASG name)
1253+
resourceId string
1254+
// Resource type (always "auto-scaling-group")
1255+
resourceType string
1256+
}
1257+
12421258
// AWS Elastic Load Balancing
12431259
aws.elb {
12441260
// List of classic load balancers

providers/aws/resources/aws.lr.go

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

providers/aws/resources/aws.lr.manifest.yaml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,13 +316,28 @@ resources:
316316
name: {}
317317
region:
318318
min_mondoo_version: 9.0.0
319+
tagSpecifications:
320+
min_mondoo_version: 9.0.0
319321
tags:
320322
min_mondoo_version: 5.16.0
321323
is_private: true
322324
min_mondoo_version: 5.15.0
323325
platform:
324326
name:
325327
- aws
328+
aws.autoscaling.group.tag:
329+
fields:
330+
id: {}
331+
key: {}
332+
propagateAtLaunch: {}
333+
resourceId: {}
334+
resourceType: {}
335+
value: {}
336+
is_private: true
337+
min_mondoo_version: 9.0.0
338+
platform:
339+
name:
340+
- aws
326341
aws.backup:
327342
docs:
328343
desc: |

providers/aws/resources/aws_autoscaling.go

Lines changed: 44 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,14 @@ func initAwsAutoscalingGroup(runtime *plugin.Runtime, args map[string]*llx.RawDa
9494
for _, zone := range group.AvailabilityZones {
9595
availabilityZones = append(availabilityZones, zone)
9696
}
97-
args["arn"] = llx.StringDataPtr(group.AutoScalingGroupARN)
97+
98+
groupArn := convert.ToValue(group.AutoScalingGroupARN)
99+
tagSpecs, err := createTagSpecifications(runtime, group.Tags, groupArn)
100+
if err != nil {
101+
return nil, nil, err
102+
}
103+
104+
args["arn"] = llx.StringData(groupArn)
98105
args["availabilityZones"] = llx.ArrayData(availabilityZones, types.String)
99106
args["capacityRebalance"] = llx.BoolDataPtr(group.CapacityRebalance)
100107
args["createdAt"] = llx.TimeDataPtr(group.CreatedTime)
@@ -111,7 +118,8 @@ func initAwsAutoscalingGroup(runtime *plugin.Runtime, args map[string]*llx.RawDa
111118
args["name"] = llx.StringDataPtr(group.AutoScalingGroupName)
112119
args["region"] = llx.StringData(region)
113120
args["tags"] = llx.MapData(autoscalingTagsToMap(group.Tags), types.String)
114-
mqlGroup, err := CreateResource(runtime, "aws.autoscaling.group", args)
121+
args["tagSpecifications"] = llx.ArrayData(tagSpecs, types.Resource(ResourceAwsAutoscalingGroupTag))
122+
mqlGroup, err := CreateResource(runtime, ResourceAwsAutoscalingGroup, args)
115123
if err != nil {
116124
return args, nil, err
117125
}
@@ -156,9 +164,15 @@ func (a *mqlAwsAutoscaling) getGroups(conn *connection.AwsConnection) []*jobpool
156164
availabilityZones = append(availabilityZones, zone)
157165
}
158166

159-
mqlGroup, err := CreateResource(a.MqlRuntime, "aws.autoscaling.group",
167+
groupArn := convert.ToValue(group.AutoScalingGroupARN)
168+
tagSpecs, err := createTagSpecifications(a.MqlRuntime, group.Tags, groupArn)
169+
if err != nil {
170+
return nil, err
171+
}
172+
173+
mqlGroup, err := CreateResource(a.MqlRuntime, ResourceAwsAutoscalingGroup,
160174
map[string]*llx.RawData{
161-
"arn": llx.StringDataPtr(group.AutoScalingGroupARN),
175+
"arn": llx.StringData(groupArn),
162176
"availabilityZones": llx.ArrayData(availabilityZones, types.String),
163177
"capacityRebalance": llx.BoolDataPtr(group.CapacityRebalance),
164178
"createdAt": llx.TimeDataPtr(group.CreatedTime),
@@ -175,6 +189,7 @@ func (a *mqlAwsAutoscaling) getGroups(conn *connection.AwsConnection) []*jobpool
175189
"name": llx.StringDataPtr(group.AutoScalingGroupName),
176190
"region": llx.StringData(region),
177191
"tags": llx.MapData(autoscalingTagsToMap(group.Tags), types.String),
192+
"tagSpecifications": llx.ArrayData(tagSpecs, types.Resource(ResourceAwsAutoscalingGroupTag)),
178193
})
179194
if err != nil {
180195
return nil, err
@@ -201,3 +216,28 @@ func autoscalingTagsToMap(tags []ec2types.TagDescription) map[string]any {
201216

202217
return tagsMap
203218
}
219+
220+
func createTagSpecifications(runtime *plugin.Runtime, tags []ec2types.TagDescription, groupArn string) ([]any, error) {
221+
tagSpecs := make([]any, 0, len(tags))
222+
223+
for _, tag := range tags {
224+
key := convert.ToValue(tag.Key)
225+
tagId := fmt.Sprintf("%s/tag/%s", groupArn, key)
226+
227+
mqlTag, err := CreateResource(runtime, ResourceAwsAutoscalingGroupTag,
228+
map[string]*llx.RawData{
229+
"__id": llx.StringData(tagId),
230+
"key": llx.StringData(key),
231+
"value": llx.StringData(convert.ToValue(tag.Value)),
232+
"propagateAtLaunch": llx.BoolDataPtr(tag.PropagateAtLaunch),
233+
"resourceId": llx.StringData(convert.ToValue(tag.ResourceId)),
234+
"resourceType": llx.StringData(convert.ToValue(tag.ResourceType)),
235+
})
236+
if err != nil {
237+
return nil, err
238+
}
239+
tagSpecs = append(tagSpecs, mqlTag)
240+
}
241+
242+
return tagSpecs, nil
243+
}

providers/aws/resources/aws_codedeploy.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ func (dg *mqlAwsCodedeployDeploymentGroup) autoScalingGroups() ([]any, error) {
251251
// ARN construction for ASGs is a bit different, usually fetched via name
252252
// We'd need a way to link to an existing aws.autoscaling.group resource.
253253
// For now, returning basic info. A full resource link would require aws.autoscaling.group to be an init-able resource by name+region.
254-
asgRes, err := NewResource(dg.MqlRuntime, "aws.autoscaling.group", map[string]*llx.RawData{
254+
asgRes, err := NewResource(dg.MqlRuntime, ResourceAwsAutoscalingGroup, map[string]*llx.RawData{
255255
"name": llx.StringData(*asg.Name),
256256
"region": llx.StringData(dg.Region.Data),
257257
// ARN might need to be constructed or looked up if not directly available

0 commit comments

Comments
 (0)