turbot / steampipe-plugin-azure

Use SQL to instantly query Azure resources across regions and subscriptions. Open source CLI. No DB required.
https://hub.steampipe.io/plugins/turbot/azure
Apache License 2.0
37 stars 17 forks source link

Add table azure_backup_policy. Closes #723 #739

Closed Priyanka-Chatterjee-2000 closed 5 months ago

Priyanka-Chatterjee-2000 commented 6 months ago

Integration test logs

Logs ``` TEST: tests/azure_backup_policy Running terraform data.azurerm_client_config.current: Reading... data.azurerm_client_config.current: Read complete after 0s [id=Y2xpZW50Q29uZmlncy9jbGllbnRJZD0wNGIwNzc5NS04ZGRiLTQ2MWEtYmJlZS0wMmY5ZTFiZjdiNDY7b2JqZWN0SWQ9OTJmMGJmOTQtNGU0Ny00MWVhLWJjNjgtNWU5N2M1YTNmOWZmO3N1YnNjcmlwdGlvbklkPWQ0NmQ3NDE2LWY5NWYtNDc3MS1iYmI1LTUyOWQ0Yzc2NjU5Yzt0ZW5hbnRJZD1jZGZmZDcwOC03ZGEwLTRjZWEtYWJlYi0wYTRjMzM0ZDdmNjQ=] data.null_data_source.resource: Reading... data.null_data_source.resource: Read complete after 0s [id=static] Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: # azurerm_backup_policy_vm.example will be created + resource "azurerm_backup_policy_vm" "example" { + id = (known after apply) + instant_restore_retention_days = (known after apply) + name = "turbottest50821" + policy_type = "V1" + recovery_vault_name = "turbottest50821" + resource_group_name = "turbottest50821" + timezone = "UTC" + backup { + frequency = "Daily" + time = "23:00" } + retention_daily { + count = 10 } + retention_monthly { + count = 7 + include_last_days = false + weekdays = [ + "Sunday", + "Wednesday", ] + weeks = [ + "First", + "Last", ] } + retention_weekly { + count = 42 + weekdays = [ + "Friday", + "Saturday", + "Sunday", + "Wednesday", ] } + retention_yearly { + count = 77 + include_last_days = false + months = [ + "January", ] + weekdays = [ + "Sunday", ] + weeks = [ + "Last", ] } } # azurerm_recovery_services_vault.named_test_resource will be created + resource "azurerm_recovery_services_vault" "named_test_resource" { + classic_vmware_replication_enabled = (known after apply) + cross_region_restore_enabled = false + id = (known after apply) + immutability = (known after apply) + location = "eastus" + name = "turbottest50821" + public_network_access_enabled = true + resource_group_name = "turbottest50821" + sku = "Standard" + soft_delete_enabled = true + storage_mode_type = "GeoRedundant" } # azurerm_resource_group.named_test_resource will be created + resource "azurerm_resource_group" "named_test_resource" { + id = (known after apply) + location = "eastus" + name = "turbottest50821" } # null_resource.delay will be created + resource "null_resource" "delay" { + id = (known after apply) } Plan: 4 to add, 0 to change, 0 to destroy. Changes to Outputs: + id = (known after apply) + recovery_vault_name = "turbottest50821" + resource_aka = (known after apply) + resource_aka_lower = (known after apply) + resource_name = "turbottest50821" null_resource.delay: Creating... null_resource.delay: Provisioning with 'local-exec'... null_resource.delay (local-exec): Executing: ["/bin/sh" "-c" "sleep 700"] azurerm_resource_group.named_test_resource: Creating... azurerm_resource_group.named_test_resource: Creation complete after 4s [id=/subscriptions/d46d7416-f95f-4771-bbb5-529d4c76659c/resourceGroups/turbottest50821] azurerm_recovery_services_vault.named_test_resource: Creating... null_resource.delay: Still creating... [10s elapsed] azurerm_recovery_services_vault.named_test_resource: Still creating... [10s elapsed] null_resource.delay: Still creating... [20s elapsed] azurerm_recovery_services_vault.named_test_resource: Still creating... [20s elapsed] null_resource.delay: Still creating... [30s elapsed] azurerm_recovery_services_vault.named_test_resource: Still creating... [30s elapsed] null_resource.delay: Still creating... [40s elapsed] azurerm_recovery_services_vault.named_test_resource: Still creating... [40s elapsed] null_resource.delay: Still creating... [50s elapsed] azurerm_recovery_services_vault.named_test_resource: Still creating... [50s elapsed] null_resource.delay: Still creating... [1m0s elapsed] azurerm_recovery_services_vault.named_test_resource: Still creating... [1m0s elapsed] null_resource.delay: Still creating... [1m10s elapsed] azurerm_recovery_services_vault.named_test_resource: Still creating... [1m10s elapsed] null_resource.delay: Still creating... [1m20s elapsed] azurerm_recovery_services_vault.named_test_resource: Still creating... [1m20s elapsed] null_resource.delay: Still creating... [1m30s elapsed] azurerm_recovery_services_vault.named_test_resource: Still creating... [1m30s elapsed] null_resource.delay: Still creating... [1m40s elapsed] azurerm_recovery_services_vault.named_test_resource: Still creating... [1m40s elapsed] null_resource.delay: Still creating... [1m50s elapsed] azurerm_recovery_services_vault.named_test_resource: Still creating... [1m50s elapsed] azurerm_recovery_services_vault.named_test_resource: Creation complete after 1m51s [id=/subscriptions/d46d7416-f95f-4771-bbb5-529d4c76659c/resourceGroups/turbottest50821/providers/Microsoft.RecoveryServices/vaults/turbottest50821] null_resource.delay: Still creating... [2m0s elapsed] null_resource.delay: Still creating... [2m10s elapsed] null_resource.delay: Still creating... [2m20s elapsed] null_resource.delay: Still creating... [2m30s elapsed] null_resource.delay: Still creating... [2m40s elapsed] null_resource.delay: Still creating... [2m50s elapsed] null_resource.delay: Still creating... [3m0s elapsed] null_resource.delay: Still creating... [3m10s elapsed] null_resource.delay: Still creating... [3m20s elapsed] null_resource.delay: Still creating... [3m30s elapsed] null_resource.delay: Still creating... [3m40s elapsed] null_resource.delay: Still creating... [3m50s elapsed] null_resource.delay: Still creating... [4m0s elapsed] null_resource.delay: Still creating... [4m10s elapsed] null_resource.delay: Still creating... [4m20s elapsed] null_resource.delay: Still creating... [4m30s elapsed] null_resource.delay: Still creating... [4m40s elapsed] null_resource.delay: Still creating... [4m50s elapsed] null_resource.delay: Still creating... [5m0s elapsed] null_resource.delay: Still creating... [5m10s elapsed] null_resource.delay: Still creating... [5m20s elapsed] null_resource.delay: Still creating... [5m30s elapsed] null_resource.delay: Still creating... [5m40s elapsed] null_resource.delay: Still creating... [5m50s elapsed] null_resource.delay: Still creating... [6m0s elapsed] null_resource.delay: Still creating... [6m10s elapsed] null_resource.delay: Still creating... [6m20s elapsed] null_resource.delay: Still creating... [6m30s elapsed] null_resource.delay: Still creating... [6m40s elapsed] null_resource.delay: Still creating... [6m50s elapsed] null_resource.delay: Still creating... [7m0s elapsed] null_resource.delay: Still creating... [7m10s elapsed] null_resource.delay: Still creating... [7m20s elapsed] null_resource.delay: Still creating... [7m30s elapsed] null_resource.delay: Still creating... [7m40s elapsed] null_resource.delay: Still creating... [7m50s elapsed] null_resource.delay: Still creating... [8m0s elapsed] null_resource.delay: Still creating... [8m10s elapsed] null_resource.delay: Still creating... [8m20s elapsed] null_resource.delay: Still creating... [8m30s elapsed] null_resource.delay: Still creating... [8m40s elapsed] null_resource.delay: Still creating... [8m50s elapsed] null_resource.delay: Still creating... [9m0s elapsed] null_resource.delay: Still creating... [9m10s elapsed] null_resource.delay: Still creating... [9m20s elapsed] null_resource.delay: Still creating... [9m30s elapsed] null_resource.delay: Still creating... [9m40s elapsed] null_resource.delay: Still creating... [9m50s elapsed] null_resource.delay: Still creating... [10m0s elapsed] null_resource.delay: Still creating... [10m10s elapsed] null_resource.delay: Still creating... [10m20s elapsed] null_resource.delay: Still creating... [10m30s elapsed] null_resource.delay: Still creating... [10m40s elapsed] null_resource.delay: Still creating... [10m50s elapsed] null_resource.delay: Still creating... [11m0s elapsed] null_resource.delay: Still creating... [11m10s elapsed] null_resource.delay: Still creating... [11m20s elapsed] null_resource.delay: Still creating... [11m30s elapsed] null_resource.delay: Creation complete after 11m40s [id=5445153760698926584] azurerm_backup_policy_vm.example: Creating... azurerm_backup_policy_vm.example: Still creating... [10s elapsed] azurerm_backup_policy_vm.example: Creation complete after 14s [id=/subscriptions/d46d7416-f95f-4771-bbb5-529d4c76659c/resourceGroups/turbottest50821/providers/Microsoft.RecoveryServices/vaults/turbottest50821/backupPolicies/turbottest50821] Warning: Deprecated with data.null_data_source.resource, on variables.tf line 28, in data "null_data_source" "resource": 28: data "null_data_source" "resource" { The null_data_source was historically used to construct intermediate values to re-use elsewhere in configuration, the same can now be achieved using locals or the terraform_data resource type in Terraform 1.4 and later. (and one more similar warning elsewhere) Apply complete! Resources: 4 added, 0 changed, 0 destroyed. Outputs: id = "/subscriptions/1111111111111111111111/resourceGroups/turbottest50821/providers/Microsoft.RecoveryServices/vaults/turbottest50821/backupPolicies/turbottest50821" recovery_vault_name = "turbottest50821" resource_aka = "azure:///subscriptions/1111111111111111111111/resourceGroups/turbottest50821/providers/Microsoft.RecoveryServices/vaults/turbottest50821/backupPolicies/turbottest50821" resource_aka_lower = "azure:///subscriptions/1111111111111111111111/resourcegroups/turbottest50821/providers/microsoft.recoveryservices/vaults/turbottest50821/backuppolicies/turbottest50821" resource_name = "turbottest50821" Running SQL query: test-list-query.sql [ { "id": "/subscriptions/1111111111111111111111/resourceGroups/turbottest50821/providers/Microsoft.RecoveryServices/vaults/turbottest50821/backupPolicies/turbottest50821", "name": "turbottest50821", "vault_name": "turbottest50821" } ] ✔ PASSED Running SQL query: test-not-found-query.sql [] ✔ PASSED Running SQL query: test-turbot-query.sql [ { "akas": [ "azure:///subscriptions/1111111111111111111111/resourceGroups/turbottest50821/providers/Microsoft.RecoveryServices/vaults/turbottest50821/backupPolicies/turbottest50821", "azure:///subscriptions/1111111111111111111111/resourcegroups/turbottest50821/providers/microsoft.recoveryservices/vaults/turbottest50821/backuppolicies/turbottest50821" ], "name": "turbottest50821", "title": "turbottest50821" } ] ✔ PASSED POSTTEST: tests/azure_backup_policy TEARDOWN: tests/azure_backup_policy SUMMARY: 1/1 passed. ```

