@@ -2,6 +2,7 @@ package azure
2
2
3
3
import (
4
4
"context"
5
+ "strings"
5
6
6
7
"github.com/Azure/azure-sdk-for-go/profiles/latest/compute/mgmt/compute"
7
8
"github.com/turbot/steampipe-plugin-sdk/v5/grpc/proto"
@@ -82,13 +83,15 @@ func tableAzureComputeAvailabilitySet(_ context.Context) *plugin.Table {
82
83
Name : "status" ,
83
84
Description : "The resource status information" ,
84
85
Type : proto .ColumnType_JSON ,
85
- Transform : transform .FromField ("AvailabilitySetProperties.Statuses" ),
86
+ Hydrate : getAzureComputeAvailabilitySet ,
87
+ Transform : transform .From (extractStatusForAvailabilitySet ),
86
88
},
87
89
{
88
90
Name : "virtual_machines" ,
89
91
Description : "A list of references to all virtual machines in the availability set" ,
90
92
Type : proto .ColumnType_JSON ,
91
- Transform : transform .FromField ("AvailabilitySetProperties.VirtualMachines" ),
93
+ Hydrate : getAzureComputeAvailabilitySet ,
94
+ Transform : transform .From (extractVirtualMachinesForAvailabilitySet ),
92
95
},
93
96
94
97
// Steampipe standard columns
@@ -175,10 +178,22 @@ func listAzureComputeAvailabilitySets(ctx context.Context, d *plugin.QueryData,
175
178
//// HYDRATE FUNCTIONS ////
176
179
177
180
func getAzureComputeAvailabilitySet (ctx context.Context , d * plugin.QueryData , h * plugin.HydrateData ) (interface {}, error ) {
178
- plugin . Logger ( ctx ). Trace ( "getAzureComputeAvailabilitySet" )
181
+ resourceGroup , name := "" , ""
179
182
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
+ }
182
197
183
198
session , err := GetNewSession (ctx , d , "MANAGEMENT" )
184
199
if err != nil {
@@ -201,3 +216,51 @@ func getAzureComputeAvailabilitySet(ctx context.Context, d *plugin.QueryData, h
201
216
202
217
return nil , nil
203
218
}
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