Skip to content

Commit 4a94ec5

Browse files
authored
Fixed table azure_compute_availability_set always returns null value for the column virtual_machines Closes #845 (#856)
1 parent 7123e9d commit 4a94ec5

File tree

1 file changed

+68
-5
lines changed

1 file changed

+68
-5
lines changed

azure/table_azure_compute_availability_set.go

Lines changed: 68 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package azure
22

33
import (
44
"context"
5+
"strings"
56

67
"github.com/Azure/azure-sdk-for-go/profiles/latest/compute/mgmt/compute"
78
"github.com/turbot/steampipe-plugin-sdk/v5/grpc/proto"
@@ -82,13 +83,15 @@ func tableAzureComputeAvailabilitySet(_ context.Context) *plugin.Table {
8283
Name: "status",
8384
Description: "The resource status information",
8485
Type: proto.ColumnType_JSON,
85-
Transform: transform.FromField("AvailabilitySetProperties.Statuses"),
86+
Hydrate: getAzureComputeAvailabilitySet,
87+
Transform: transform.From(extractStatusForAvailabilitySet),
8688
},
8789
{
8890
Name: "virtual_machines",
8991
Description: "A list of references to all virtual machines in the availability set",
9092
Type: proto.ColumnType_JSON,
91-
Transform: transform.FromField("AvailabilitySetProperties.VirtualMachines"),
93+
Hydrate: getAzureComputeAvailabilitySet,
94+
Transform: transform.From(extractVirtualMachinesForAvailabilitySet),
9295
},
9396

9497
// Steampipe standard columns
@@ -175,10 +178,22 @@ func listAzureComputeAvailabilitySets(ctx context.Context, d *plugin.QueryData,
175178
//// HYDRATE FUNCTIONS ////
176179

177180
func getAzureComputeAvailabilitySet(ctx context.Context, d *plugin.QueryData, h *plugin.HydrateData) (interface{}, error) {
178-
plugin.Logger(ctx).Trace("getAzureComputeAvailabilitySet")
181+
resourceGroup, name := "", ""
179182

180-
name := d.EqualsQuals["name"].GetStringValue()
181-
resourceGroup := d.EqualsQuals["resource_group"].GetStringValue()
183+
name = d.EqualsQuals["name"].GetStringValue()
184+
resourceGroup = d.EqualsQuals["resource_group"].GetStringValue()
185+
186+
if h.Item != nil {
187+
availabilitySet := h.Item.(compute.AvailabilitySet)
188+
id := availabilitySet.ID
189+
resourceGroup = strings.Split(*id, "/")[4]
190+
name = *availabilitySet.Name
191+
}
192+
193+
// Empty check
194+
if name == "" || resourceGroup == "" {
195+
return nil, nil
196+
}
182197

183198
session, err := GetNewSession(ctx, d, "MANAGEMENT")
184199
if err != nil {
@@ -201,3 +216,51 @@ func getAzureComputeAvailabilitySet(ctx context.Context, d *plugin.QueryData, h
201216

202217
return nil, nil
203218
}
219+
220+
//// UTILITY FUNCTION
221+
222+
func extractVirtualMachinesForAvailabilitySet(_ context.Context, d *transform.TransformData) (interface{}, error) {
223+
availabilitySet := d.HydrateItem.(compute.AvailabilitySet)
224+
var properties []map[string]interface{}
225+
226+
if availabilitySet.AvailabilitySetProperties != nil && availabilitySet.AvailabilitySetProperties.VirtualMachines != nil {
227+
vmProperies := availabilitySet.AvailabilitySetProperties
228+
for _, i := range *vmProperies.VirtualMachines {
229+
objectMap := make(map[string]interface{})
230+
if i.ID != nil {
231+
objectMap["id"] = i.ID
232+
}
233+
properties = append(properties, objectMap)
234+
}
235+
}
236+
237+
return properties, nil
238+
}
239+
240+
func extractStatusForAvailabilitySet(_ context.Context, d *transform.TransformData) (interface{}, error) {
241+
availabilitySet := d.HydrateItem.(compute.AvailabilitySet)
242+
var properties []map[string]interface{}
243+
244+
if availabilitySet.AvailabilitySetProperties != nil && availabilitySet.AvailabilitySetProperties.Statuses != nil {
245+
properies := availabilitySet.AvailabilitySetProperties
246+
for _, i := range *properies.Statuses {
247+
objectMap := make(map[string]interface{})
248+
if i.Code != nil {
249+
objectMap["code"] = i.Code
250+
}
251+
if i.DisplayStatus != nil {
252+
objectMap["displayStatus"] = i.DisplayStatus
253+
}
254+
if i.Level != "" {
255+
objectMap["level"] = i.Level
256+
}
257+
if i.Message != nil {
258+
objectMap["message"] = i.Message
259+
}
260+
261+
properties = append(properties, objectMap)
262+
}
263+
}
264+
265+
return properties, nil
266+
}

0 commit comments

Comments
 (0)