Example query results

Results ``` select name, id, resource_group, vault_name, type from azure_backup_policy; +-------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------> | name | id > +-------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------> | HourlyLogBackup | /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/steampipe-test-03042024/providers/Microsoft.RecoveryServices/vaults/steampipe-test-03> | EnhancedPolicy | /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/steampipe-test-03042024/providers/Microsoft.RecoveryServices/vaults/steampipe-test-03> | DefaultPolicy | /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/steampipe-test-03042024/providers/Microsoft.RecoveryServices/vaults/steampipe-test-03> | steampipe-test-03042024 | /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/steampipe-test-03042024/providers/Microsoft.RecoveryServices/vaults/steampipe-test-03> +-------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------> select name, id, resource_group, vault_name, azure_iaas_vm_protection_policy_property, type from azure_backup_policy +-------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------> | name | id > +-------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------> | HourlyLogBackup | /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/steampipe-test-03042024/providers/Microsoft.RecoveryServices/vaults/steampipe-test-03> | steampipe-test-03042024 | /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/steampipe-test-03042024/providers/Microsoft.RecoveryServices/vaults/steampipe-test-03> | | > | EnhancedPolicy | /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/steampipe-test-03042024/providers/Microsoft.RecoveryServices/vaults/steampipe-test-03> | DefaultPolicy | /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/steampipe-test-03042024/providers/Microsoft.RecoveryServices/vaults/steampipe-test-03> +-------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------> select name, id, resource_group, vault_name, azure_iaas_vm_protection_policy_property->'retentionPolicy'->'dailySchedule'->>'retentionDuration' as retention_duration_days from azure_backup_policy where azure_iaas_vm_protection_policy_property is not null and cast(azure_iaas_vm_protection_policy_property->'retentionPolicy'->'dailySchedule'->'retentionDuration' ->> 'count' as integer) > 30; +------+----+----------------+------------+-------------------------+ | name | id | resource_group | vault_name | retention_duration_days | +------+----+----------------+------------+-------------------------+ +------+----+----------------+------------+-------------------------+ > select name, id, resource_group, vault_name, azure_iaas_vm_protection_policy_property->'retentionPolicy'->'dailySchedule'->>'retentionDuration' as retention_duration_days from azure_backup_policy where azure_iaas_vm_protection_policy_property is not null and cast(azure_iaas_vm_protection_policy_property->'retentionPolicy'->'dailySchedule'->'retentionDuration' ->> 'count' as integer) < 30; +-------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------> | name | id > +-------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------> | steampipe-test-03042024 | /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/steampipe-test-03042024/providers/Microsoft.RecoveryServices/vaults/steampipe-test-03> +-------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------> select name as policy_name, vault_name, azure_vm_workload_protection_policy_property->>'backupManagementType' as management_type, jsonb_array_length(azure_vm_workload_protection_policy_property->'subProtectionPolicy') as number_of_sub_policies, jsonb_pretty(azure_vm_workload_protection_policy_property->'subProtectionPolicy') as sub_protection_policies from azure_backup_policy where azure_vm_workload_protection_policy_property is not null; +-----------------+-------------------------+-----------------+------------------------+--------------------------------------------------------------+ | policy_name | vault_name | management_type | number_of_sub_policies | sub_protection_policies | +-----------------+-------------------------+-----------------+------------------------+--------------------------------------------------------------+ | HourlyLogBackup | steampipe-test-03042024 | AzureWorkload | 2 | [ | | | | | | { | | | | | | "policyType": "Full", | | | | | | "schedulePolicy": { | | | | | | "scheduleRunTimes": [ | | | | | | "2024-04-05T17:30:00Z" | | | | | | ], | | | | | | "schedulePolicyType": "SimpleSchedulePolicy", | | | | | | "scheduleRunFrequency": "Daily", | | | | | | "scheduleWeeklyFrequency": 0 | | | | | | }, | | | | | | "retentionPolicy": { | | | | | | "dailySchedule": { | | | | | | "retentionTimes": [ | | | | | | "2024-04-05T17:30:00Z" | | | | | | ], | | | | | | "retentionDuration": { | | | | | | "count": 30, | | | | | | "durationType": "Days" | | | | | | } | | | | | | }, | | | | | | "retentionPolicyType": "LongTermRetentionPolicy" | | | | | | } | | | | | | }, | | | | | | { | | | | | | "policyType": "Log", | | | | | | "schedulePolicy": { | | | | | | "schedulePolicyType": "LogSchedulePolicy", | | | | | | "scheduleFrequencyInMins": 60 | | | | | | }, | | | | | | "retentionPolicy": { | | | | | | "retentionDuration": { | | | | | | "count": 30, | | | | | | "durationType": "Days" | | | | | | }, | | | | | | "retentionPolicyType": "SimpleRetentionPolicy" | | | | | | } | | | | | | } | | | | | | ] | +-----------------+-------------------------+-----------------+------------------------+--------------------------------------------------------------+ ```