diff --git a/plugins/source/azure/codegen0/internal/azparser/parser.go b/plugins/source/azure/codegen0/internal/azparser/parser.go index c4a445992667f8..d82ff2353db6ed 100644 --- a/plugins/source/azure/codegen0/internal/azparser/parser.go +++ b/plugins/source/azure/codegen0/internal/azparser/parser.go @@ -33,6 +33,10 @@ var newFuncToSkipPerPackage = map[string]map[string]bool{ "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/sql/armsql": { "NewDeletedServersClient": true, }, + "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute": { + // we migrated this to manual written client as it has childs + "NewVirtualMachinesClient": true, + }, "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/cosmos/armcosmos": { "NewDatabaseAccountsClient": true, }, diff --git a/plugins/source/azure/codegen1/recipes/compute.go b/plugins/source/azure/codegen1/recipes/compute.go index 07c1d2d58d6f5d..b62736b2298118 100644 --- a/plugins/source/azure/codegen1/recipes/compute.go +++ b/plugins/source/azure/codegen1/recipes/compute.go @@ -95,15 +95,6 @@ func Armcompute() []*Table { Pager: `NewListAllPager`, ResponseStruct: "VirtualMachineScaleSetsClientListAllResponse", }, - { - NewFunc: armcompute.NewVirtualMachinesClient, - PkgPath: "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute", - URL: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/virtualMachines", - Namespace: "microsoft.compute", - Multiplex: `client.SubscriptionMultiplexRegisteredNamespace(client.Namespacemicrosoft_compute)`, - Pager: `NewListAllPager`, - ResponseStruct: "VirtualMachinesClientListAllResponse", - }, } return tables } diff --git a/plugins/source/azure/codegen2/main.go b/plugins/source/azure/codegen2/main.go index 5ff72e017b2d3b..9b95ea8bb19988 100644 --- a/plugins/source/azure/codegen2/main.go +++ b/plugins/source/azure/codegen2/main.go @@ -145,7 +145,9 @@ func initTable(parent *recipes.Table, r *recipes.Table) error { if r.Relations != nil { for _, relation := range r.Relations { r.Table.Relations = append(r.Table.Relations, relation.Name+"()") - initTable(r, relation) + if err := initTable(r, relation); err != nil { + return err + } } } return nil @@ -162,7 +164,7 @@ func generateTable(parent *recipes.Table, r *recipes.Table) error { } var buff bytes.Buffer if err := tpl.Execute(&buff, r); err != nil { - return fmt.Errorf("failed to execute template for %s: %w", r.Table.Name, err) + return fmt.Errorf("failed to execute template for %w", err) } filePath := path.Join(currentDir, "../resources/services", r.PackageName) diff --git a/plugins/source/azure/codegen2/recipes/compute.go b/plugins/source/azure/codegen2/recipes/compute.go index fd1b45d014a178..e1e173518d78b4 100644 --- a/plugins/source/azure/codegen2/recipes/compute.go +++ b/plugins/source/azure/codegen2/recipes/compute.go @@ -113,18 +113,6 @@ func init() { Multiplex: `client.SubscriptionMultiplexRegisteredNamespace(client.Namespacemicrosoft_compute)`, ExtraColumns: DefaultExtraColumns, }, - { - Service: "armcompute", - Name: "virtual_machines", - Struct: &armcompute.VirtualMachine{}, - ResponseStruct: &armcompute.VirtualMachinesClientListAllResponse{}, - Client: &armcompute.VirtualMachinesClient{}, - ListFunc: (&armcompute.VirtualMachinesClient{}).NewListAllPager, - NewFunc: armcompute.NewVirtualMachinesClient, - URL: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/virtualMachines", - Multiplex: `client.SubscriptionMultiplexRegisteredNamespace(client.Namespacemicrosoft_compute)`, - ExtraColumns: DefaultExtraColumns, - }, } Tables = append(Tables, tables...) } diff --git a/plugins/source/azure/codegen2/recipes/compute_e.go b/plugins/source/azure/codegen2/recipes/compute_e.go index 001ddf23fb13d0..176846d969bd2e 100644 --- a/plugins/source/azure/codegen2/recipes/compute_e.go +++ b/plugins/source/azure/codegen2/recipes/compute_e.go @@ -26,6 +26,26 @@ func init() { }, }, }, + { + Service: "armcompute", + Name: "virtual_machines", + Struct: &armcompute.VirtualMachine{}, + ResponseStruct: &armcompute.VirtualMachinesClientListAllResponse{}, + Client: &armcompute.VirtualMachinesClient{}, + ListFunc: (&armcompute.VirtualMachinesClient{}).NewListAllPager, + NewFunc: armcompute.NewVirtualMachinesClient, + URL: "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/virtualMachines", + Multiplex: `client.SubscriptionMultiplexRegisteredNamespace(client.Namespacemicrosoft_compute)`, + SkipMock: true, + ExtraColumns: []codegen.ColumnDefinition{ + SubscriptionIdColumn, + { + Name: "instance_view", + Type: schema.TypeJSON, + Resolver: `getInstanceView`, + }, + }, + }, } Tables = append(Tables, tables...) } diff --git a/plugins/source/azure/docs/tables/README.md b/plugins/source/azure/docs/tables/README.md index 4e51e8d074bc24..fe234db7cedc7f 100644 --- a/plugins/source/azure/docs/tables/README.md +++ b/plugins/source/azure/docs/tables/README.md @@ -53,8 +53,8 @@ - [azure_compute_restore_point_collections](azure_compute_restore_point_collections.md) - [azure_compute_snapshots](azure_compute_snapshots.md) - [azure_compute_virtual_machine_scale_sets](azure_compute_virtual_machine_scale_sets.md) -- [azure_compute_virtual_machines](azure_compute_virtual_machines.md) - [azure_compute_skus](azure_compute_skus.md) +- [azure_compute_virtual_machines](azure_compute_virtual_machines.md) - [azure_confluent_marketplace_agreements](azure_confluent_marketplace_agreements.md) - [azure_connectedvmware_clusters](azure_connectedvmware_clusters.md) - [azure_connectedvmware_datastores](azure_connectedvmware_datastores.md) diff --git a/plugins/source/azure/docs/tables/azure_compute_virtual_machines.md b/plugins/source/azure/docs/tables/azure_compute_virtual_machines.md index aa2e8b8b752095..61ef7bbf4a3f4e 100644 --- a/plugins/source/azure/docs/tables/azure_compute_virtual_machines.md +++ b/plugins/source/azure/docs/tables/azure_compute_virtual_machines.md @@ -11,6 +11,7 @@ The primary key for this table is **id**. |_cq_id|UUID| |_cq_parent_id|UUID| |subscription_id|String| +|instance_view|JSON| |location|String| |extended_location|JSON| |identity|JSON| diff --git a/plugins/source/azure/resources/plugin/tables.go b/plugins/source/azure/resources/plugin/tables.go index 2be73b48dae2ab..8de8cb3b325ef2 100644 --- a/plugins/source/azure/resources/plugin/tables.go +++ b/plugins/source/azure/resources/plugin/tables.go @@ -143,8 +143,8 @@ func generatedTables() []*schema.Table { compute.RestorePointCollections(), compute.Snapshots(), compute.VirtualMachineScaleSets(), - compute.VirtualMachines(), compute.Skus(), + compute.VirtualMachines(), confluent.MarketplaceAgreements(), connectedvmware.Clusters(), connectedvmware.Datastores(), diff --git a/plugins/source/azure/resources/services/compute/virtual_machine_instance_views_fetch.go b/plugins/source/azure/resources/services/compute/virtual_machine_instance_views_fetch.go new file mode 100644 index 00000000000000..0b96df615c6d6c --- /dev/null +++ b/plugins/source/azure/resources/services/compute/virtual_machine_instance_views_fetch.go @@ -0,0 +1,27 @@ +package compute + +import ( + "context" + + "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute" + "github.com/cloudquery/cloudquery/plugins/source/azure/client" + "github.com/cloudquery/plugin-sdk/schema" +) + +func getInstanceView(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { + cl := meta.(*client.Client) + svc, err := armcompute.NewVirtualMachinesClient(cl.SubscriptionId, cl.Creds, cl.Options) + if err != nil { + return err + } + item := resource.Item.(*armcompute.VirtualMachine) + group, err := client.ParseResourceGroup(*item.ID) + if err != nil { + return err + } + instanceView, err := svc.InstanceView(ctx, group, *item.Name, nil) + if err != nil { + return err + } + return resource.Set(c.Name, instanceView.VirtualMachineInstanceView) +} diff --git a/plugins/source/azure/resources/services/compute/virtual_machines.go b/plugins/source/azure/resources/services/compute/virtual_machines.go index 4d66b8153f7c17..31b83dcc82c3bc 100644 --- a/plugins/source/azure/resources/services/compute/virtual_machines.go +++ b/plugins/source/azure/resources/services/compute/virtual_machines.go @@ -19,6 +19,11 @@ func VirtualMachines() *schema.Table { Type: schema.TypeString, Resolver: client.ResolveAzureSubscription, }, + { + Name: "instance_view", + Type: schema.TypeJSON, + Resolver: getInstanceView, + }, { Name: "location", Type: schema.TypeString, diff --git a/plugins/source/azure/resources/services/compute/virtual_machines_mock_test.go b/plugins/source/azure/resources/services/compute/virtual_machines_mock_test.go index 49831c05a24a0f..d8c865a3d645bf 100644 --- a/plugins/source/azure/resources/services/compute/virtual_machines_mock_test.go +++ b/plugins/source/azure/resources/services/compute/virtual_machines_mock_test.go @@ -1,12 +1,12 @@ -// Code generated by codegen2; DO NOT EDIT. package compute import ( "encoding/json" - "github.com/cloudquery/cloudquery/plugins/source/azure/client" "net/http" "testing" + "github.com/cloudquery/cloudquery/plugins/source/azure/client" + "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute" "github.com/cloudquery/plugin-sdk/faker" "github.com/gorilla/mux" @@ -32,6 +32,23 @@ func createVirtualMachines(router *mux.Router) error { return } }) + + var instanceViewItem armcompute.VirtualMachinesClientInstanceViewResponse + if err := faker.FakeObject(&instanceViewItem); err != nil { + return err + } + // /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/instanceView + router.HandleFunc("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/instanceView", func(w http.ResponseWriter, r *http.Request) { + b, err := json.Marshal(&instanceViewItem) + if err != nil { + http.Error(w, "unable to marshal request: "+err.Error(), http.StatusBadRequest) + return + } + if _, err := w.Write(b); err != nil { + http.Error(w, "failed to write", http.StatusBadRequest) + return + } + }) return nil } diff --git a/website/pages/docs/plugins/sources/azure/tables.md b/website/pages/docs/plugins/sources/azure/tables.md index d8bcb7097ff2d5..697c6a32f7223b 100644 --- a/website/pages/docs/plugins/sources/azure/tables.md +++ b/website/pages/docs/plugins/sources/azure/tables.md @@ -53,8 +53,8 @@ - [azure_compute_restore_point_collections](https://github.com/cloudquery/cloudquery/blob/main/plugins/source/azure/docs/tables/azure_compute_restore_point_collections.md) - [azure_compute_snapshots](https://github.com/cloudquery/cloudquery/blob/main/plugins/source/azure/docs/tables/azure_compute_snapshots.md) - [azure_compute_virtual_machine_scale_sets](https://github.com/cloudquery/cloudquery/blob/main/plugins/source/azure/docs/tables/azure_compute_virtual_machine_scale_sets.md) -- [azure_compute_virtual_machines](https://github.com/cloudquery/cloudquery/blob/main/plugins/source/azure/docs/tables/azure_compute_virtual_machines.md) - [azure_compute_skus](https://github.com/cloudquery/cloudquery/blob/main/plugins/source/azure/docs/tables/azure_compute_skus.md) +- [azure_compute_virtual_machines](https://github.com/cloudquery/cloudquery/blob/main/plugins/source/azure/docs/tables/azure_compute_virtual_machines.md) - [azure_confluent_marketplace_agreements](https://github.com/cloudquery/cloudquery/blob/main/plugins/source/azure/docs/tables/azure_confluent_marketplace_agreements.md) - [azure_connectedvmware_clusters](https://github.com/cloudquery/cloudquery/blob/main/plugins/source/azure/docs/tables/azure_connectedvmware_clusters.md) - [azure_connectedvmware_datastores](https://github.com/cloudquery/cloudquery/blob/main/plugins/source/azure/docs/tables/azure_connectedvmware_datastores.md)