Skip to content

Commit d869489

Browse files
dylanratcliffeactions-user
authored andcommitted
Fixed a number of mappings that were wrong (#2216)
This was causing even more mapping issues for customers GitOrigin-RevId: e96ba6628b998adedba03e9d56ddcc3c305d3434
1 parent 37199ae commit d869489

12 files changed

+615
-27
lines changed

‎aws-source/adapters/eks-addon.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ func addonGetFunc(ctx context.Context, client EKSClient, scope string, input *ek
3131
}
3232

3333
// The uniqueAttributeValue for this is a custom field:
34-
// {clusterName}/{addonName}
35-
attributes.Set("UniqueName", (*out.Addon.ClusterName + "/" + *out.Addon.AddonName))
34+
// {clusterName}:{addonName}
35+
attributes.Set("UniqueName", (*out.Addon.ClusterName + ":" + *out.Addon.AddonName))
3636

3737
item := sdp.Item{
3838
Type: "eks-addon",
@@ -59,8 +59,8 @@ func NewEKSAddonAdapter(client EKSClient, accountID string, region string) *adap
5959
},
6060
GetInputMapper: func(scope, query string) *eks.DescribeAddonInput {
6161
// The uniqueAttributeValue for this is a custom field:
62-
// {clusterName}/{addonName}
63-
fields := strings.Split(query, "/")
62+
// {clusterName}:{addonName}
63+
fields := strings.Split(query, ":")
6464

6565
var clusterName string
6666
var addonName string
@@ -100,13 +100,13 @@ var eksAddonAdapterMetadata = Metadata.Register(&sdp.AdapterMetadata{
100100
SupportedQueryMethods: &sdp.AdapterSupportedQueryMethods{
101101
Get: true,
102102
Search: true,
103-
GetDescription: "Get an addon by unique name ({clusterName}/{addonName})",
103+
GetDescription: "Get an addon by unique name ({clusterName}:{addonName})",
104104
SearchDescription: "Search addons by cluster name",
105105
},
106106
TerraformMappings: []*sdp.TerraformMapping{
107107
{
108-
TerraformMethod: sdp.QueryMethod_SEARCH,
109-
TerraformQueryMap: "aws_eks_addon.arn",
108+
TerraformMethod: sdp.QueryMethod_GET,
109+
TerraformQueryMap: "aws_eks_addon.id",
110110
},
111111
},
112112
Category: sdp.AdapterCategory_ADAPTER_CATEGORY_COMPUTE_APPLICATION,

‎aws-source/adapters/eks-fargate-profile.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ func fargateProfileGetFunc(ctx context.Context, client EKSClient, scope string,
3131
}
3232

3333
// The uniqueAttributeValue for this is a custom field:
34-
// {clusterName}/{FargateProfileName}
35-
attributes.Set("UniqueName", (*out.FargateProfile.ClusterName + "/" + *out.FargateProfile.FargateProfileName))
34+
// {clusterName}:{FargateProfileName}
35+
attributes.Set("UniqueName", (*out.FargateProfile.ClusterName + ":" + *out.FargateProfile.FargateProfileName))
3636

3737
item := sdp.Item{
3838
Type: "eks-fargate-profile",
@@ -98,7 +98,7 @@ func NewEKSFargateProfileAdapter(client EKSClient, accountID string, region stri
9898
GetInputMapper: func(scope, query string) *eks.DescribeFargateProfileInput {
9999
// The uniqueAttributeValue for this is a custom field:
100100
// {clusterName}/{FargateProfileName}
101-
fields := strings.Split(query, "/")
101+
fields := strings.Split(query, ":")
102102

103103
var clusterName string
104104
var FargateProfileName string
@@ -138,13 +138,13 @@ var fargateProfileAdapterMetadata = Metadata.Register(&sdp.AdapterMetadata{
138138
SupportedQueryMethods: &sdp.AdapterSupportedQueryMethods{
139139
Get: true,
140140
Search: true,
141-
GetDescription: "Get a fargate profile by unique name ({clusterName}/{FargateProfileName})",
141+
GetDescription: "Get a fargate profile by unique name ({clusterName}:{FargateProfileName})",
142142
SearchDescription: "Search for fargate profiles by cluster name",
143143
},
144144
TerraformMappings: []*sdp.TerraformMapping{
145145
{
146-
TerraformQueryMap: "aws_eks_fargate_profile.arn",
147-
TerraformMethod: sdp.QueryMethod_SEARCH,
146+
TerraformQueryMap: "aws_eks_fargate_profile.id",
147+
TerraformMethod: sdp.QueryMethod_GET,
148148
},
149149
},
150150
PotentialLinks: []string{"iam-role", "ec2-subnet"},

‎aws-source/adapters/eks-nodegroup.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ func nodegroupGetFunc(ctx context.Context, client EKSClient, scope string, input
3333
ng := out.Nodegroup
3434

3535
// The uniqueAttributeValue for this is a custom field:
36-
// {clusterName}/{NodegroupName}
37-
attributes.Set("UniqueName", (*out.Nodegroup.ClusterName + "/" + *out.Nodegroup.NodegroupName))
36+
// {clusterName}:{NodegroupName}
37+
attributes.Set("UniqueName", (*out.Nodegroup.ClusterName + ":" + *out.Nodegroup.NodegroupName))
3838

3939
item := sdp.Item{
4040
Type: "eks-nodegroup",
@@ -183,8 +183,8 @@ func NewEKSNodegroupAdapter(client EKSClient, accountID string, region string) *
183183
},
184184
GetInputMapper: func(scope, query string) *eks.DescribeNodegroupInput {
185185
// The uniqueAttributeValue for this is a custom field:
186-
// {clusterName}/{nodegroupName}
187-
fields := strings.Split(query, "/")
186+
// {clusterName}:{nodegroupName}
187+
fields := strings.Split(query, ":")
188188

189189
var clusterName string
190190
var nodegroupName string
@@ -234,13 +234,13 @@ var nodegroupAdapterMetadata = Metadata.Register(&sdp.AdapterMetadata{
234234
Get: true,
235235
List: false, // LIST not supported
236236
Search: true,
237-
GetDescription: "Get a node group by unique name ({clusterName}/{NodegroupName})",
237+
GetDescription: "Get a node group by unique name ({clusterName}:{NodegroupName})",
238238
SearchDescription: "Search for node groups by cluster name",
239239
},
240240
TerraformMappings: []*sdp.TerraformMapping{
241241
{
242-
TerraformQueryMap: "aws_eks_node_group.arn",
243-
TerraformMethod: sdp.QueryMethod_SEARCH,
242+
TerraformQueryMap: "aws_eks_node_group.id",
243+
TerraformMethod: sdp.QueryMethod_GET,
244244
},
245245
},
246246
PotentialLinks: []string{"ec2-key-pair", "ec2-security-group", "ec2-subnet", "autoscaling-auto-scaling-group", "ec2-launch-template"},

‎aws-source/adapters/elbv2-listener.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,11 +178,11 @@ var elbv2ListenerAdapterMetadata = Metadata.Register(&sdp.AdapterMetadata{
178178
},
179179
TerraformMappings: []*sdp.TerraformMapping{
180180
{
181-
TerraformMethod: sdp.QueryMethod_SEARCH,
181+
TerraformMethod: sdp.QueryMethod_GET,
182182
TerraformQueryMap: "aws_alb_listener.arn",
183183
},
184184
{
185-
TerraformMethod: sdp.QueryMethod_SEARCH,
185+
TerraformMethod: sdp.QueryMethod_GET,
186186
TerraformQueryMap: "aws_lb_listener.arn",
187187
},
188188
},

‎aws-source/adapters/networkmanager-connection.go

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,49 @@ func NewNetworkManagerConnectionAdapter(client *networkmanager.Client, accountID
170170
},
171171
OutputMapper: connectionOutputMapper,
172172
InputMapperSearch: func(ctx context.Context, client *networkmanager.Client, scope, query string) (*networkmanager.GetConnectionsInput, error) {
173+
// Try to parse as ARN first
174+
arn, err := adapterhelpers.ParseARN(query)
175+
if err == nil {
176+
// Check if it's a networkmanager ARN
177+
if arn.Service == "networkmanager" {
178+
switch arn.Type() {
179+
case "device":
180+
// Parse the resource part which can be:
181+
// 1. device/global-network-{id}/device-{id} (for device ARNs)
182+
// 2. device/global-network-{id}/connection-{id} (for connection ARNs)
183+
resourceParts := strings.Split(arn.Resource, "/")
184+
if len(resourceParts) == 3 && resourceParts[0] == "device" && strings.HasPrefix(resourceParts[1], "global-network-") {
185+
globalNetworkId := resourceParts[1] // Keep full ID including "global-network-" prefix
186+
187+
if strings.HasPrefix(resourceParts[2], "connection-") {
188+
// This is a connection ARN: device/global-network-{id}/connection-{id}
189+
connectionId := resourceParts[2] // Keep full ID including "connection-" prefix
190+
191+
return &networkmanager.GetConnectionsInput{
192+
GlobalNetworkId: &globalNetworkId,
193+
ConnectionIds: []string{connectionId},
194+
}, nil
195+
} else if strings.HasPrefix(resourceParts[2], "device-") {
196+
// This is a device ARN: device/global-network-{id}/device-{id}
197+
deviceId := resourceParts[2] // Keep full ID including "device-" prefix
198+
199+
return &networkmanager.GetConnectionsInput{
200+
GlobalNetworkId: &globalNetworkId,
201+
DeviceId: &deviceId,
202+
}, nil
203+
}
204+
}
205+
}
206+
}
207+
208+
// If it's not a valid networkmanager ARN, return an error
209+
return nil, &sdp.QueryError{
210+
ErrorType: sdp.QueryError_NOTFOUND,
211+
ErrorString: "ARN is not a valid networkmanager-connection or networkmanager-device ARN",
212+
}
213+
}
214+
215+
// If not an ARN, fall back to the original logic
173216
// We may search by only globalNetworkId or by using a custom id of {globalNetworkId}|{deviceId}
174217
sections := strings.Split(query, "|")
175218
switch len(sections) {
@@ -201,7 +244,7 @@ var networkmanagerConnectionAdapterMetadata = Metadata.Register(&sdp.AdapterMeta
201244
Get: true,
202245
Search: true,
203246
GetDescription: "Get a Networkmanager Connection",
204-
SearchDescription: "Search for Networkmanager Connections by GlobalNetworkId",
247+
SearchDescription: "Search for Networkmanager Connections by GlobalNetworkId, Device ARN, or Connection ARN",
205248
},
206249
TerraformMappings: []*sdp.TerraformMapping{
207250
{

‎aws-source/adapters/networkmanager-connection_test.go

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,3 +89,135 @@ func TestConnectionOutputMapper(t *testing.T) {
8989

9090
tests.Execute(t, item)
9191
}
92+
93+
func TestConnectionInputMapperSearch(t *testing.T) {
94+
adapter := NewNetworkManagerConnectionAdapter(&networkmanager.Client{}, "123456789012")
95+
96+
tests := []struct {
97+
name string
98+
query string
99+
expectedInput *networkmanager.GetConnectionsInput
100+
expectError bool
101+
}{
102+
{
103+
name: "Valid networkmanager-connection ARN",
104+
query: "arn:aws:networkmanager::123456789012:device/global-network-0d47f6t230mz46dy4/connection-07f6fd08867abc123",
105+
expectedInput: &networkmanager.GetConnectionsInput{
106+
GlobalNetworkId: adapterhelpers.PtrString("global-network-0d47f6t230mz46dy4"),
107+
ConnectionIds: []string{"connection-07f6fd08867abc123"},
108+
},
109+
expectError: false,
110+
},
111+
{
112+
name: "Valid networkmanager-device ARN",
113+
query: "arn:aws:networkmanager::123456789012:device/global-network-01231231231231231/device-07f6fd08867abc123",
114+
expectedInput: &networkmanager.GetConnectionsInput{
115+
GlobalNetworkId: adapterhelpers.PtrString("global-network-01231231231231231"),
116+
DeviceId: adapterhelpers.PtrString("device-07f6fd08867abc123"),
117+
},
118+
expectError: false,
119+
},
120+
{
121+
name: "Global Network ID only",
122+
query: "global-network-123456789",
123+
expectedInput: &networkmanager.GetConnectionsInput{
124+
GlobalNetworkId: adapterhelpers.PtrString("global-network-123456789"),
125+
},
126+
expectError: false,
127+
},
128+
{
129+
name: "Global Network ID and Device ID",
130+
query: "global-network-123456789|device-987654321",
131+
expectedInput: &networkmanager.GetConnectionsInput{
132+
GlobalNetworkId: adapterhelpers.PtrString("global-network-123456789"),
133+
DeviceId: adapterhelpers.PtrString("device-987654321"),
134+
},
135+
expectError: false,
136+
},
137+
{
138+
name: "Invalid ARN - wrong service",
139+
query: "arn:aws:ec2::123456789012:instance/i-1234567890abcdef0",
140+
expectError: true,
141+
},
142+
{
143+
name: "Invalid ARN - wrong resource type",
144+
query: "arn:aws:networkmanager::123456789012:site/global-network-01231231231231231/site-444555aaabbb11223",
145+
expectError: true,
146+
},
147+
{
148+
name: "Invalid connection ARN - malformed resource",
149+
query: "arn:aws:networkmanager::123456789012:device/invalid-format",
150+
expectError: true,
151+
},
152+
{
153+
name: "Invalid device ARN - malformed resource",
154+
query: "arn:aws:networkmanager::123456789012:device/global-network-123/invalid-prefix-123",
155+
expectError: true,
156+
},
157+
{
158+
name: "Invalid query - too many sections",
159+
query: "section1|section2|section3",
160+
expectError: true,
161+
},
162+
}
163+
164+
for _, tt := range tests {
165+
t.Run(tt.name, func(t *testing.T) {
166+
input, err := adapter.InputMapperSearch(context.Background(), &networkmanager.Client{}, "123456789012.us-east-1", tt.query)
167+
168+
if tt.expectError {
169+
if err == nil {
170+
t.Errorf("Expected error for query %s, but got none", tt.query)
171+
}
172+
return
173+
}
174+
175+
if err != nil {
176+
t.Errorf("Unexpected error for query %s: %v", tt.query, err)
177+
return
178+
}
179+
180+
if input == nil {
181+
t.Errorf("Expected input but got nil for query %s", tt.query)
182+
return
183+
}
184+
185+
// Compare GlobalNetworkId
186+
if (input.GlobalNetworkId == nil) != (tt.expectedInput.GlobalNetworkId == nil) {
187+
t.Errorf("GlobalNetworkId nil mismatch for query %s", tt.query)
188+
return
189+
}
190+
if input.GlobalNetworkId != nil && tt.expectedInput.GlobalNetworkId != nil {
191+
if *input.GlobalNetworkId != *tt.expectedInput.GlobalNetworkId {
192+
t.Errorf("Expected GlobalNetworkId %s, got %s for query %s",
193+
*tt.expectedInput.GlobalNetworkId, *input.GlobalNetworkId, tt.query)
194+
}
195+
}
196+
197+
// Compare DeviceId
198+
if (input.DeviceId == nil) != (tt.expectedInput.DeviceId == nil) {
199+
t.Errorf("DeviceId nil mismatch for query %s", tt.query)
200+
return
201+
}
202+
if input.DeviceId != nil && tt.expectedInput.DeviceId != nil {
203+
if *input.DeviceId != *tt.expectedInput.DeviceId {
204+
t.Errorf("Expected DeviceId %s, got %s for query %s",
205+
*tt.expectedInput.DeviceId, *input.DeviceId, tt.query)
206+
}
207+
}
208+
209+
// Compare ConnectionIds
210+
if len(input.ConnectionIds) != len(tt.expectedInput.ConnectionIds) {
211+
t.Errorf("Expected %d ConnectionIds, got %d for query %s",
212+
len(tt.expectedInput.ConnectionIds), len(input.ConnectionIds), tt.query)
213+
return
214+
}
215+
for i, connectionId := range input.ConnectionIds {
216+
if connectionId != tt.expectedInput.ConnectionIds[i] {
217+
t.Errorf("Expected ConnectionId %s, got %s at index %d for query %s",
218+
tt.expectedInput.ConnectionIds[i], connectionId, i, tt.query)
219+
}
220+
}
221+
})
222+
}
223+
}

‎aws-source/adapters/networkmanager-device.go

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,33 @@ func NewNetworkManagerDeviceAdapter(client *networkmanager.Client, accountID str
164164
},
165165
OutputMapper: deviceOutputMapper,
166166
InputMapperSearch: func(ctx context.Context, client *networkmanager.Client, scope, query string) (*networkmanager.GetDevicesInput, error) {
167+
// Try to parse as ARN first
168+
arn, err := adapterhelpers.ParseARN(query)
169+
if err == nil {
170+
// Check if it's a networkmanager-device ARN
171+
if arn.Service == "networkmanager" && arn.Type() == "device" {
172+
// Parse the resource part: device/global-network-{id}/device-{id}
173+
// Expected format: device/global-network-01231231231231231/device-07f6fd08867abc123
174+
resourceParts := strings.Split(arn.Resource, "/")
175+
if len(resourceParts) == 3 && resourceParts[0] == "device" && strings.HasPrefix(resourceParts[1], "global-network-") && strings.HasPrefix(resourceParts[2], "device-") {
176+
globalNetworkId := resourceParts[1] // Keep full ID including "global-network-" prefix
177+
deviceId := resourceParts[2] // Keep full ID including "device-" prefix
178+
179+
return &networkmanager.GetDevicesInput{
180+
GlobalNetworkId: &globalNetworkId,
181+
DeviceIds: []string{deviceId},
182+
}, nil
183+
}
184+
}
185+
186+
// If it's not a valid networkmanager-device ARN, return an error
187+
return nil, &sdp.QueryError{
188+
ErrorType: sdp.QueryError_NOTFOUND,
189+
ErrorString: "ARN is not a valid networkmanager-device ARN",
190+
}
191+
}
192+
193+
// If not an ARN, fall back to the original logic
167194
// We may search by only globalNetworkId or by using a custom id of {globalNetworkId}|{siteId}
168195
sections := strings.Split(query, "|")
169196
switch len(sections) {
@@ -196,7 +223,7 @@ var networkmanagerDeviceAdapterMetadata = Metadata.Register(&sdp.AdapterMetadata
196223
Get: true,
197224
Search: true,
198225
GetDescription: "Get a Networkmanager Device",
199-
SearchDescription: "Search for Networkmanager Devices by GlobalNetworkId, or by GlobalNetworkId with SiteId",
226+
SearchDescription: "Search for Networkmanager Devices by GlobalNetworkId, {GlobalNetworkId|SiteId} or ARN",
200227
},
201228
TerraformMappings: []*sdp.TerraformMapping{
202229
{

0 commit comments

Comments
 (0)