diff --git a/docs/usage/self-hosted-experimental.md b/docs/usage/self-hosted-experimental.md index 2f00716900c3b6..39e8b789a159af 100644 --- a/docs/usage/self-hosted-experimental.md +++ b/docs/usage/self-hosted-experimental.md @@ -35,6 +35,10 @@ If set to any value, Renovate will always paginate requests to GitHub fully, ins If set to "false" (string), Renovate will remove any existing `package-lock.json` before attempting to update it. +## RENOVATE_X_TERRAFORM_LOCK_FILE + +If set to any value, Renovate will update Terraform lock files and allow lockfile maintenance. + ## RENOVATE_USER_AGENT If set to any string, Renovate will use this as the `user-agent` it sends with HTTP requests. diff --git a/lib/datasource/terraform-provider/__fixtures__/azurerm-provider.json b/lib/datasource/terraform-provider/__fixtures__/azurerm-provider.json index 749db58549e045..da14abd0f33161 100644 --- a/lib/datasource/terraform-provider/__fixtures__/azurerm-provider.json +++ b/lib/datasource/terraform-provider/__fixtures__/azurerm-provider.json @@ -1 +1,3524 @@ -{"id":"hashicorp/azurerm/1.37.0","owner":"hashicorp","namespace":"hashicorp","name":"azurerm","alias":"azurerm","version":"1.37.0","tag":"v1.37.0","description":"terraform-provider-azurerm","source":"https://github.com/terraform-providers/terraform-provider-azurerm","published_at":"2019-11-26T08:22:56Z","downloads":5181001,"official":true,"versions":["0.1.0","0.1.1","0.1.2","0.1.3","0.1.4","0.1.5","0.1.6","0.1.7","0.2.0","0.2.1","0.2.2","0.3.0","0.3.1","0.3.2","0.3.3","1.0.0","1.0.1","1.1.0","1.1.1","1.1.2","1.2.0","1.3.0","1.3.1","1.3.2","1.3.3","1.4.0","1.5.0","1.6.0","1.7.0","1.8.0","1.9.0","1.10.0","1.11.0","1.12.0","1.13.0","1.14.0","1.15.0","1.16.0","1.17.0","1.18.0","1.19.0","1.20.0","1.21.0","1.22.0","1.22.1","1.23.0","1.24.0","1.25.0","1.26.0","1.27.0","1.27.1","1.28.0","1.29.0","1.30.0","1.30.1","1.31.0","1.32.0","1.32.1","1.33.0","1.33.1","1.34.0","1.35.0","1.36.0","1.36.1","1.37.0"],"docs":[{"id":"27489","title":"overview","path":"website/docs/index.html.markdown","slug":"index","category":"overview","subcategory":""},{"id":"27490","title":"api_management","path":"website/docs/d/api_management.html.markdown","slug":"api_management","category":"data-sources","subcategory":""},{"id":"27491","title":"api_management_api","path":"website/docs/d/api_management_api.html.markdown","slug":"api_management_api","category":"data-sources","subcategory":""},{"id":"27492","title":"api_management_group","path":"website/docs/d/api_management_group.html.markdown","slug":"api_management_group","category":"data-sources","subcategory":""},{"id":"27493","title":"api_management_product","path":"website/docs/d/api_management_product.html.markdown","slug":"api_management_product","category":"data-sources","subcategory":""},{"id":"27494","title":"api_management_user","path":"website/docs/d/api_management_user.html.markdown","slug":"api_management_user","category":"data-sources","subcategory":""},{"id":"27495","title":"app_service","path":"website/docs/d/app_service.html.markdown","slug":"app_service","category":"data-sources","subcategory":""},{"id":"27496","title":"app_service_certificate","path":"website/docs/d/app_service_certificate.html.markdown","slug":"app_service_certificate","category":"data-sources","subcategory":""},{"id":"27497","title":"app_service_certificate_order","path":"website/docs/d/app_service_certificate_order.html.markdown","slug":"app_service_certificate_order","category":"data-sources","subcategory":""},{"id":"27498","title":"app_service_plan","path":"website/docs/d/app_service_plan.html.markdown","slug":"app_service_plan","category":"data-sources","subcategory":""},{"id":"27499","title":"application_insights","path":"website/docs/d/application_insights.html.markdown","slug":"application_insights","category":"data-sources","subcategory":""},{"id":"27500","title":"application_security_group","path":"website/docs/d/application_security_group.html.markdown","slug":"application_security_group","category":"data-sources","subcategory":""},{"id":"27501","title":"automation_account","path":"website/docs/d/automation_account.html.markdown","slug":"automation_account","category":"data-sources","subcategory":""},{"id":"27502","title":"automation_variable_bool","path":"website/docs/d/automation_variable_bool.html.markdown","slug":"automation_variable_bool","category":"data-sources","subcategory":""},{"id":"27503","title":"automation_variable_datetime","path":"website/docs/d/automation_variable_datetime.html.markdown","slug":"automation_variable_datetime","category":"data-sources","subcategory":""},{"id":"27504","title":"automation_variable_int","path":"website/docs/d/automation_variable_int.html.markdown","slug":"automation_variable_int","category":"data-sources","subcategory":""},{"id":"27505","title":"automation_variable_string","path":"website/docs/d/automation_variable_string.html.markdown","slug":"automation_variable_string","category":"data-sources","subcategory":""},{"id":"27506","title":"availability_set","path":"website/docs/d/availability_set.html.markdown","slug":"availability_set","category":"data-sources","subcategory":""},{"id":"27507","title":"azuread_application","path":"website/docs/d/azuread_application.html.markdown","slug":"azuread_application","category":"data-sources","subcategory":""},{"id":"27508","title":"azuread_service_principal","path":"website/docs/d/azuread_service_principal.html.markdown","slug":"azuread_service_principal","category":"data-sources","subcategory":""},{"id":"27509","title":"batch_account","path":"website/docs/d/batch_account.html.markdown","slug":"batch_account","category":"data-sources","subcategory":""},{"id":"27510","title":"batch_certificate","path":"website/docs/d/batch_certificate.html.markdown","slug":"batch_certificate","category":"data-sources","subcategory":""},{"id":"27511","title":"batch_pool","path":"website/docs/d/batch_pool.html.markdown","slug":"batch_pool","category":"data-sources","subcategory":""},{"id":"27512","title":"builtin_role_definition","path":"website/docs/d/builtin_role_definition.markdown","slug":"builtin_role_definition","category":"data-sources","subcategory":""},{"id":"27513","title":"cdn_profile","path":"website/docs/d/cdn_profile.html.markdown","slug":"cdn_profile","category":"data-sources","subcategory":""},{"id":"27514","title":"client_config","path":"website/docs/d/client_config.html.markdown","slug":"client_config","category":"data-sources","subcategory":""},{"id":"27515","title":"container_registry","path":"website/docs/d/container_registry.markdown","slug":"container_registry","category":"data-sources","subcategory":""},{"id":"27516","title":"cosmosdb_account","path":"website/docs/d/cosmosdb_account.html.markdown","slug":"cosmosdb_account","category":"data-sources","subcategory":""},{"id":"27517","title":"data_factory","path":"website/docs/d/data_factory.html.markdown","slug":"data_factory","category":"data-sources","subcategory":""},{"id":"27518","title":"data_lake_store","path":"website/docs/d/data_lake_store.html.markdown","slug":"data_lake_store","category":"data-sources","subcategory":""},{"id":"27519","title":"dev_test_lab","path":"website/docs/d/dev_test_lab.html.markdown","slug":"dev_test_lab","category":"data-sources","subcategory":""},{"id":"27520","title":"dev_test_virtual_network","path":"website/docs/d/dev_test_virtual_network.html.markdown","slug":"dev_test_virtual_network","category":"data-sources","subcategory":""},{"id":"27521","title":"dns_zone","path":"website/docs/d/dns_zone.html.markdown","slug":"dns_zone","category":"data-sources","subcategory":""},{"id":"27522","title":"eventhub_namespace","path":"website/docs/d/eventhub_namespace.html.markdown","slug":"eventhub_namespace","category":"data-sources","subcategory":""},{"id":"27523","title":"express_route_circuit","path":"website/docs/d/express_route_circuit.html.markdown","slug":"express_route_circuit","category":"data-sources","subcategory":""},{"id":"27524","title":"firewall","path":"website/docs/d/firewall.html.markdown","slug":"firewall","category":"data-sources","subcategory":""},{"id":"27525","title":"hdinsight_cluster","path":"website/docs/d/hdinsight_cluster.html.markdown","slug":"hdinsight_cluster","category":"data-sources","subcategory":""},{"id":"27526","title":"healthcare_service","path":"website/docs/d/healthcare_service.html.markdown","slug":"healthcare_service","category":"data-sources","subcategory":""},{"id":"27527","title":"image","path":"website/docs/d/image.html.markdown","slug":"image","category":"data-sources","subcategory":""},{"id":"27528","title":"key_vault","path":"website/docs/d/key_vault.html.markdown","slug":"key_vault","category":"data-sources","subcategory":""},{"id":"27529","title":"key_vault_access_policy","path":"website/docs/d/key_vault_access_policy.html.markdown","slug":"key_vault_access_policy","category":"data-sources","subcategory":""},{"id":"27530","title":"key_vault_key","path":"website/docs/d/key_vault_key.html.markdown","slug":"key_vault_key","category":"data-sources","subcategory":""},{"id":"27531","title":"key_vault_secret","path":"website/docs/d/key_vault_secret.html.markdown","slug":"key_vault_secret","category":"data-sources","subcategory":""},{"id":"27532","title":"kubernetes_cluster","path":"website/docs/d/kubernetes_cluster.html.markdown","slug":"kubernetes_cluster","category":"data-sources","subcategory":""},{"id":"27533","title":"kubernetes_service_versions","path":"website/docs/d/kubernetes_service_versions.html.markdown","slug":"kubernetes_service_versions","category":"data-sources","subcategory":""},{"id":"27534","title":"loadbalancer","path":"website/docs/d/loadbalancer.html.markdown","slug":"loadbalancer","category":"data-sources","subcategory":""},{"id":"27535","title":"loadbalancer_backend_address_pool","path":"website/docs/d/loadbalancer_backend_address_pool.html.markdown","slug":"loadbalancer_backend_address_pool","category":"data-sources","subcategory":""},{"id":"27536","title":"log_analytics_workspace","path":"website/docs/d/log_analytics_workspace.html.markdown","slug":"log_analytics_workspace","category":"data-sources","subcategory":""},{"id":"27537","title":"logic_app_workflow","path":"website/docs/d/logic_app_workflow.html.markdown","slug":"logic_app_workflow","category":"data-sources","subcategory":""},{"id":"27538","title":"managed_disk","path":"website/docs/d/managed_disk.html.markdown","slug":"managed_disk","category":"data-sources","subcategory":""},{"id":"27539","title":"management_group","path":"website/docs/d/management_group.html.markdown","slug":"management_group","category":"data-sources","subcategory":""},{"id":"27540","title":"maps_account","path":"website/docs/d/maps_account.html.markdown","slug":"maps_account","category":"data-sources","subcategory":""},{"id":"27541","title":"monitor_action_group","path":"website/docs/d/monitor_action_group.html.markdown","slug":"monitor_action_group","category":"data-sources","subcategory":""},{"id":"27542","title":"monitor_diagnostic_categories","path":"website/docs/d/monitor_diagnostic_categories.html.markdown","slug":"monitor_diagnostic_categories","category":"data-sources","subcategory":""},{"id":"27543","title":"monitor_log_profile","path":"website/docs/d/monitor_log_profile.html.markdown","slug":"monitor_log_profile","category":"data-sources","subcategory":""},{"id":"27544","title":"mssql_elasticpool","path":"website/docs/d/mssql_elasticpool.html.markdown","slug":"mssql_elasticpool","category":"data-sources","subcategory":""},{"id":"27545","title":"netapp_account","path":"website/docs/d/netapp_account.html.markdown","slug":"netapp_account","category":"data-sources","subcategory":"NetApp"},{"id":"27546","title":"netapp_pool","path":"website/docs/d/netapp_pool.html.markdown","slug":"netapp_pool","category":"data-sources","subcategory":""},{"id":"27547","title":"network_ddos_protection_plan","path":"website/docs/d/network_ddos_protection_plan.html.markdown","slug":"network_ddos_protection_plan","category":"data-sources","subcategory":""},{"id":"27548","title":"network_interface","path":"website/docs/d/network_interface.html.markdown","slug":"network_interface","category":"data-sources","subcategory":""},{"id":"27549","title":"network_security_group","path":"website/docs/d/network_security_group.html.markdown","slug":"network_security_group","category":"data-sources","subcategory":""},{"id":"27550","title":"network_watcher","path":"website/docs/d/network_watcher.html.markdown","slug":"network_watcher","category":"data-sources","subcategory":""},{"id":"27551","title":"notification_hub","path":"website/docs/d/notification_hub.html.markdown","slug":"notification_hub","category":"data-sources","subcategory":""},{"id":"27552","title":"notification_hub_namespace","path":"website/docs/d/notification_hub_namespace.html.markdown","slug":"notification_hub_namespace","category":"data-sources","subcategory":""},{"id":"27553","title":"platform_image","path":"website/docs/d/platform_image.html.markdown","slug":"platform_image","category":"data-sources","subcategory":""},{"id":"27554","title":"policy_definition","path":"website/docs/d/policy_definition.markdown","slug":"policy_definition","category":"data-sources","subcategory":""},{"id":"27555","title":"postgresql_server","path":"website/docs/d/postgresql_server.html.markdown","slug":"postgresql_server","category":"data-sources","subcategory":""},{"id":"27556","title":"private_link_service","path":"website/docs/d/private_link_service.html.markdown","slug":"private_link_service","category":"data-sources","subcategory":""},{"id":"27557","title":"private_link_service_endpoint_connections","path":"website/docs/d/private_link_service_endpoint_connections.html.markdown","slug":"private_link_service_endpoint_connections","category":"data-sources","subcategory":""},{"id":"27558","title":"proximity_placement_group","path":"website/docs/d/proximity_placement_group.html.markdown","slug":"proximity_placement_group","category":"data-sources","subcategory":""},{"id":"27559","title":"public_ip","path":"website/docs/d/public_ip.html.markdown","slug":"public_ip","category":"data-sources","subcategory":""},{"id":"27560","title":"public_ip_prefix","path":"website/docs/d/public_ip_prefix.html.markdown","slug":"public_ip_prefix","category":"data-sources","subcategory":""},{"id":"27561","title":"public_ips","path":"website/docs/d/public_ips.html.markdown","slug":"public_ips","category":"data-sources","subcategory":""},{"id":"27562","title":"recovery_services_protection_policy_vm","path":"website/docs/d/recovery_services_protection_policy_vm.markdown","slug":"recovery_services_protection_policy_vm","category":"data-sources","subcategory":""},{"id":"27563","title":"recovery_services_vault","path":"website/docs/d/recovery_services_vault.markdown","slug":"recovery_services_vault","category":"data-sources","subcategory":""},{"id":"27564","title":"redis_cache","path":"website/docs/d/redis_cache.html.markdown","slug":"redis_cache","category":"data-sources","subcategory":""},{"id":"27565","title":"resource_group","path":"website/docs/d/resource_group.html.markdown","slug":"resource_group","category":"data-sources","subcategory":""},{"id":"27566","title":"resources","path":"website/docs/d/resources.html.markdown","slug":"resources","category":"data-sources","subcategory":""},{"id":"27567","title":"role_definition","path":"website/docs/d/role_definition.markdown","slug":"role_definition","category":"data-sources","subcategory":""},{"id":"27568","title":"route_table","path":"website/docs/d/route_table.html.markdown","slug":"route_table","category":"data-sources","subcategory":""},{"id":"27569","title":"scheduler_job_collection","path":"website/docs/d/scheduler_job_collection.html.markdown","slug":"scheduler_job_collection","category":"data-sources","subcategory":""},{"id":"27570","title":"servicebus_namespace","path":"website/docs/d/servicebus_namespace.html.markdown","slug":"servicebus_namespace","category":"data-sources","subcategory":""},{"id":"27571","title":"servicebus_namespace_authorization_rule","path":"website/docs/d/servicebus_namespace_authorization_rule.html.markdown","slug":"servicebus_namespace_authorization_rule","category":"data-sources","subcategory":""},{"id":"27572","title":"shared_image","path":"website/docs/d/shared_image.html.markdown","slug":"shared_image","category":"data-sources","subcategory":""},{"id":"27573","title":"shared_image_gallery","path":"website/docs/d/shared_image_gallery.html.markdown","slug":"shared_image_gallery","category":"data-sources","subcategory":""},{"id":"27574","title":"shared_image_version","path":"website/docs/d/shared_image_version.html.markdown","slug":"shared_image_version","category":"data-sources","subcategory":""},{"id":"27575","title":"snapshot","path":"website/docs/d/snapshot.html.markdown","slug":"snapshot","category":"data-sources","subcategory":""},{"id":"27576","title":"sql_database","path":"website/docs/d/sql_database.html.markdown","slug":"sql_database","category":"data-sources","subcategory":""},{"id":"27577","title":"sql_server","path":"website/docs/d/sql_server.html.markdown","slug":"sql_server","category":"data-sources","subcategory":""},{"id":"27578","title":"storage_account","path":"website/docs/d/storage_account.html.markdown","slug":"storage_account","category":"data-sources","subcategory":""},{"id":"27579","title":"storage_account_blob_container_sas","path":"website/docs/d/storage_account_blob_container_sas.html.markdown","slug":"storage_account_blob_container_sas","category":"data-sources","subcategory":""},{"id":"27580","title":"storage_account_sas","path":"website/docs/d/storage_account_sas.html.markdown","slug":"storage_account_sas","category":"data-sources","subcategory":""},{"id":"27581","title":"storage_management_policy","path":"website/docs/d/storage_management_policy.html.markdown","slug":"storage_management_policy","category":"data-sources","subcategory":""},{"id":"27582","title":"stream_analytics_job","path":"website/docs/d/stream_analytics_job.html.markdown","slug":"stream_analytics_job","category":"data-sources","subcategory":""},{"id":"27583","title":"subnet","path":"website/docs/d/subnet.html.markdown","slug":"subnet","category":"data-sources","subcategory":""},{"id":"27584","title":"subscription","path":"website/docs/d/subscription.html.markdown","slug":"subscription","category":"data-sources","subcategory":""},{"id":"27585","title":"subscriptions","path":"website/docs/d/subscriptions.html.markdown","slug":"subscriptions","category":"data-sources","subcategory":""},{"id":"27586","title":"traffic_manager_geographical_location","path":"website/docs/d/traffic_manager_geographical_location.html.markdown","slug":"traffic_manager_geographical_location","category":"data-sources","subcategory":""},{"id":"27587","title":"user_assigned_identity","path":"website/docs/d/user_assigned_identity.html.markdown","slug":"user_assigned_identity","category":"data-sources","subcategory":""},{"id":"27588","title":"virtual_hub","path":"website/docs/d/virtual_hub.html.markdown","slug":"virtual_hub","category":"data-sources","subcategory":"Network"},{"id":"27589","title":"virtual_machine","path":"website/docs/d/virtual_machine.html.markdown","slug":"virtual_machine","category":"data-sources","subcategory":""},{"id":"27590","title":"virtual_network","path":"website/docs/d/virtual_network.html.markdown","slug":"virtual_network","category":"data-sources","subcategory":""},{"id":"27591","title":"virtual_network_gateway","path":"website/docs/d/virtual_network_gateway.html.markdown","slug":"virtual_network_gateway","category":"data-sources","subcategory":""},{"id":"27592","title":"virtual_network_gateway_connection","path":"website/docs/d/virtual_network_gateway_connection.html.markdown","slug":"virtual_network_gateway_connection","category":"data-sources","subcategory":""},{"id":"27593","title":"Azure Resource Manager: 2.0 Upgrade Guide","path":"website/docs/guides/2.0-upgrade-guide.html.markdown","slug":"2.0-upgrade-guide","category":"guides","subcategory":""},{"id":"27594","title":"Azure Provider: Authenticating via the Azure CLI","path":"website/docs/guides/azure_cli.html.markdown","slug":"azure_cli","category":"guides","subcategory":""},{"id":"27595","title":"Azure Provider: Authenticating via Managed Identity","path":"website/docs/guides/managed_service_identity.html.markdown","slug":"managed_service_identity","category":"guides","subcategory":""},{"id":"27596","title":"Azure Provider: Migrating to a renamed resource","path":"website/docs/guides/migrating-between-renamed-resources.html.markdown","slug":"migrating-between-renamed-resources","category":"guides","subcategory":""},{"id":"27597","title":"Azure Active Directory: Migrating to the AzureAD Provider","path":"website/docs/guides/migrating-to-azuread.html.markdown","slug":"migrating-to-azuread","category":"guides","subcategory":""},{"id":"27598","title":"Azure Provider: Authenticating via a Service Principal and a Client Certificate","path":"website/docs/guides/service_principal_client_certificate.html.markdown","slug":"service_principal_client_certificate","category":"guides","subcategory":""},{"id":"27599","title":"Azure Provider: Authenticating via a Service Principal and a Client Secret","path":"website/docs/guides/service_principal_client_secret.html.markdown","slug":"service_principal_client_secret","category":"guides","subcategory":""},{"id":"27600","title":"analysis_services_server","path":"website/docs/r/analysis_services_server.html.markdown","slug":"analysis_services_server","category":"resources","subcategory":"Analysis Services"},{"id":"27601","title":"api_management","path":"website/docs/r/api_management.html.markdown","slug":"api_management","category":"resources","subcategory":"API Management"},{"id":"27602","title":"api_management_api","path":"website/docs/r/api_management_api.html.markdown","slug":"api_management_api","category":"resources","subcategory":"API Management"},{"id":"27603","title":"api_management_api_operation","path":"website/docs/r/api_management_api_operation.html.markdown","slug":"api_management_api_operation","category":"resources","subcategory":"API Management"},{"id":"27604","title":"api_management_api_operation_policy","path":"website/docs/r/api_management_api_operation_policy.html.markdown","slug":"api_management_api_operation_policy","category":"resources","subcategory":"API Management"},{"id":"27605","title":"api_management_api_policy","path":"website/docs/r/api_management_api_policy.html.markdown","slug":"api_management_api_policy","category":"resources","subcategory":"API Management"},{"id":"27606","title":"api_management_api_schema","path":"website/docs/r/api_management_api_schema.html.markdown","slug":"api_management_api_schema","category":"resources","subcategory":"API Management"},{"id":"27607","title":"api_management_api_version_set","path":"website/docs/r/api_management_api_version_set.html.markdown","slug":"api_management_api_version_set","category":"resources","subcategory":"API Management"},{"id":"27608","title":"api_management_authorization_server","path":"website/docs/r/api_management_authorization_server.html.markdown","slug":"api_management_authorization_server","category":"resources","subcategory":"API Management"},{"id":"27609","title":"api_management_backend","path":"website/docs/r/api_management_backend.html.markdown","slug":"api_management_backend","category":"resources","subcategory":"API Management"},{"id":"27610","title":"api_management_certificate","path":"website/docs/r/api_management_certificate.html.markdown","slug":"api_management_certificate","category":"resources","subcategory":"API Management"},{"id":"27611","title":"api_management_group","path":"website/docs/r/api_management_group.html.markdown","slug":"api_management_group","category":"resources","subcategory":"API Management"},{"id":"27612","title":"api_management_group_user","path":"website/docs/r/api_management_group_user.html.markdown","slug":"api_management_group_user","category":"resources","subcategory":"API Management"},{"id":"27613","title":"api_management_logger","path":"website/docs/r/api_management_logger.html.markdown","slug":"api_management_logger","category":"resources","subcategory":"API Management"},{"id":"27614","title":"api_management_openid_connect_provider","path":"website/docs/r/api_management_openid_connect_provider.html.markdown","slug":"api_management_openid_connect_provider","category":"resources","subcategory":"API Management"},{"id":"27615","title":"api_management_product","path":"website/docs/r/api_management_product.html.markdown","slug":"api_management_product","category":"resources","subcategory":"API Management"},{"id":"27616","title":"api_management_product_api","path":"website/docs/r/api_management_product_api.html.markdown","slug":"api_management_product_api","category":"resources","subcategory":"API Management"},{"id":"27617","title":"api_management_product_group","path":"website/docs/r/api_management_product_group.html.markdown","slug":"api_management_product_group","category":"resources","subcategory":"API Management"},{"id":"27618","title":"api_management_product_policy","path":"website/docs/r/api_management_product_policy.html.markdown","slug":"api_management_product_policy","category":"resources","subcategory":"API Management"},{"id":"27619","title":"api_management_property","path":"website/docs/r/api_management_property.html.markdown","slug":"api_management_property","category":"resources","subcategory":"API Management"},{"id":"27620","title":"api_management_subscription","path":"website/docs/r/api_management_subscription.html.markdown","slug":"api_management_subscription","category":"resources","subcategory":"API Management"},{"id":"27621","title":"api_management_user","path":"website/docs/r/api_management_user.html.markdown","slug":"api_management_user","category":"resources","subcategory":"API Management"},{"id":"27622","title":"app_service","path":"website/docs/r/app_service.html.markdown","slug":"app_service","category":"resources","subcategory":"App Service (Web Apps)"},{"id":"27623","title":"app_service_active_slot","path":"website/docs/r/app_service_active_slot.html.markdown","slug":"app_service_active_slot","category":"resources","subcategory":"App Service (Web Apps)"},{"id":"27624","title":"app_service_certificate","path":"website/docs/r/app_service_certificate.html.markdown","slug":"app_service_certificate","category":"resources","subcategory":"App Service (Web Apps)"},{"id":"27625","title":"app_service_certificate_order","path":"website/docs/r/app_service_certificate_order.html.markdown","slug":"app_service_certificate_order","category":"resources","subcategory":"App Service (Web Apps)"},{"id":"27626","title":"app_service_custom_hostname_binding","path":"website/docs/r/app_service_custom_hostname_binding.html.markdown","slug":"app_service_custom_hostname_binding","category":"resources","subcategory":"App Service (Web Apps)"},{"id":"27627","title":"app_service_plan","path":"website/docs/r/app_service_plan.html.markdown","slug":"app_service_plan","category":"resources","subcategory":"App Service (Web Apps)"},{"id":"27628","title":"app_service_slot","path":"website/docs/r/app_service_slot.html.markdown","slug":"app_service_slot","category":"resources","subcategory":"App Service (Web Apps)"},{"id":"27629","title":"app_service_source_control_token","path":"website/docs/r/app_service_source_control_token.html.markdown","slug":"app_service_source_control_token","category":"resources","subcategory":"App Service (Web Apps)"},{"id":"27630","title":"application_gateway","path":"website/docs/r/application_gateway.html.markdown","slug":"application_gateway","category":"resources","subcategory":"Network"},{"id":"27631","title":"application_insights","path":"website/docs/r/application_insights.html.markdown","slug":"application_insights","category":"resources","subcategory":"Application Insights"},{"id":"27632","title":"application_insights_analytics_item","path":"website/docs/r/application_insights_analytics_item.html.markdown","slug":"application_insights_analytics_item","category":"resources","subcategory":"Application Insights"},{"id":"27633","title":"application_insights_api_key","path":"website/docs/r/application_insights_api_key.html.markdown","slug":"application_insights_api_key","category":"resources","subcategory":"Application Insights"},{"id":"27634","title":"application_insights_web_test","path":"website/docs/r/application_insights_web_test.html.markdown","slug":"application_insights_web_test","category":"resources","subcategory":"Application Insights"},{"id":"27635","title":"application_security_group","path":"website/docs/r/application_security_group.html.markdown","slug":"application_security_group","category":"resources","subcategory":"Network"},{"id":"27636","title":"automation_account","path":"website/docs/r/automation_account.html.markdown","slug":"automation_account","category":"resources","subcategory":"Automation"},{"id":"27637","title":"automation_credential","path":"website/docs/r/automation_credential.html.markdown","slug":"automation_credential","category":"resources","subcategory":"Automation"},{"id":"27638","title":"automation_dsc_configuration","path":"website/docs/r/automation_dsc_configuration.html.markdown","slug":"automation_dsc_configuration","category":"resources","subcategory":"Automation"},{"id":"27639","title":"automation_dsc_nodeconfiguration","path":"website/docs/r/automation_dsc_nodeconfiguration.html.markdown","slug":"automation_dsc_nodeconfiguration","category":"resources","subcategory":"Automation"},{"id":"27640","title":"automation_job_schedule","path":"website/docs/r/automation_job_schedule.html.markdown","slug":"automation_job_schedule","category":"resources","subcategory":"Automation"},{"id":"27641","title":"automation_module","path":"website/docs/r/automation_module.html.markdown","slug":"automation_module","category":"resources","subcategory":"Automation"},{"id":"27642","title":"automation_runbook","path":"website/docs/r/automation_runbook.html.markdown","slug":"automation_runbook","category":"resources","subcategory":"Automation"},{"id":"27643","title":"automation_schedule","path":"website/docs/r/automation_schedule.html.markdown","slug":"automation_schedule","category":"resources","subcategory":"Automation"},{"id":"27644","title":"automation_variable_bool","path":"website/docs/r/automation_variable_bool.html.markdown","slug":"automation_variable_bool","category":"resources","subcategory":"Automation"},{"id":"27645","title":"automation_variable_datetime","path":"website/docs/r/automation_variable_datetime.html.markdown","slug":"automation_variable_datetime","category":"resources","subcategory":"Automation"},{"id":"27646","title":"automation_variable_int","path":"website/docs/r/automation_variable_int.html.markdown","slug":"automation_variable_int","category":"resources","subcategory":"Automation"},{"id":"27647","title":"automation_variable_string","path":"website/docs/r/automation_variable_string.html.markdown","slug":"automation_variable_string","category":"resources","subcategory":"Automation"},{"id":"27648","title":"autoscale_setting","path":"website/docs/r/autoscale_setting.html.markdown","slug":"autoscale_setting","category":"resources","subcategory":"Monitor"},{"id":"27649","title":"availability_set","path":"website/docs/r/availability_set.html.markdown","slug":"availability_set","category":"resources","subcategory":"Compute"},{"id":"27650","title":"azuread_application","path":"website/docs/r/azuread_application.html.markdown","slug":"azuread_application","category":"resources","subcategory":"Azure Active Directory"},{"id":"27651","title":"azuread_service_principal","path":"website/docs/r/azuread_service_principal.html.markdown","slug":"azuread_service_principal","category":"resources","subcategory":"Azure Active Directory"},{"id":"27652","title":"azuread_service_principal_password","path":"website/docs/r/azuread_service_principal_password.html.markdown","slug":"azuread_service_principal_password","category":"resources","subcategory":"Azure Active Directory"},{"id":"27653","title":"bastion_host","path":"website/docs/r/bastion_host.html.markdown","slug":"bastion_host","category":"resources","subcategory":"Network"},{"id":"27654","title":"batch_account","path":"website/docs/r/batch_account.html.markdown","slug":"batch_account","category":"resources","subcategory":"Batch"},{"id":"27655","title":"batch_application","path":"website/docs/r/batch_application.html.markdown","slug":"batch_application","category":"resources","subcategory":"Batch"},{"id":"27656","title":"batch_certificate","path":"website/docs/r/batch_certificate.html.markdown","slug":"batch_certificate","category":"resources","subcategory":"Batch"},{"id":"27657","title":"batch_pool","path":"website/docs/r/batch_pool.html.markdown","slug":"batch_pool","category":"resources","subcategory":"Batch"},{"id":"27658","title":"bot_channel_email","path":"website/docs/r/bot_channel_email.markdown","slug":"bot_channel_email","category":"resources","subcategory":"Bot"},{"id":"27659","title":"bot_channel_slack","path":"website/docs/r/bot_channel_slack.markdown","slug":"bot_channel_slack","category":"resources","subcategory":"Bot"},{"id":"27660","title":"bot_channels_registration","path":"website/docs/r/bot_channels_registration.markdown","slug":"bot_channels_registration","category":"resources","subcategory":"Bot"},{"id":"27661","title":"bot_connection","path":"website/docs/r/bot_connection.markdown","slug":"bot_connection","category":"resources","subcategory":"Bot"},{"id":"27662","title":"bot_web_app","path":"website/docs/r/bot_web_app.markdown","slug":"bot_web_app","category":"resources","subcategory":"Bot"},{"id":"27663","title":"cdn_endpoint","path":"website/docs/r/cdn_endpoint.html.markdown","slug":"cdn_endpoint","category":"resources","subcategory":"CDN"},{"id":"27664","title":"cdn_profile","path":"website/docs/r/cdn_profile.html.markdown","slug":"cdn_profile","category":"resources","subcategory":"CDN"},{"id":"27665","title":"cognitive_account","path":"website/docs/r/cognitive_account.html.markdown","slug":"cognitive_account","category":"resources","subcategory":"Cognitive Services"},{"id":"27666","title":"connection_monitor","path":"website/docs/r/connection_monitor.html.markdown","slug":"connection_monitor","category":"resources","subcategory":"Network"},{"id":"27667","title":"container_group","path":"website/docs/r/container_group.html.markdown","slug":"container_group","category":"resources","subcategory":"Container"},{"id":"27668","title":"container_registry","path":"website/docs/r/container_registry.html.markdown","slug":"container_registry","category":"resources","subcategory":"Container"},{"id":"27669","title":"container_registry_webhook","path":"website/docs/r/container_registry_webhook.html.markdown","slug":"container_registry_webhook","category":"resources","subcategory":"Container"},{"id":"27670","title":"container_service","path":"website/docs/r/container_service.html.markdown","slug":"container_service","category":"resources","subcategory":"Container"},{"id":"27671","title":"cosmosdb_account","path":"website/docs/r/cosmosdb_account.html.markdown","slug":"cosmosdb_account","category":"resources","subcategory":"CosmosDB (DocumentDB)"},{"id":"27672","title":"cosmosdb_cassandra_keyspace","path":"website/docs/r/cosmosdb_cassandra_keyspace.html.markdown","slug":"cosmosdb_cassandra_keyspace","category":"resources","subcategory":"CosmosDB (DocumentDB)"},{"id":"27673","title":"cosmosdb_mongo_collection","path":"website/docs/r/cosmosdb_mongo_collection.html.markdown","slug":"cosmosdb_mongo_collection","category":"resources","subcategory":"CosmosDB (DocumentDB)"},{"id":"27674","title":"cosmosdb_mongo_database","path":"website/docs/r/cosmosdb_mongo_database.html.markdown","slug":"cosmosdb_mongo_database","category":"resources","subcategory":"CosmosDB (DocumentDB)"},{"id":"27675","title":"cosmosdb_sql_container","path":"website/docs/r/cosmosdb_sql_container.html.markdown","slug":"cosmosdb_sql_container","category":"resources","subcategory":"CosmosDB (DocumentDB)"},{"id":"27676","title":"cosmosdb_sql_database","path":"website/docs/r/cosmosdb_sql_database.html.markdown","slug":"cosmosdb_sql_database","category":"resources","subcategory":"CosmosDB (DocumentDB)"},{"id":"27677","title":"cosmosdb_table","path":"website/docs/r/cosmosdb_table.html.markdown","slug":"cosmosdb_table","category":"resources","subcategory":"CosmosDB (DocumentDB)"},{"id":"27678","title":"dashboard","path":"website/docs/r/dashboard.html.markdown","slug":"dashboard","category":"resources","subcategory":"Portal"},{"id":"27679","title":"data_factory","path":"website/docs/r/data_factory.html.markdown","slug":"data_factory","category":"resources","subcategory":"Data Factory"},{"id":"27680","title":"data_factory_dataset_mysql","path":"website/docs/r/data_factory_dataset_mysql.html.markdown","slug":"data_factory_dataset_mysql","category":"resources","subcategory":"Data Factory"},{"id":"27681","title":"data_factory_dataset_postgresql","path":"website/docs/r/data_factory_dataset_postgresql.html.markdown","slug":"data_factory_dataset_postgresql","category":"resources","subcategory":"Data Factory"},{"id":"27682","title":"data_factory_dataset_sql_server_table","path":"website/docs/r/data_factory_dataset_sql_server_table.html.markdown","slug":"data_factory_dataset_sql_server_table","category":"resources","subcategory":"Data Factory"},{"id":"27683","title":"data_factory_integration_runtime_managed","path":"website/docs/r/data_factory_integration_runtime_managed.html.markdown","slug":"data_factory_integration_runtime_managed","category":"resources","subcategory":"Data Factory"},{"id":"27684","title":"data_factory_linked_service_data_lake_storage_gen2","path":"website/docs/r/data_factory_linked_service_data_lake_storage_gen2.html.markdown","slug":"data_factory_linked_service_data_lake_storage_gen2","category":"resources","subcategory":"Data Factory"},{"id":"27685","title":"data_factory_linked_service_mysql","path":"website/docs/r/data_factory_linked_service_mysql.html.markdown","slug":"data_factory_linked_service_mysql","category":"resources","subcategory":"Data Factory"},{"id":"27686","title":"data_factory_linked_service_postgresql","path":"website/docs/r/data_factory_linked_service_postgresql.html.markdown","slug":"data_factory_linked_service_postgresql","category":"resources","subcategory":"Data Factory"},{"id":"27687","title":"data_factory_linked_service_sql_server","path":"website/docs/r/data_factory_linked_service_sql_server.html.markdown","slug":"data_factory_linked_service_sql_server","category":"resources","subcategory":"Data Factory"},{"id":"27688","title":"data_factory_pipeline","path":"website/docs/r/data_factory_pipeline.html.markdown","slug":"data_factory_pipeline","category":"resources","subcategory":"Data Factory"},{"id":"27689","title":"data_factory_trigger_schedule","path":"website/docs/r/data_factory_trigger_schedule.html.markdown","slug":"data_factory_trigger_schedule","category":"resources","subcategory":"Data Factory"},{"id":"27690","title":"data_lake_analytics_account","path":"website/docs/r/data_lake_analytics_account.html.markdown","slug":"data_lake_analytics_account","category":"resources","subcategory":"Data Lake"},{"id":"27691","title":"data_lake_analytics_firewall_rule","path":"website/docs/r/data_lake_analytics_firewall_rule.html.markdown","slug":"data_lake_analytics_firewall_rule","category":"resources","subcategory":"Data Lake"},{"id":"27692","title":"data_lake_store","path":"website/docs/r/data_lake_store.html.markdown","slug":"data_lake_store","category":"resources","subcategory":"Data Lake"},{"id":"27693","title":"data_lake_store_file","path":"website/docs/r/data_lake_store_file.html.markdown","slug":"data_lake_store_file","category":"resources","subcategory":"Data Lake"},{"id":"27694","title":"data_lake_store_firewall_rule","path":"website/docs/r/data_lake_store_firewall_rule.html.markdown","slug":"data_lake_store_firewall_rule","category":"resources","subcategory":"Data Lake"},{"id":"27695","title":"databricks_workspace","path":"website/docs/r/databricks_workspace.html.markdown","slug":"databricks_workspace","category":"resources","subcategory":"Databricks"},{"id":"27696","title":"ddos_protection_plan","path":"website/docs/r/ddos_protection_plan.html.markdown","slug":"ddos_protection_plan","category":"resources","subcategory":"Network"},{"id":"27697","title":"dev_test_lab","path":"website/docs/r/dev_test_lab.html.markdown","slug":"dev_test_lab","category":"resources","subcategory":"Dev Test"},{"id":"27698","title":"dev_test_linux_virtual_machine","path":"website/docs/r/dev_test_linux_virtual_machine.html.markdown","slug":"dev_test_linux_virtual_machine","category":"resources","subcategory":"Dev Test"},{"id":"27699","title":"dev_test_policy","path":"website/docs/r/dev_test_policy.html.markdown","slug":"dev_test_policy","category":"resources","subcategory":"Dev Test"},{"id":"27700","title":"dev_test_schedule","path":"website/docs/r/dev_test_schedule.html.markdown","slug":"dev_test_schedule","category":"resources","subcategory":"Dev Test"},{"id":"27701","title":"dev_test_virtual_network","path":"website/docs/r/dev_test_virtual_network.html.markdown","slug":"dev_test_virtual_network","category":"resources","subcategory":"Dev Test"},{"id":"27702","title":"dev_test_windows_virtual_machine","path":"website/docs/r/dev_test_windows_virtual_machine.html.markdown","slug":"dev_test_windows_virtual_machine","category":"resources","subcategory":"Dev Test"},{"id":"27703","title":"devspace_controller","path":"website/docs/r/devspace_controller.html.markdown","slug":"devspace_controller","category":"resources","subcategory":"DevSpace"},{"id":"27704","title":"dns_a_record","path":"website/docs/r/dns_a_record.html.markdown","slug":"dns_a_record","category":"resources","subcategory":"DNS"},{"id":"27705","title":"dns_aaaa_record","path":"website/docs/r/dns_aaaa_record.html.markdown","slug":"dns_aaaa_record","category":"resources","subcategory":"DNS"},{"id":"27706","title":"dns_caa_record","path":"website/docs/r/dns_caa_record.html.markdown","slug":"dns_caa_record","category":"resources","subcategory":"DNS"},{"id":"27707","title":"dns_cname_record","path":"website/docs/r/dns_cname_record.html.markdown","slug":"dns_cname_record","category":"resources","subcategory":"DNS"},{"id":"27708","title":"dns_mx_record","path":"website/docs/r/dns_mx_record.html.markdown","slug":"dns_mx_record","category":"resources","subcategory":"DNS"},{"id":"27709","title":"dns_ns_record","path":"website/docs/r/dns_ns_record.html.markdown","slug":"dns_ns_record","category":"resources","subcategory":"DNS"},{"id":"27710","title":"dns_ptr_record","path":"website/docs/r/dns_ptr_record.html.markdown","slug":"dns_ptr_record","category":"resources","subcategory":"DNS"},{"id":"27711","title":"dns_srv_record","path":"website/docs/r/dns_srv_record.html.markdown","slug":"dns_srv_record","category":"resources","subcategory":"DNS"},{"id":"27712","title":"dns_txt_record","path":"website/docs/r/dns_txt_record.html.markdown","slug":"dns_txt_record","category":"resources","subcategory":"DNS"},{"id":"27713","title":"dns_zone","path":"website/docs/r/dns_zone.html.markdown","slug":"dns_zone","category":"resources","subcategory":"DNS"},{"id":"27714","title":"eventgrid_domain","path":"website/docs/r/eventgrid_domain.html.markdown","slug":"eventgrid_domain","category":"resources","subcategory":"Messaging"},{"id":"27715","title":"eventgrid_event_subscription","path":"website/docs/r/eventgrid_event_subscription.html.markdown","slug":"eventgrid_event_subscription","category":"resources","subcategory":"Messaging"},{"id":"27716","title":"eventgrid_topic","path":"website/docs/r/eventgrid_topic.html.markdown","slug":"eventgrid_topic","category":"resources","subcategory":"Messaging"},{"id":"27717","title":"eventhub","path":"website/docs/r/eventhub.html.markdown","slug":"eventhub","category":"resources","subcategory":"Messaging"},{"id":"27718","title":"eventhub_authorization_rule","path":"website/docs/r/eventhub_authorization_rule.html.markdown","slug":"eventhub_authorization_rule","category":"resources","subcategory":"Messaging"},{"id":"27719","title":"eventhub_consumer_group","path":"website/docs/r/eventhub_consumer_group.html.markdown","slug":"eventhub_consumer_group","category":"resources","subcategory":"Messaging"},{"id":"27720","title":"eventhub_namespace","path":"website/docs/r/eventhub_namespace.html.markdown","slug":"eventhub_namespace","category":"resources","subcategory":"Messaging"},{"id":"27721","title":"eventhub_namespace_authorization_rule","path":"website/docs/r/eventhub_namespace_authorization_rule.html.markdown","slug":"eventhub_namespace_authorization_rule","category":"resources","subcategory":"Messaging"},{"id":"27722","title":"eventhub_namespace_disaster_recovery_config","path":"website/docs/r/eventhub_namespace_disaster_recovery_config.html.markdown","slug":"eventhub_namespace_disaster_recovery_config","category":"resources","subcategory":"Messaging"},{"id":"27723","title":"express_route_circuit","path":"website/docs/r/express_route_circuit.html.markdown","slug":"express_route_circuit","category":"resources","subcategory":"Network"},{"id":"27724","title":"express_route_circuit_authorization","path":"website/docs/r/express_route_circuit_authorization.html.markdown","slug":"express_route_circuit_authorization","category":"resources","subcategory":"Network"},{"id":"27725","title":"express_route_circuit_peering","path":"website/docs/r/express_route_circuit_peering.html.markdown","slug":"express_route_circuit_peering","category":"resources","subcategory":"Network"},{"id":"27726","title":"firewall","path":"website/docs/r/firewall.html.markdown","slug":"firewall","category":"resources","subcategory":"Network"},{"id":"27727","title":"firewall_application_rule_collection","path":"website/docs/r/firewall_application_rule_collection.html.markdown","slug":"firewall_application_rule_collection","category":"resources","subcategory":"Network"},{"id":"27728","title":"firewall_nat_rule_collection","path":"website/docs/r/firewall_nat_rule_collection.html.markdown","slug":"firewall_nat_rule_collection","category":"resources","subcategory":"Network"},{"id":"27729","title":"firewall_network_rule_collection","path":"website/docs/r/firewall_network_rule_collection.html.markdown","slug":"firewall_network_rule_collection","category":"resources","subcategory":"Network"},{"id":"27730","title":"front_door","path":"website/docs/r/front_door.html.markdown","slug":"front_door","category":"resources","subcategory":"Front Door"},{"id":"27731","title":"front_door_firewall_policy","path":"website/docs/r/front_door_firewall_policy.html.markdown","slug":"front_door_firewall_policy","category":"resources","subcategory":"Front Door"},{"id":"27732","title":"function_app","path":"website/docs/r/function_app.html.markdown","slug":"function_app","category":"resources","subcategory":"App Service (Web Apps)"},{"id":"27733","title":"hdinsight_hadoop_cluster","path":"website/docs/r/hdinsight_hadoop_cluster.html.markdown","slug":"hdinsight_hadoop_cluster","category":"resources","subcategory":"HDInsight"},{"id":"27734","title":"hdinsight_hbase_cluster","path":"website/docs/r/hdinsight_hbase_cluster.html.markdown","slug":"hdinsight_hbase_cluster","category":"resources","subcategory":"HDInsight"},{"id":"27735","title":"hdinsight_interactive_query_cluster","path":"website/docs/r/hdinsight_interactive_query_cluster.html.markdown","slug":"hdinsight_interactive_query_cluster","category":"resources","subcategory":"HDInsight"},{"id":"27736","title":"hdinsight_kafka_cluster","path":"website/docs/r/hdinsight_kafka_cluster.html.markdown","slug":"hdinsight_kafka_cluster","category":"resources","subcategory":"HDInsight"},{"id":"27737","title":"hdinsight_ml_services_cluster","path":"website/docs/r/hdinsight_ml_services_cluster.html.markdown","slug":"hdinsight_ml_services_cluster","category":"resources","subcategory":"HDInsight"},{"id":"27738","title":"hdinsight_rserver_cluster","path":"website/docs/r/hdinsight_rserver_cluster.html.markdown","slug":"hdinsight_rserver_cluster","category":"resources","subcategory":"HDInsight"},{"id":"27739","title":"hdinsight_spark_cluster","path":"website/docs/r/hdinsight_spark_cluster.html.markdown","slug":"hdinsight_spark_cluster","category":"resources","subcategory":"HDInsight"},{"id":"27740","title":"hdinsight_storm_cluster","path":"website/docs/r/hdinsight_storm_cluster.html.markdown","slug":"hdinsight_storm_cluster","category":"resources","subcategory":"HDInsight"},{"id":"27741","title":"healthcare_service","path":"website/docs/r/healthcare_service.html.markdown","slug":"healthcare_service","category":"resources","subcategory":"Healthcare API"},{"id":"27742","title":"image","path":"website/docs/r/image.html.markdown","slug":"image","category":"resources","subcategory":"Compute"},{"id":"27743","title":"iothub","path":"website/docs/r/iothub.html.markdown","slug":"iothub","category":"resources","subcategory":"IoT Hub"},{"id":"27744","title":"iothub_consumer_group","path":"website/docs/r/iothub_consumer_group.html.markdown","slug":"iothub_consumer_group","category":"resources","subcategory":"IoT Hub"},{"id":"27745","title":"iothub_dps","path":"website/docs/r/iothub_dps.html.markdown","slug":"iothub_dps","category":"resources","subcategory":"IoT Hub"},{"id":"27746","title":"iothub_dps_certificate","path":"website/docs/r/iothub_dps_certificate.html.markdown","slug":"iothub_dps_certificate","category":"resources","subcategory":"IoT Hub"},{"id":"27747","title":"iothub_endpoint_eventhub","path":"website/docs/r/iothub_endpoint_eventhub.html.markdown","slug":"iothub_endpoint_eventhub","category":"resources","subcategory":"Messaging"},{"id":"27748","title":"iothub_endpoint_servicebus_queue","path":"website/docs/r/iothub_endpoint_servicebus_queue.html.markdown","slug":"iothub_endpoint_servicebus_queue","category":"resources","subcategory":"Messaging"},{"id":"27749","title":"iothub_endpoint_servicebus_topic","path":"website/docs/r/iothub_endpoint_servicebus_topic.html.markdown","slug":"iothub_endpoint_servicebus_topic","category":"resources","subcategory":"Messaging"},{"id":"27750","title":"iothub_endpoint_storage_container","path":"website/docs/r/iothub_endpoint_storage_container.html.markdown","slug":"iothub_endpoint_storage_container","category":"resources","subcategory":"Messaging"},{"id":"27751","title":"iothub_route","path":"website/docs/r/iothub_route.html.markdown","slug":"iothub_route","category":"resources","subcategory":"Messaging"},{"id":"27752","title":"iothub_shared_access_policy","path":"website/docs/r/iothub_shared_access_policy.html.markdown","slug":"iothub_shared_access_policy","category":"resources","subcategory":"IoT Hub"},{"id":"27753","title":"key_vault","path":"website/docs/r/key_vault.html.markdown","slug":"key_vault","category":"resources","subcategory":"Key Vault"},{"id":"27754","title":"key_vault_access_policy","path":"website/docs/r/key_vault_access_policy.html.markdown","slug":"key_vault_access_policy","category":"resources","subcategory":"Key Vault"},{"id":"27755","title":"key_vault_certificate","path":"website/docs/r/key_vault_certificate.html.markdown","slug":"key_vault_certificate","category":"resources","subcategory":"Key Vault"},{"id":"27756","title":"key_vault_key","path":"website/docs/r/key_vault_key.html.markdown","slug":"key_vault_key","category":"resources","subcategory":"Key Vault"},{"id":"27757","title":"key_vault_secret","path":"website/docs/r/key_vault_secret.html.markdown","slug":"key_vault_secret","category":"resources","subcategory":"Key Vault"},{"id":"27758","title":"kubernetes_cluster","path":"website/docs/r/kubernetes_cluster.html.markdown","slug":"kubernetes_cluster","category":"resources","subcategory":"Container"},{"id":"27759","title":"kubernetes_cluster_node_pool","path":"website/docs/r/kubernetes_cluster_node_pool.html.markdown","slug":"kubernetes_cluster_node_pool","category":"resources","subcategory":"Container"},{"id":"27760","title":"kusto_cluster","path":"website/docs/r/kusto_cluster.html.markdown","slug":"kusto_cluster","category":"resources","subcategory":"Data Explorer"},{"id":"27761","title":"kusto_database","path":"website/docs/r/kusto_database.html.markdown","slug":"kusto_database","category":"resources","subcategory":"Data Explorer"},{"id":"27762","title":"kusto_eventhub_data_connection","path":"website/docs/r/kusto_eventhub_data_connection.html.markdown","slug":"kusto_eventhub_data_connection","category":"resources","subcategory":"Data Explorer"},{"id":"27763","title":"linux_virtual_machine_scale_set","path":"website/docs/r/linux_virtual_machine_scale_set.html.markdown","slug":"linux_virtual_machine_scale_set","category":"resources","subcategory":"Beta"},{"id":"27764","title":"loadbalancer","path":"website/docs/r/loadbalancer.html.markdown","slug":"loadbalancer","category":"resources","subcategory":"Load Balancer"},{"id":"27765","title":"loadbalancer_backend_address_pool","path":"website/docs/r/loadbalancer_backend_address_pool.html.markdown","slug":"loadbalancer_backend_address_pool","category":"resources","subcategory":"Load Balancer"},{"id":"27766","title":"loadbalancer_nat_pool","path":"website/docs/r/loadbalancer_nat_pool.html.markdown","slug":"loadbalancer_nat_pool","category":"resources","subcategory":"Load Balancer"},{"id":"27767","title":"loadbalancer_nat_rule","path":"website/docs/r/loadbalancer_nat_rule.html.markdown","slug":"loadbalancer_nat_rule","category":"resources","subcategory":"Load Balancer"},{"id":"27768","title":"loadbalancer_outbound_rule","path":"website/docs/r/loadbalancer_outbound_rule.html.markdown","slug":"loadbalancer_outbound_rule","category":"resources","subcategory":"Load Balancer"},{"id":"27769","title":"loadbalancer_probe","path":"website/docs/r/loadbalancer_probe.html.markdown","slug":"loadbalancer_probe","category":"resources","subcategory":"Load Balancer"},{"id":"27770","title":"loadbalancer_rule","path":"website/docs/r/loadbalancer_rule.html.markdown","slug":"loadbalancer_rule","category":"resources","subcategory":"Load Balancer"},{"id":"27771","title":"local_network_gateway","path":"website/docs/r/local_network_gateway.html.markdown","slug":"local_network_gateway","category":"resources","subcategory":"Network"},{"id":"27772","title":"log_analytics_linked_service","path":"website/docs/r/log_analytics_linked_service.html.markdown","slug":"log_analytics_linked_service","category":"resources","subcategory":"Log Analytics"},{"id":"27773","title":"log_analytics_solution","path":"website/docs/r/log_analytics_solution.html.markdown","slug":"log_analytics_solution","category":"resources","subcategory":"Log Analytics"},{"id":"27774","title":"log_analytics_workspace","path":"website/docs/r/log_analytics_workspace.html.markdown","slug":"log_analytics_workspace","category":"resources","subcategory":"Log Analytics"},{"id":"27775","title":"log_analytics_workspace_linked_service","path":"website/docs/r/log_analytics_workspace_linked_service.html.markdown","slug":"log_analytics_workspace_linked_service","category":"resources","subcategory":"Log Analytics"},{"id":"27776","title":"logic_app_action_custom","path":"website/docs/r/logic_app_action_custom.html.markdown","slug":"logic_app_action_custom","category":"resources","subcategory":"Logic App"},{"id":"27777","title":"logic_app_action_http","path":"website/docs/r/logic_app_action_http.html.markdown","slug":"logic_app_action_http","category":"resources","subcategory":"Logic App"},{"id":"27778","title":"logic_app_trigger_custom","path":"website/docs/r/logic_app_trigger_custom.html.markdown","slug":"logic_app_trigger_custom","category":"resources","subcategory":"Logic App"},{"id":"27779","title":"logic_app_trigger_http_request","path":"website/docs/r/logic_app_trigger_http_request.html.markdown","slug":"logic_app_trigger_http_request","category":"resources","subcategory":"Logic App"},{"id":"27780","title":"logic_app_trigger_recurrence","path":"website/docs/r/logic_app_trigger_recurrence.html.markdown","slug":"logic_app_trigger_recurrence","category":"resources","subcategory":"Logic App"},{"id":"27781","title":"logic_app_workflow","path":"website/docs/r/logic_app_workflow.html.markdown","slug":"logic_app_workflow","category":"resources","subcategory":"Logic App"},{"id":"27782","title":"managed_disk","path":"website/docs/r/managed_disk.html.markdown","slug":"managed_disk","category":"resources","subcategory":"Compute"},{"id":"27783","title":"management_group","path":"website/docs/r/management_group.html.markdown","slug":"management_group","category":"resources","subcategory":"Management"},{"id":"27784","title":"management_lock","path":"website/docs/r/management_lock.html.markdown","slug":"management_lock","category":"resources","subcategory":"Management"},{"id":"27785","title":"maps_account","path":"website/docs/r/maps_account.html.markdown","slug":"maps_account","category":"resources","subcategory":"Maps"},{"id":"27786","title":"mariadb_configuration","path":"website/docs/r/mariadb_configuration.html.markdown","slug":"mariadb_configuration","category":"resources","subcategory":"Database"},{"id":"27787","title":"mariadb_database","path":"website/docs/r/mariadb_database.html.markdown","slug":"mariadb_database","category":"resources","subcategory":"Database"},{"id":"27788","title":"mariadb_firewall_rule","path":"website/docs/r/mariadb_firewall_rule.html.markdown","slug":"mariadb_firewall_rule","category":"resources","subcategory":"Database"},{"id":"27789","title":"mariadb_server","path":"website/docs/r/mariadb_server.html.markdown","slug":"mariadb_server","category":"resources","subcategory":"Database"},{"id":"27790","title":"mariadb_virtual_network_rule","path":"website/docs/r/mariadb_virtual_network_rule.html.markdown","slug":"mariadb_virtual_network_rule","category":"resources","subcategory":"Database"},{"id":"27791","title":"marketplace_agreement","path":"website/docs/r/marketplace_agreement.html.markdown","slug":"marketplace_agreement","category":"resources","subcategory":"Compute"},{"id":"27792","title":"media_services_account","path":"website/docs/r/media_services_account.html.markdown","slug":"media_services_account","category":"resources","subcategory":"Media"},{"id":"27793","title":"metric_alertrule","path":"website/docs/r/metric_alertrule.html.markdown","slug":"metric_alertrule","category":"resources","subcategory":"Monitor"},{"id":"27794","title":"monitor_action_group","path":"website/docs/r/monitor_action_group.html.markdown","slug":"monitor_action_group","category":"resources","subcategory":"Monitor"},{"id":"27795","title":"monitor_activity_log_alert","path":"website/docs/r/monitor_activity_log_alert.html.markdown","slug":"monitor_activity_log_alert","category":"resources","subcategory":"Monitor"},{"id":"27796","title":"monitor_autoscale_setting","path":"website/docs/r/monitor_autoscale_setting.html.markdown","slug":"monitor_autoscale_setting","category":"resources","subcategory":"Monitor"},{"id":"27797","title":"monitor_diagnostic_setting","path":"website/docs/r/monitor_diagnostic_setting.html.markdown","slug":"monitor_diagnostic_setting","category":"resources","subcategory":"Monitor"},{"id":"27798","title":"monitor_log_profile","path":"website/docs/r/monitor_log_profile.html.markdown","slug":"monitor_log_profile","category":"resources","subcategory":"Monitor"},{"id":"27799","title":"monitor_metric_alert","path":"website/docs/r/monitor_metric_alert.html.markdown","slug":"monitor_metric_alert","category":"resources","subcategory":"Monitor"},{"id":"27800","title":"monitor_metric_alertrule","path":"website/docs/r/monitor_metric_alertrule.html.markdown","slug":"monitor_metric_alertrule","category":"resources","subcategory":"Monitor"},{"id":"27801","title":"mssql_elasticpool","path":"website/docs/r/mssql_elasticpool.html.markdown","slug":"mssql_elasticpool","category":"resources","subcategory":"Database"},{"id":"27802","title":"mysql_configuration","path":"website/docs/r/mysql_configuration.html.markdown","slug":"mysql_configuration","category":"resources","subcategory":"Database"},{"id":"27803","title":"mysql_database","path":"website/docs/r/mysql_database.html.markdown","slug":"mysql_database","category":"resources","subcategory":"Database"},{"id":"27804","title":"mysql_firewall_rule","path":"website/docs/r/mysql_firewall_rule.html.markdown","slug":"mysql_firewall_rule","category":"resources","subcategory":"Database"},{"id":"27805","title":"mysql_server","path":"website/docs/r/mysql_server.html.markdown","slug":"mysql_server","category":"resources","subcategory":"Database"},{"id":"27806","title":"mysql_virtual_network_rule","path":"website/docs/r/mysql_virtual_network_rule.html.markdown","slug":"mysql_virtual_network_rule","category":"resources","subcategory":"Database"},{"id":"27807","title":"netapp_account","path":"website/docs/r/netapp_account.html.markdown","slug":"netapp_account","category":"resources","subcategory":"NetApp"},{"id":"27808","title":"netapp_pool","path":"website/docs/r/netapp_pool.html.markdown","slug":"netapp_pool","category":"resources","subcategory":"NetApp"},{"id":"27809","title":"network_connection_monitor","path":"website/docs/r/network_connection_monitor.html.markdown","slug":"network_connection_monitor","category":"resources","subcategory":"Network"},{"id":"27810","title":"network_ddos_protection_plan","path":"website/docs/r/network_ddos_protection_plan.html.markdown","slug":"network_ddos_protection_plan","category":"resources","subcategory":"Network"},{"id":"27811","title":"network_interface","path":"website/docs/r/network_interface.html.markdown","slug":"network_interface","category":"resources","subcategory":"Network"},{"id":"27812","title":"network_interface_application_gateway_backend_address_pool_association","path":"website/docs/r/network_interface_application_gateway_backend_address_pool_association.html.markdown","slug":"network_interface_application_gateway_backend_address_pool_association","category":"resources","subcategory":"Network"},{"id":"27813","title":"network_interface_application_security_group_association","path":"website/docs/r/network_interface_application_security_group_association.html.markdown","slug":"network_interface_application_security_group_association","category":"resources","subcategory":"Network"},{"id":"27814","title":"network_interface_backend_address_pool_association","path":"website/docs/r/network_interface_backend_address_pool_association.html.markdown","slug":"network_interface_backend_address_pool_association","category":"resources","subcategory":"Network"},{"id":"27815","title":"network_interface_nat_rule_association","path":"website/docs/r/network_interface_nat_rule_association.html.markdown","slug":"network_interface_nat_rule_association","category":"resources","subcategory":"Network"},{"id":"27816","title":"network_packet_capture","path":"website/docs/r/network_packet_capture.html.markdown","slug":"network_packet_capture","category":"resources","subcategory":"Network"},{"id":"27817","title":"network_profile","path":"website/docs/r/network_profile.html.markdown","slug":"network_profile","category":"resources","subcategory":"Network"},{"id":"27818","title":"network_security_group","path":"website/docs/r/network_security_group.html.markdown","slug":"network_security_group","category":"resources","subcategory":"Network"},{"id":"27819","title":"network_security_rule","path":"website/docs/r/network_security_rule.html.markdown","slug":"network_security_rule","category":"resources","subcategory":"Network"},{"id":"27820","title":"network_watcher","path":"website/docs/r/network_watcher.html.markdown","slug":"network_watcher","category":"resources","subcategory":"Network"},{"id":"27821","title":"notification_hub","path":"website/docs/r/notification_hub.html.markdown","slug":"notification_hub","category":"resources","subcategory":"Messaging"},{"id":"27822","title":"notification_hub_authorization_rule","path":"website/docs/r/notification_hub_authorization_rule.html.markdown","slug":"notification_hub_authorization_rule","category":"resources","subcategory":"Messaging"},{"id":"27823","title":"notification_hub_namespace","path":"website/docs/r/notification_hub_namespace.html.markdown","slug":"notification_hub_namespace","category":"resources","subcategory":"Messaging"},{"id":"27824","title":"packet_capture","path":"website/docs/r/packet_capture.html.markdown","slug":"packet_capture","category":"resources","subcategory":"Network"},{"id":"27825","title":"policy_assignment","path":"website/docs/r/policy_assignment.html.markdown","slug":"policy_assignment","category":"resources","subcategory":"Policy"},{"id":"27826","title":"policy_definition","path":"website/docs/r/policy_definition.html.markdown","slug":"policy_definition","category":"resources","subcategory":"Policy"},{"id":"27827","title":"policy_set_definition","path":"website/docs/r/policy_set_definition.html.markdown","slug":"policy_set_definition","category":"resources","subcategory":"Policy"},{"id":"27828","title":"postgresql_configuration","path":"website/docs/r/postgresql_configuration.html.markdown","slug":"postgresql_configuration","category":"resources","subcategory":"Database"},{"id":"27829","title":"postgresql_database","path":"website/docs/r/postgresql_database.html.markdown","slug":"postgresql_database","category":"resources","subcategory":"Database"},{"id":"27830","title":"postgresql_firewall_rule","path":"website/docs/r/postgresql_firewall_rule.html.markdown","slug":"postgresql_firewall_rule","category":"resources","subcategory":"Database"},{"id":"27831","title":"postgresql_server","path":"website/docs/r/postgresql_server.html.markdown","slug":"postgresql_server","category":"resources","subcategory":"Database"},{"id":"27832","title":"postgresql_virtual_network_rule","path":"website/docs/r/postgresql_virtual_network_rule.html.markdown","slug":"postgresql_virtual_network_rule","category":"resources","subcategory":"Database"},{"id":"27833","title":"private_dns_a_record","path":"website/docs/r/private_dns_a_record.html.markdown","slug":"private_dns_a_record","category":"resources","subcategory":"Private DNS"},{"id":"27834","title":"private_dns_aaaa_record","path":"website/docs/r/private_dns_aaaa_record.html.markdown","slug":"private_dns_aaaa_record","category":"resources","subcategory":"Private DNS"},{"id":"27835","title":"private_dns_cname_record","path":"website/docs/r/private_dns_cname_record.html.markdown","slug":"private_dns_cname_record","category":"resources","subcategory":"Private DNS"},{"id":"27836","title":"private_dns_ptr_record","path":"website/docs/r/private_dns_ptr_record.html.markdown","slug":"private_dns_ptr_record","category":"resources","subcategory":"Private DNS"},{"id":"27837","title":"private_dns_srv_record","path":"website/docs/r/private_dns_srv_record.html.markdown","slug":"private_dns_srv_record","category":"resources","subcategory":"Private DNS"},{"id":"27838","title":"private_dns_zone","path":"website/docs/r/private_dns_zone.html.markdown","slug":"private_dns_zone","category":"resources","subcategory":"Private DNS"},{"id":"27839","title":"private_dns_zone_virtual_network_link","path":"website/docs/r/private_dns_zone_virtual_network_link.html.markdown","slug":"private_dns_zone_virtual_network_link","category":"resources","subcategory":"Private DNS"},{"id":"27840","title":"private_link_service","path":"website/docs/r/private_link_service.html.markdown","slug":"private_link_service","category":"resources","subcategory":""},{"id":"27841","title":"proximity_placement_group","path":"website/docs/r/proximity_placement_group.html.markdown","slug":"proximity_placement_group","category":"resources","subcategory":"Compute"},{"id":"27842","title":"public_ip","path":"website/docs/r/public_ip.html.markdown","slug":"public_ip","category":"resources","subcategory":"Network"},{"id":"27843","title":"public_ip_prefix","path":"website/docs/r/public_ip_prefix.html.markdown","slug":"public_ip_prefix","category":"resources","subcategory":"Network"},{"id":"27844","title":"recovery_network_mapping","path":"website/docs/r/recovery_network_mapping.html.markdown","slug":"recovery_network_mapping","category":"resources","subcategory":"Recovery Services"},{"id":"27845","title":"recovery_services_fabric","path":"website/docs/r/recovery_services_fabric.html.markdown","slug":"recovery_services_fabric","category":"resources","subcategory":"Recovery Services"},{"id":"27846","title":"recovery_services_protected_vm","path":"website/docs/r/recovery_services_protected_vm.markdown","slug":"recovery_services_protected_vm","category":"resources","subcategory":"Recovery Services"},{"id":"27847","title":"recovery_services_protection_container","path":"website/docs/r/recovery_services_protection_container.html.markdown","slug":"recovery_services_protection_container","category":"resources","subcategory":"Recovery Services"},{"id":"27848","title":"recovery_services_protection_container_mapping","path":"website/docs/r/recovery_services_protection_container_mapping.html.markdown","slug":"recovery_services_protection_container_mapping","category":"resources","subcategory":"Recovery Services"},{"id":"27849","title":"recovery_services_protection_policy_vm","path":"website/docs/r/recovery_services_protection_policy_vm.markdown","slug":"recovery_services_protection_policy_vm","category":"resources","subcategory":"Recovery Services"},{"id":"27850","title":"recovery_services_replicated_vm","path":"website/docs/r/recovery_services_replicated_vm.html.markdown","slug":"recovery_services_replicated_vm","category":"resources","subcategory":"Recovery Services"},{"id":"27851","title":"recovery_services_replication_policy","path":"website/docs/r/recovery_services_replication_policy.html.markdown","slug":"recovery_services_replication_policy","category":"resources","subcategory":"Recovery Services"},{"id":"27852","title":"recovery_services_vault","path":"website/docs/r/recovery_services_vault.markdown","slug":"recovery_services_vault","category":"resources","subcategory":"Recovery Services"},{"id":"27853","title":"redis_cache","path":"website/docs/r/redis_cache.html.markdown","slug":"redis_cache","category":"resources","subcategory":"Redis"},{"id":"27854","title":"redis_firewall_rule","path":"website/docs/r/redis_firewall_rule.html.markdown","slug":"redis_firewall_rule","category":"resources","subcategory":"Redis"},{"id":"27855","title":"relay_hybrid_connection","path":"website/docs/r/relay_hybrid_connection.html.markdown","slug":"relay_hybrid_connection","category":"resources","subcategory":"Messaging"},{"id":"27856","title":"relay_namespace","path":"website/docs/r/relay_namespace.html.markdown","slug":"relay_namespace","category":"resources","subcategory":"Messaging"},{"id":"27857","title":"resource_group","path":"website/docs/r/resource_group.html.markdown","slug":"resource_group","category":"resources","subcategory":"Base"},{"id":"27858","title":"role_assignment","path":"website/docs/r/role_assignment.html.markdown","slug":"role_assignment","category":"resources","subcategory":"Authorization"},{"id":"27859","title":"role_definition","path":"website/docs/r/role_definition.html.markdown","slug":"role_definition","category":"resources","subcategory":"Authorization"},{"id":"27860","title":"route","path":"website/docs/r/route.html.markdown","slug":"route","category":"resources","subcategory":"Network"},{"id":"27861","title":"route_table","path":"website/docs/r/route_table.html.markdown","slug":"route_table","category":"resources","subcategory":"Network"},{"id":"27862","title":"scheduler_job","path":"website/docs/r/scheduler_job.html.markdown","slug":"scheduler_job","category":"resources","subcategory":"Scheduler"},{"id":"27863","title":"scheduler_job_collection","path":"website/docs/r/scheduler_job_collection.html.markdown","slug":"scheduler_job_collection","category":"resources","subcategory":"Scheduler"},{"id":"27864","title":"search_service","path":"website/docs/r/search_service.html.markdown","slug":"search_service","category":"resources","subcategory":"Search"},{"id":"27865","title":"security_center_contact","path":"website/docs/r/security_center_contact.markdown","slug":"security_center_contact","category":"resources","subcategory":"Security Center"},{"id":"27866","title":"security_center_subscription_pricing","path":"website/docs/r/security_center_subscription_pricing.markdown","slug":"security_center_subscription_pricing","category":"resources","subcategory":"Security Center"},{"id":"27867","title":"security_center_workspace","path":"website/docs/r/security_center_workspace.markdown","slug":"security_center_workspace","category":"resources","subcategory":"Security Center"},{"id":"27868","title":"service_fabric_cluster","path":"website/docs/r/service_fabric_cluster.html.markdown","slug":"service_fabric_cluster","category":"resources","subcategory":"Service Fabric"},{"id":"27869","title":"servicebus_namespace","path":"website/docs/r/servicebus_namespace.html.markdown","slug":"servicebus_namespace","category":"resources","subcategory":"Messaging"},{"id":"27870","title":"servicebus_namespace_authorization_rule","path":"website/docs/r/servicebus_namespace_authorization_rule.html.markdown","slug":"servicebus_namespace_authorization_rule","category":"resources","subcategory":"Messaging"},{"id":"27871","title":"servicebus_queue","path":"website/docs/r/servicebus_queue.html.markdown","slug":"servicebus_queue","category":"resources","subcategory":"Messaging"},{"id":"27872","title":"servicebus_queue_authorization_rule","path":"website/docs/r/servicebus_queue_authorization_rule.html.markdown","slug":"servicebus_queue_authorization_rule","category":"resources","subcategory":"Messaging"},{"id":"27873","title":"servicebus_subscription","path":"website/docs/r/servicebus_subscription.html.markdown","slug":"servicebus_subscription","category":"resources","subcategory":"Messaging"},{"id":"27874","title":"servicebus_subscription_rule","path":"website/docs/r/servicebus_subscription_rule.html.markdown","slug":"servicebus_subscription_rule","category":"resources","subcategory":"Messaging"},{"id":"27875","title":"servicebus_topic","path":"website/docs/r/servicebus_topic.html.markdown","slug":"servicebus_topic","category":"resources","subcategory":"Messaging"},{"id":"27876","title":"servicebus_topic_authorization_rule","path":"website/docs/r/servicebus_topic_authorization_rule.html.markdown","slug":"servicebus_topic_authorization_rule","category":"resources","subcategory":"Messaging"},{"id":"27877","title":"shared_image","path":"website/docs/r/shared_image.html.markdown","slug":"shared_image","category":"resources","subcategory":"Compute"},{"id":"27878","title":"shared_image_gallery","path":"website/docs/r/shared_image_gallery.html.markdown","slug":"shared_image_gallery","category":"resources","subcategory":"Compute"},{"id":"27879","title":"shared_image_version","path":"website/docs/r/shared_image_version.html.markdown","slug":"shared_image_version","category":"resources","subcategory":"Compute"},{"id":"27880","title":"signalr_service","path":"website/docs/r/signalr_service.html.markdown","slug":"signalr_service","category":"resources","subcategory":"Messaging"},{"id":"27881","title":"snapshot","path":"website/docs/r/snapshot.html.markdown","slug":"snapshot","category":"resources","subcategory":"Compute"},{"id":"27882","title":"sql_active_directory_administrator","path":"website/docs/r/sql_active_directory_administrator.markdown","slug":"sql_active_directory_administrator","category":"resources","subcategory":"Database"},{"id":"27883","title":"sql_database","path":"website/docs/r/sql_database.html.markdown","slug":"sql_database","category":"resources","subcategory":"Database"},{"id":"27884","title":"sql_elasticpool","path":"website/docs/r/sql_elasticpool.html.markdown","slug":"sql_elasticpool","category":"resources","subcategory":"Database"},{"id":"27885","title":"sql_failover_group","path":"website/docs/r/sql_failover_group.html.markdown","slug":"sql_failover_group","category":"resources","subcategory":"Database"},{"id":"27886","title":"sql_firewall_rule","path":"website/docs/r/sql_firewall_rule.html.markdown","slug":"sql_firewall_rule","category":"resources","subcategory":"Database"},{"id":"27887","title":"sql_server","path":"website/docs/r/sql_server.html.markdown","slug":"sql_server","category":"resources","subcategory":"Database"},{"id":"27888","title":"sql_virtual_network_rule","path":"website/docs/r/sql_virtual_network_rule.html.markdown","slug":"sql_virtual_network_rule","category":"resources","subcategory":"Database"},{"id":"27889","title":"storage_account","path":"website/docs/r/storage_account.html.markdown","slug":"storage_account","category":"resources","subcategory":"Storage"},{"id":"27890","title":"storage_blob","path":"website/docs/r/storage_blob.html.markdown","slug":"storage_blob","category":"resources","subcategory":"Storage"},{"id":"27891","title":"storage_container","path":"website/docs/r/storage_container.html.markdown","slug":"storage_container","category":"resources","subcategory":"Storage"},{"id":"27892","title":"storage_data_lake_gen2_filesystem","path":"website/docs/r/storage_data_lake_gen2_filesystem.html.markdown","slug":"storage_data_lake_gen2_filesystem","category":"resources","subcategory":"Storage"},{"id":"27893","title":"storage_management_policy","path":"website/docs/r/storage_management_policy.html.markdown","slug":"storage_management_policy","category":"resources","subcategory":"Storage"},{"id":"27894","title":"storage_queue","path":"website/docs/r/storage_queue.html.markdown","slug":"storage_queue","category":"resources","subcategory":"Storage"},{"id":"27895","title":"storage_share","path":"website/docs/r/storage_share.html.markdown","slug":"storage_share","category":"resources","subcategory":"Storage"},{"id":"27896","title":"storage_share_directory","path":"website/docs/r/storage_share_directory.html.markdown","slug":"storage_share_directory","category":"resources","subcategory":"Storage"},{"id":"27897","title":"storage_table","path":"website/docs/r/storage_table.html.markdown","slug":"storage_table","category":"resources","subcategory":"Storage"},{"id":"27898","title":"storage_table_entity","path":"website/docs/r/storage_table_entity.html.markdown","slug":"storage_table_entity","category":"resources","subcategory":"Storage"},{"id":"27899","title":"stream_analytics_function_javascript_udf","path":"website/docs/r/stream_analytics_function_javascript_udf.html.markdown","slug":"stream_analytics_function_javascript_udf","category":"resources","subcategory":"Stream Analytics"},{"id":"27900","title":"stream_analytics_job","path":"website/docs/r/stream_analytics_job.html.markdown","slug":"stream_analytics_job","category":"resources","subcategory":"Stream Analytics"},{"id":"27901","title":"stream_analytics_output_blob","path":"website/docs/r/stream_analytics_output_blob.html.markdown","slug":"stream_analytics_output_blob","category":"resources","subcategory":"Stream Analytics"},{"id":"27902","title":"stream_analytics_output_eventhub","path":"website/docs/r/stream_analytics_output_eventhub.html.markdown","slug":"stream_analytics_output_eventhub","category":"resources","subcategory":"Stream Analytics"},{"id":"27903","title":"stream_analytics_output_mssql","path":"website/docs/r/stream_analytics_output_mssql.html.markdown","slug":"stream_analytics_output_mssql","category":"resources","subcategory":"Stream Analytics"},{"id":"27904","title":"stream_analytics_output_servicebus_queue","path":"website/docs/r/stream_analytics_output_servicebus_queue.html.markdown","slug":"stream_analytics_output_servicebus_queue","category":"resources","subcategory":"Stream Analytics"},{"id":"27905","title":"stream_analytics_output_servicebus_topic","path":"website/docs/r/stream_analytics_output_servicebus_topic.html.markdown","slug":"stream_analytics_output_servicebus_topic","category":"resources","subcategory":"Stream Analytics"},{"id":"27906","title":"stream_analytics_stream_input_blob","path":"website/docs/r/stream_analytics_stream_input_blob.html.markdown","slug":"stream_analytics_stream_input_blob","category":"resources","subcategory":"Stream Analytics"},{"id":"27907","title":"stream_analytics_stream_input_eventhub","path":"website/docs/r/stream_analytics_stream_input_eventhub.html.markdown","slug":"stream_analytics_stream_input_eventhub","category":"resources","subcategory":"Stream Analytics"},{"id":"27908","title":"stream_analytics_stream_input_iothub","path":"website/docs/r/stream_analytics_stream_input_iothub.html.markdown","slug":"stream_analytics_stream_input_iothub","category":"resources","subcategory":"Stream Analytics"},{"id":"27909","title":"subnet","path":"website/docs/r/subnet.html.markdown","slug":"subnet","category":"resources","subcategory":"Network"},{"id":"27910","title":"subnet_network_security_group_association","path":"website/docs/r/subnet_network_security_group_association.html.markdown","slug":"subnet_network_security_group_association","category":"resources","subcategory":"Network"},{"id":"27911","title":"subnet_route_table_association","path":"website/docs/r/subnet_route_table_association.html.markdown","slug":"subnet_route_table_association","category":"resources","subcategory":"Network"},{"id":"27912","title":"template_deployment","path":"website/docs/r/template_deployment.html.markdown","slug":"template_deployment","category":"resources","subcategory":"Template"},{"id":"27913","title":"traffic_manager_endpoint","path":"website/docs/r/traffic_manager_endpoint.html.markdown","slug":"traffic_manager_endpoint","category":"resources","subcategory":"Network"},{"id":"27914","title":"traffic_manager_profile","path":"website/docs/r/traffic_manager_profile.html.markdown","slug":"traffic_manager_profile","category":"resources","subcategory":"Network"},{"id":"27915","title":"user_assigned_identity","path":"website/docs/r/user_assigned_identity.markdown","slug":"user_assigned_identity","category":"resources","subcategory":"Authorization"},{"id":"27916","title":"virtual_machine","path":"website/docs/r/virtual_machine.html.markdown","slug":"virtual_machine","category":"resources","subcategory":"Compute"},{"id":"27917","title":"virtual_machine_data_disk_attachment","path":"website/docs/r/virtual_machine_data_disk_attachment.html.markdown","slug":"virtual_machine_data_disk_attachment","category":"resources","subcategory":"Compute"},{"id":"27918","title":"virtual_machine_extension","path":"website/docs/r/virtual_machine_extension.html.markdown","slug":"virtual_machine_extension","category":"resources","subcategory":"Compute"},{"id":"27919","title":"virtual_machine_scale_set","path":"website/docs/r/virtual_machine_scale_set.html.markdown","slug":"virtual_machine_scale_set","category":"resources","subcategory":"Compute"},{"id":"27920","title":"virtual_network","path":"website/docs/r/virtual_network.html.markdown","slug":"virtual_network","category":"resources","subcategory":"Network"},{"id":"27921","title":"virtual_network_gateway","path":"website/docs/r/virtual_network_gateway.html.markdown","slug":"virtual_network_gateway","category":"resources","subcategory":"Network"},{"id":"27922","title":"virtual_network_gateway_connection","path":"website/docs/r/virtual_network_gateway_connection.html.markdown","slug":"virtual_network_gateway_connection","category":"resources","subcategory":"Network"},{"id":"27923","title":"virtual_network_peering","path":"website/docs/r/virtual_network_peering.html.markdown","slug":"virtual_network_peering","category":"resources","subcategory":"Network"},{"id":"27924","title":"virtual_wan","path":"website/docs/r/virtual_wan.html.markdown","slug":"virtual_wan","category":"resources","subcategory":"Network"},{"id":"27925","title":"web_application_firewall_policy","path":"website/docs/r/web_application_firewall_policy.html.markdown","slug":"web_application_firewall_policy","category":"resources","subcategory":"Network"},{"id":"27926","title":"windows_virtual_machine_scale_set","path":"website/docs/r/windows_virtual_machine_scale_set.html.markdown","slug":"windows_virtual_machine_scale_set","category":"resources","subcategory":"Beta"}]} +{ + "id": "hashicorp/azurerm/2.53.0", + "owner": "hashicorp", + "namespace": "hashicorp", + "name": "azurerm", + "alias": "azurerm", + "version": "2.53.0", + "tag": "2.53.0", + "description": "terraform-provider-azurerm", + "source": "https://github.com/terraform-providers/terraform-provider-azurerm", + "published_at": "2019-11-26T08:22:56Z", + "downloads": 5181001, + "official": true, + "versions": [ + "2.52.0", + "2.53.0" + ], + "docs": [ + { + "id": "27489", + "title": "overview", + "path": "website/docs/index.html.markdown", + "slug": "index", + "category": "overview", + "subcategory": "" + }, + { + "id": "27490", + "title": "api_management", + "path": "website/docs/d/api_management.html.markdown", + "slug": "api_management", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27491", + "title": "api_management_api", + "path": "website/docs/d/api_management_api.html.markdown", + "slug": "api_management_api", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27492", + "title": "api_management_group", + "path": "website/docs/d/api_management_group.html.markdown", + "slug": "api_management_group", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27493", + "title": "api_management_product", + "path": "website/docs/d/api_management_product.html.markdown", + "slug": "api_management_product", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27494", + "title": "api_management_user", + "path": "website/docs/d/api_management_user.html.markdown", + "slug": "api_management_user", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27495", + "title": "app_service", + "path": "website/docs/d/app_service.html.markdown", + "slug": "app_service", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27496", + "title": "app_service_certificate", + "path": "website/docs/d/app_service_certificate.html.markdown", + "slug": "app_service_certificate", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27497", + "title": "app_service_certificate_order", + "path": "website/docs/d/app_service_certificate_order.html.markdown", + "slug": "app_service_certificate_order", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27498", + "title": "app_service_plan", + "path": "website/docs/d/app_service_plan.html.markdown", + "slug": "app_service_plan", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27499", + "title": "application_insights", + "path": "website/docs/d/application_insights.html.markdown", + "slug": "application_insights", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27500", + "title": "application_security_group", + "path": "website/docs/d/application_security_group.html.markdown", + "slug": "application_security_group", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27501", + "title": "automation_account", + "path": "website/docs/d/automation_account.html.markdown", + "slug": "automation_account", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27502", + "title": "automation_variable_bool", + "path": "website/docs/d/automation_variable_bool.html.markdown", + "slug": "automation_variable_bool", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27503", + "title": "automation_variable_datetime", + "path": "website/docs/d/automation_variable_datetime.html.markdown", + "slug": "automation_variable_datetime", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27504", + "title": "automation_variable_int", + "path": "website/docs/d/automation_variable_int.html.markdown", + "slug": "automation_variable_int", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27505", + "title": "automation_variable_string", + "path": "website/docs/d/automation_variable_string.html.markdown", + "slug": "automation_variable_string", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27506", + "title": "availability_set", + "path": "website/docs/d/availability_set.html.markdown", + "slug": "availability_set", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27507", + "title": "azuread_application", + "path": "website/docs/d/azuread_application.html.markdown", + "slug": "azuread_application", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27508", + "title": "azuread_service_principal", + "path": "website/docs/d/azuread_service_principal.html.markdown", + "slug": "azuread_service_principal", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27509", + "title": "batch_account", + "path": "website/docs/d/batch_account.html.markdown", + "slug": "batch_account", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27510", + "title": "batch_certificate", + "path": "website/docs/d/batch_certificate.html.markdown", + "slug": "batch_certificate", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27511", + "title": "batch_pool", + "path": "website/docs/d/batch_pool.html.markdown", + "slug": "batch_pool", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27512", + "title": "builtin_role_definition", + "path": "website/docs/d/builtin_role_definition.markdown", + "slug": "builtin_role_definition", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27513", + "title": "cdn_profile", + "path": "website/docs/d/cdn_profile.html.markdown", + "slug": "cdn_profile", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27514", + "title": "client_config", + "path": "website/docs/d/client_config.html.markdown", + "slug": "client_config", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27515", + "title": "container_registry", + "path": "website/docs/d/container_registry.markdown", + "slug": "container_registry", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27516", + "title": "cosmosdb_account", + "path": "website/docs/d/cosmosdb_account.html.markdown", + "slug": "cosmosdb_account", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27517", + "title": "data_factory", + "path": "website/docs/d/data_factory.html.markdown", + "slug": "data_factory", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27518", + "title": "data_lake_store", + "path": "website/docs/d/data_lake_store.html.markdown", + "slug": "data_lake_store", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27519", + "title": "dev_test_lab", + "path": "website/docs/d/dev_test_lab.html.markdown", + "slug": "dev_test_lab", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27520", + "title": "dev_test_virtual_network", + "path": "website/docs/d/dev_test_virtual_network.html.markdown", + "slug": "dev_test_virtual_network", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27521", + "title": "dns_zone", + "path": "website/docs/d/dns_zone.html.markdown", + "slug": "dns_zone", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27522", + "title": "eventhub_namespace", + "path": "website/docs/d/eventhub_namespace.html.markdown", + "slug": "eventhub_namespace", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27523", + "title": "express_route_circuit", + "path": "website/docs/d/express_route_circuit.html.markdown", + "slug": "express_route_circuit", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27524", + "title": "firewall", + "path": "website/docs/d/firewall.html.markdown", + "slug": "firewall", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27525", + "title": "hdinsight_cluster", + "path": "website/docs/d/hdinsight_cluster.html.markdown", + "slug": "hdinsight_cluster", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27526", + "title": "healthcare_service", + "path": "website/docs/d/healthcare_service.html.markdown", + "slug": "healthcare_service", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27527", + "title": "image", + "path": "website/docs/d/image.html.markdown", + "slug": "image", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27528", + "title": "key_vault", + "path": "website/docs/d/key_vault.html.markdown", + "slug": "key_vault", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27529", + "title": "key_vault_access_policy", + "path": "website/docs/d/key_vault_access_policy.html.markdown", + "slug": "key_vault_access_policy", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27530", + "title": "key_vault_key", + "path": "website/docs/d/key_vault_key.html.markdown", + "slug": "key_vault_key", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27531", + "title": "key_vault_secret", + "path": "website/docs/d/key_vault_secret.html.markdown", + "slug": "key_vault_secret", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27532", + "title": "kubernetes_cluster", + "path": "website/docs/d/kubernetes_cluster.html.markdown", + "slug": "kubernetes_cluster", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27533", + "title": "kubernetes_service_versions", + "path": "website/docs/d/kubernetes_service_versions.html.markdown", + "slug": "kubernetes_service_versions", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27534", + "title": "loadbalancer", + "path": "website/docs/d/loadbalancer.html.markdown", + "slug": "loadbalancer", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27535", + "title": "loadbalancer_backend_address_pool", + "path": "website/docs/d/loadbalancer_backend_address_pool.html.markdown", + "slug": "loadbalancer_backend_address_pool", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27536", + "title": "log_analytics_workspace", + "path": "website/docs/d/log_analytics_workspace.html.markdown", + "slug": "log_analytics_workspace", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27537", + "title": "logic_app_workflow", + "path": "website/docs/d/logic_app_workflow.html.markdown", + "slug": "logic_app_workflow", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27538", + "title": "managed_disk", + "path": "website/docs/d/managed_disk.html.markdown", + "slug": "managed_disk", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27539", + "title": "management_group", + "path": "website/docs/d/management_group.html.markdown", + "slug": "management_group", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27540", + "title": "maps_account", + "path": "website/docs/d/maps_account.html.markdown", + "slug": "maps_account", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27541", + "title": "monitor_action_group", + "path": "website/docs/d/monitor_action_group.html.markdown", + "slug": "monitor_action_group", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27542", + "title": "monitor_diagnostic_categories", + "path": "website/docs/d/monitor_diagnostic_categories.html.markdown", + "slug": "monitor_diagnostic_categories", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27543", + "title": "monitor_log_profile", + "path": "website/docs/d/monitor_log_profile.html.markdown", + "slug": "monitor_log_profile", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27544", + "title": "mssql_elasticpool", + "path": "website/docs/d/mssql_elasticpool.html.markdown", + "slug": "mssql_elasticpool", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27545", + "title": "netapp_account", + "path": "website/docs/d/netapp_account.html.markdown", + "slug": "netapp_account", + "category": "data-sources", + "subcategory": "NetApp" + }, + { + "id": "27546", + "title": "netapp_pool", + "path": "website/docs/d/netapp_pool.html.markdown", + "slug": "netapp_pool", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27547", + "title": "network_ddos_protection_plan", + "path": "website/docs/d/network_ddos_protection_plan.html.markdown", + "slug": "network_ddos_protection_plan", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27548", + "title": "network_interface", + "path": "website/docs/d/network_interface.html.markdown", + "slug": "network_interface", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27549", + "title": "network_security_group", + "path": "website/docs/d/network_security_group.html.markdown", + "slug": "network_security_group", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27550", + "title": "network_watcher", + "path": "website/docs/d/network_watcher.html.markdown", + "slug": "network_watcher", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27551", + "title": "notification_hub", + "path": "website/docs/d/notification_hub.html.markdown", + "slug": "notification_hub", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27552", + "title": "notification_hub_namespace", + "path": "website/docs/d/notification_hub_namespace.html.markdown", + "slug": "notification_hub_namespace", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27553", + "title": "platform_image", + "path": "website/docs/d/platform_image.html.markdown", + "slug": "platform_image", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27554", + "title": "policy_definition", + "path": "website/docs/d/policy_definition.markdown", + "slug": "policy_definition", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27555", + "title": "postgresql_server", + "path": "website/docs/d/postgresql_server.html.markdown", + "slug": "postgresql_server", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27556", + "title": "private_link_service", + "path": "website/docs/d/private_link_service.html.markdown", + "slug": "private_link_service", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27557", + "title": "private_link_service_endpoint_connections", + "path": "website/docs/d/private_link_service_endpoint_connections.html.markdown", + "slug": "private_link_service_endpoint_connections", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27558", + "title": "proximity_placement_group", + "path": "website/docs/d/proximity_placement_group.html.markdown", + "slug": "proximity_placement_group", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27559", + "title": "public_ip", + "path": "website/docs/d/public_ip.html.markdown", + "slug": "public_ip", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27560", + "title": "public_ip_prefix", + "path": "website/docs/d/public_ip_prefix.html.markdown", + "slug": "public_ip_prefix", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27561", + "title": "public_ips", + "path": "website/docs/d/public_ips.html.markdown", + "slug": "public_ips", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27562", + "title": "recovery_services_protection_policy_vm", + "path": "website/docs/d/recovery_services_protection_policy_vm.markdown", + "slug": "recovery_services_protection_policy_vm", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27563", + "title": "recovery_services_vault", + "path": "website/docs/d/recovery_services_vault.markdown", + "slug": "recovery_services_vault", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27564", + "title": "redis_cache", + "path": "website/docs/d/redis_cache.html.markdown", + "slug": "redis_cache", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27565", + "title": "resource_group", + "path": "website/docs/d/resource_group.html.markdown", + "slug": "resource_group", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27566", + "title": "resources", + "path": "website/docs/d/resources.html.markdown", + "slug": "resources", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27567", + "title": "role_definition", + "path": "website/docs/d/role_definition.markdown", + "slug": "role_definition", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27568", + "title": "route_table", + "path": "website/docs/d/route_table.html.markdown", + "slug": "route_table", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27569", + "title": "scheduler_job_collection", + "path": "website/docs/d/scheduler_job_collection.html.markdown", + "slug": "scheduler_job_collection", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27570", + "title": "servicebus_namespace", + "path": "website/docs/d/servicebus_namespace.html.markdown", + "slug": "servicebus_namespace", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27571", + "title": "servicebus_namespace_authorization_rule", + "path": "website/docs/d/servicebus_namespace_authorization_rule.html.markdown", + "slug": "servicebus_namespace_authorization_rule", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27572", + "title": "shared_image", + "path": "website/docs/d/shared_image.html.markdown", + "slug": "shared_image", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27573", + "title": "shared_image_gallery", + "path": "website/docs/d/shared_image_gallery.html.markdown", + "slug": "shared_image_gallery", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27574", + "title": "shared_image_version", + "path": "website/docs/d/shared_image_version.html.markdown", + "slug": "shared_image_version", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27575", + "title": "snapshot", + "path": "website/docs/d/snapshot.html.markdown", + "slug": "snapshot", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27576", + "title": "sql_database", + "path": "website/docs/d/sql_database.html.markdown", + "slug": "sql_database", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27577", + "title": "sql_server", + "path": "website/docs/d/sql_server.html.markdown", + "slug": "sql_server", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27578", + "title": "storage_account", + "path": "website/docs/d/storage_account.html.markdown", + "slug": "storage_account", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27579", + "title": "storage_account_blob_container_sas", + "path": "website/docs/d/storage_account_blob_container_sas.html.markdown", + "slug": "storage_account_blob_container_sas", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27580", + "title": "storage_account_sas", + "path": "website/docs/d/storage_account_sas.html.markdown", + "slug": "storage_account_sas", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27581", + "title": "storage_management_policy", + "path": "website/docs/d/storage_management_policy.html.markdown", + "slug": "storage_management_policy", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27582", + "title": "stream_analytics_job", + "path": "website/docs/d/stream_analytics_job.html.markdown", + "slug": "stream_analytics_job", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27583", + "title": "subnet", + "path": "website/docs/d/subnet.html.markdown", + "slug": "subnet", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27584", + "title": "subscription", + "path": "website/docs/d/subscription.html.markdown", + "slug": "subscription", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27585", + "title": "subscriptions", + "path": "website/docs/d/subscriptions.html.markdown", + "slug": "subscriptions", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27586", + "title": "traffic_manager_geographical_location", + "path": "website/docs/d/traffic_manager_geographical_location.html.markdown", + "slug": "traffic_manager_geographical_location", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27587", + "title": "user_assigned_identity", + "path": "website/docs/d/user_assigned_identity.html.markdown", + "slug": "user_assigned_identity", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27588", + "title": "virtual_hub", + "path": "website/docs/d/virtual_hub.html.markdown", + "slug": "virtual_hub", + "category": "data-sources", + "subcategory": "Network" + }, + { + "id": "27589", + "title": "virtual_machine", + "path": "website/docs/d/virtual_machine.html.markdown", + "slug": "virtual_machine", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27590", + "title": "virtual_network", + "path": "website/docs/d/virtual_network.html.markdown", + "slug": "virtual_network", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27591", + "title": "virtual_network_gateway", + "path": "website/docs/d/virtual_network_gateway.html.markdown", + "slug": "virtual_network_gateway", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27592", + "title": "virtual_network_gateway_connection", + "path": "website/docs/d/virtual_network_gateway_connection.html.markdown", + "slug": "virtual_network_gateway_connection", + "category": "data-sources", + "subcategory": "" + }, + { + "id": "27593", + "title": "Azure Resource Manager: 2.0 Upgrade Guide", + "path": "website/docs/guides/2.0-upgrade-guide.html.markdown", + "slug": "2.0-upgrade-guide", + "category": "guides", + "subcategory": "" + }, + { + "id": "27594", + "title": "Azure Provider: Authenticating via the Azure CLI", + "path": "website/docs/guides/azure_cli.html.markdown", + "slug": "azure_cli", + "category": "guides", + "subcategory": "" + }, + { + "id": "27595", + "title": "Azure Provider: Authenticating via Managed Identity", + "path": "website/docs/guides/managed_service_identity.html.markdown", + "slug": "managed_service_identity", + "category": "guides", + "subcategory": "" + }, + { + "id": "27596", + "title": "Azure Provider: Migrating to a renamed resource", + "path": "website/docs/guides/migrating-between-renamed-resources.html.markdown", + "slug": "migrating-between-renamed-resources", + "category": "guides", + "subcategory": "" + }, + { + "id": "27597", + "title": "Azure Active Directory: Migrating to the AzureAD Provider", + "path": "website/docs/guides/migrating-to-azuread.html.markdown", + "slug": "migrating-to-azuread", + "category": "guides", + "subcategory": "" + }, + { + "id": "27598", + "title": "Azure Provider: Authenticating via a Service Principal and a Client Certificate", + "path": "website/docs/guides/service_principal_client_certificate.html.markdown", + "slug": "service_principal_client_certificate", + "category": "guides", + "subcategory": "" + }, + { + "id": "27599", + "title": "Azure Provider: Authenticating via a Service Principal and a Client Secret", + "path": "website/docs/guides/service_principal_client_secret.html.markdown", + "slug": "service_principal_client_secret", + "category": "guides", + "subcategory": "" + }, + { + "id": "27600", + "title": "analysis_services_server", + "path": "website/docs/r/analysis_services_server.html.markdown", + "slug": "analysis_services_server", + "category": "resources", + "subcategory": "Analysis Services" + }, + { + "id": "27601", + "title": "api_management", + "path": "website/docs/r/api_management.html.markdown", + "slug": "api_management", + "category": "resources", + "subcategory": "API Management" + }, + { + "id": "27602", + "title": "api_management_api", + "path": "website/docs/r/api_management_api.html.markdown", + "slug": "api_management_api", + "category": "resources", + "subcategory": "API Management" + }, + { + "id": "27603", + "title": "api_management_api_operation", + "path": "website/docs/r/api_management_api_operation.html.markdown", + "slug": "api_management_api_operation", + "category": "resources", + "subcategory": "API Management" + }, + { + "id": "27604", + "title": "api_management_api_operation_policy", + "path": "website/docs/r/api_management_api_operation_policy.html.markdown", + "slug": "api_management_api_operation_policy", + "category": "resources", + "subcategory": "API Management" + }, + { + "id": "27605", + "title": "api_management_api_policy", + "path": "website/docs/r/api_management_api_policy.html.markdown", + "slug": "api_management_api_policy", + "category": "resources", + "subcategory": "API Management" + }, + { + "id": "27606", + "title": "api_management_api_schema", + "path": "website/docs/r/api_management_api_schema.html.markdown", + "slug": "api_management_api_schema", + "category": "resources", + "subcategory": "API Management" + }, + { + "id": "27607", + "title": "api_management_api_version_set", + "path": "website/docs/r/api_management_api_version_set.html.markdown", + "slug": "api_management_api_version_set", + "category": "resources", + "subcategory": "API Management" + }, + { + "id": "27608", + "title": "api_management_authorization_server", + "path": "website/docs/r/api_management_authorization_server.html.markdown", + "slug": "api_management_authorization_server", + "category": "resources", + "subcategory": "API Management" + }, + { + "id": "27609", + "title": "api_management_backend", + "path": "website/docs/r/api_management_backend.html.markdown", + "slug": "api_management_backend", + "category": "resources", + "subcategory": "API Management" + }, + { + "id": "27610", + "title": "api_management_certificate", + "path": "website/docs/r/api_management_certificate.html.markdown", + "slug": "api_management_certificate", + "category": "resources", + "subcategory": "API Management" + }, + { + "id": "27611", + "title": "api_management_group", + "path": "website/docs/r/api_management_group.html.markdown", + "slug": "api_management_group", + "category": "resources", + "subcategory": "API Management" + }, + { + "id": "27612", + "title": "api_management_group_user", + "path": "website/docs/r/api_management_group_user.html.markdown", + "slug": "api_management_group_user", + "category": "resources", + "subcategory": "API Management" + }, + { + "id": "27613", + "title": "api_management_logger", + "path": "website/docs/r/api_management_logger.html.markdown", + "slug": "api_management_logger", + "category": "resources", + "subcategory": "API Management" + }, + { + "id": "27614", + "title": "api_management_openid_connect_provider", + "path": "website/docs/r/api_management_openid_connect_provider.html.markdown", + "slug": "api_management_openid_connect_provider", + "category": "resources", + "subcategory": "API Management" + }, + { + "id": "27615", + "title": "api_management_product", + "path": "website/docs/r/api_management_product.html.markdown", + "slug": "api_management_product", + "category": "resources", + "subcategory": "API Management" + }, + { + "id": "27616", + "title": "api_management_product_api", + "path": "website/docs/r/api_management_product_api.html.markdown", + "slug": "api_management_product_api", + "category": "resources", + "subcategory": "API Management" + }, + { + "id": "27617", + "title": "api_management_product_group", + "path": "website/docs/r/api_management_product_group.html.markdown", + "slug": "api_management_product_group", + "category": "resources", + "subcategory": "API Management" + }, + { + "id": "27618", + "title": "api_management_product_policy", + "path": "website/docs/r/api_management_product_policy.html.markdown", + "slug": "api_management_product_policy", + "category": "resources", + "subcategory": "API Management" + }, + { + "id": "27619", + "title": "api_management_property", + "path": "website/docs/r/api_management_property.html.markdown", + "slug": "api_management_property", + "category": "resources", + "subcategory": "API Management" + }, + { + "id": "27620", + "title": "api_management_subscription", + "path": "website/docs/r/api_management_subscription.html.markdown", + "slug": "api_management_subscription", + "category": "resources", + "subcategory": "API Management" + }, + { + "id": "27621", + "title": "api_management_user", + "path": "website/docs/r/api_management_user.html.markdown", + "slug": "api_management_user", + "category": "resources", + "subcategory": "API Management" + }, + { + "id": "27622", + "title": "app_service", + "path": "website/docs/r/app_service.html.markdown", + "slug": "app_service", + "category": "resources", + "subcategory": "App Service (Web Apps)" + }, + { + "id": "27623", + "title": "app_service_active_slot", + "path": "website/docs/r/app_service_active_slot.html.markdown", + "slug": "app_service_active_slot", + "category": "resources", + "subcategory": "App Service (Web Apps)" + }, + { + "id": "27624", + "title": "app_service_certificate", + "path": "website/docs/r/app_service_certificate.html.markdown", + "slug": "app_service_certificate", + "category": "resources", + "subcategory": "App Service (Web Apps)" + }, + { + "id": "27625", + "title": "app_service_certificate_order", + "path": "website/docs/r/app_service_certificate_order.html.markdown", + "slug": "app_service_certificate_order", + "category": "resources", + "subcategory": "App Service (Web Apps)" + }, + { + "id": "27626", + "title": "app_service_custom_hostname_binding", + "path": "website/docs/r/app_service_custom_hostname_binding.html.markdown", + "slug": "app_service_custom_hostname_binding", + "category": "resources", + "subcategory": "App Service (Web Apps)" + }, + { + "id": "27627", + "title": "app_service_plan", + "path": "website/docs/r/app_service_plan.html.markdown", + "slug": "app_service_plan", + "category": "resources", + "subcategory": "App Service (Web Apps)" + }, + { + "id": "27628", + "title": "app_service_slot", + "path": "website/docs/r/app_service_slot.html.markdown", + "slug": "app_service_slot", + "category": "resources", + "subcategory": "App Service (Web Apps)" + }, + { + "id": "27629", + "title": "app_service_source_control_token", + "path": "website/docs/r/app_service_source_control_token.html.markdown", + "slug": "app_service_source_control_token", + "category": "resources", + "subcategory": "App Service (Web Apps)" + }, + { + "id": "27630", + "title": "application_gateway", + "path": "website/docs/r/application_gateway.html.markdown", + "slug": "application_gateway", + "category": "resources", + "subcategory": "Network" + }, + { + "id": "27631", + "title": "application_insights", + "path": "website/docs/r/application_insights.html.markdown", + "slug": "application_insights", + "category": "resources", + "subcategory": "Application Insights" + }, + { + "id": "27632", + "title": "application_insights_analytics_item", + "path": "website/docs/r/application_insights_analytics_item.html.markdown", + "slug": "application_insights_analytics_item", + "category": "resources", + "subcategory": "Application Insights" + }, + { + "id": "27633", + "title": "application_insights_api_key", + "path": "website/docs/r/application_insights_api_key.html.markdown", + "slug": "application_insights_api_key", + "category": "resources", + "subcategory": "Application Insights" + }, + { + "id": "27634", + "title": "application_insights_web_test", + "path": "website/docs/r/application_insights_web_test.html.markdown", + "slug": "application_insights_web_test", + "category": "resources", + "subcategory": "Application Insights" + }, + { + "id": "27635", + "title": "application_security_group", + "path": "website/docs/r/application_security_group.html.markdown", + "slug": "application_security_group", + "category": "resources", + "subcategory": "Network" + }, + { + "id": "27636", + "title": "automation_account", + "path": "website/docs/r/automation_account.html.markdown", + "slug": "automation_account", + "category": "resources", + "subcategory": "Automation" + }, + { + "id": "27637", + "title": "automation_credential", + "path": "website/docs/r/automation_credential.html.markdown", + "slug": "automation_credential", + "category": "resources", + "subcategory": "Automation" + }, + { + "id": "27638", + "title": "automation_dsc_configuration", + "path": "website/docs/r/automation_dsc_configuration.html.markdown", + "slug": "automation_dsc_configuration", + "category": "resources", + "subcategory": "Automation" + }, + { + "id": "27639", + "title": "automation_dsc_nodeconfiguration", + "path": "website/docs/r/automation_dsc_nodeconfiguration.html.markdown", + "slug": "automation_dsc_nodeconfiguration", + "category": "resources", + "subcategory": "Automation" + }, + { + "id": "27640", + "title": "automation_job_schedule", + "path": "website/docs/r/automation_job_schedule.html.markdown", + "slug": "automation_job_schedule", + "category": "resources", + "subcategory": "Automation" + }, + { + "id": "27641", + "title": "automation_module", + "path": "website/docs/r/automation_module.html.markdown", + "slug": "automation_module", + "category": "resources", + "subcategory": "Automation" + }, + { + "id": "27642", + "title": "automation_runbook", + "path": "website/docs/r/automation_runbook.html.markdown", + "slug": "automation_runbook", + "category": "resources", + "subcategory": "Automation" + }, + { + "id": "27643", + "title": "automation_schedule", + "path": "website/docs/r/automation_schedule.html.markdown", + "slug": "automation_schedule", + "category": "resources", + "subcategory": "Automation" + }, + { + "id": "27644", + "title": "automation_variable_bool", + "path": "website/docs/r/automation_variable_bool.html.markdown", + "slug": "automation_variable_bool", + "category": "resources", + "subcategory": "Automation" + }, + { + "id": "27645", + "title": "automation_variable_datetime", + "path": "website/docs/r/automation_variable_datetime.html.markdown", + "slug": "automation_variable_datetime", + "category": "resources", + "subcategory": "Automation" + }, + { + "id": "27646", + "title": "automation_variable_int", + "path": "website/docs/r/automation_variable_int.html.markdown", + "slug": "automation_variable_int", + "category": "resources", + "subcategory": "Automation" + }, + { + "id": "27647", + "title": "automation_variable_string", + "path": "website/docs/r/automation_variable_string.html.markdown", + "slug": "automation_variable_string", + "category": "resources", + "subcategory": "Automation" + }, + { + "id": "27648", + "title": "autoscale_setting", + "path": "website/docs/r/autoscale_setting.html.markdown", + "slug": "autoscale_setting", + "category": "resources", + "subcategory": "Monitor" + }, + { + "id": "27649", + "title": "availability_set", + "path": "website/docs/r/availability_set.html.markdown", + "slug": "availability_set", + "category": "resources", + "subcategory": "Compute" + }, + { + "id": "27650", + "title": "azuread_application", + "path": "website/docs/r/azuread_application.html.markdown", + "slug": "azuread_application", + "category": "resources", + "subcategory": "Azure Active Directory" + }, + { + "id": "27651", + "title": "azuread_service_principal", + "path": "website/docs/r/azuread_service_principal.html.markdown", + "slug": "azuread_service_principal", + "category": "resources", + "subcategory": "Azure Active Directory" + }, + { + "id": "27652", + "title": "azuread_service_principal_password", + "path": "website/docs/r/azuread_service_principal_password.html.markdown", + "slug": "azuread_service_principal_password", + "category": "resources", + "subcategory": "Azure Active Directory" + }, + { + "id": "27653", + "title": "bastion_host", + "path": "website/docs/r/bastion_host.html.markdown", + "slug": "bastion_host", + "category": "resources", + "subcategory": "Network" + }, + { + "id": "27654", + "title": "batch_account", + "path": "website/docs/r/batch_account.html.markdown", + "slug": "batch_account", + "category": "resources", + "subcategory": "Batch" + }, + { + "id": "27655", + "title": "batch_application", + "path": "website/docs/r/batch_application.html.markdown", + "slug": "batch_application", + "category": "resources", + "subcategory": "Batch" + }, + { + "id": "27656", + "title": "batch_certificate", + "path": "website/docs/r/batch_certificate.html.markdown", + "slug": "batch_certificate", + "category": "resources", + "subcategory": "Batch" + }, + { + "id": "27657", + "title": "batch_pool", + "path": "website/docs/r/batch_pool.html.markdown", + "slug": "batch_pool", + "category": "resources", + "subcategory": "Batch" + }, + { + "id": "27658", + "title": "bot_channel_email", + "path": "website/docs/r/bot_channel_email.markdown", + "slug": "bot_channel_email", + "category": "resources", + "subcategory": "Bot" + }, + { + "id": "27659", + "title": "bot_channel_slack", + "path": "website/docs/r/bot_channel_slack.markdown", + "slug": "bot_channel_slack", + "category": "resources", + "subcategory": "Bot" + }, + { + "id": "27660", + "title": "bot_channels_registration", + "path": "website/docs/r/bot_channels_registration.markdown", + "slug": "bot_channels_registration", + "category": "resources", + "subcategory": "Bot" + }, + { + "id": "27661", + "title": "bot_connection", + "path": "website/docs/r/bot_connection.markdown", + "slug": "bot_connection", + "category": "resources", + "subcategory": "Bot" + }, + { + "id": "27662", + "title": "bot_web_app", + "path": "website/docs/r/bot_web_app.markdown", + "slug": "bot_web_app", + "category": "resources", + "subcategory": "Bot" + }, + { + "id": "27663", + "title": "cdn_endpoint", + "path": "website/docs/r/cdn_endpoint.html.markdown", + "slug": "cdn_endpoint", + "category": "resources", + "subcategory": "CDN" + }, + { + "id": "27664", + "title": "cdn_profile", + "path": "website/docs/r/cdn_profile.html.markdown", + "slug": "cdn_profile", + "category": "resources", + "subcategory": "CDN" + }, + { + "id": "27665", + "title": "cognitive_account", + "path": "website/docs/r/cognitive_account.html.markdown", + "slug": "cognitive_account", + "category": "resources", + "subcategory": "Cognitive Services" + }, + { + "id": "27666", + "title": "connection_monitor", + "path": "website/docs/r/connection_monitor.html.markdown", + "slug": "connection_monitor", + "category": "resources", + "subcategory": "Network" + }, + { + "id": "27667", + "title": "container_group", + "path": "website/docs/r/container_group.html.markdown", + "slug": "container_group", + "category": "resources", + "subcategory": "Container" + }, + { + "id": "27668", + "title": "container_registry", + "path": "website/docs/r/container_registry.html.markdown", + "slug": "container_registry", + "category": "resources", + "subcategory": "Container" + }, + { + "id": "27669", + "title": "container_registry_webhook", + "path": "website/docs/r/container_registry_webhook.html.markdown", + "slug": "container_registry_webhook", + "category": "resources", + "subcategory": "Container" + }, + { + "id": "27670", + "title": "container_service", + "path": "website/docs/r/container_service.html.markdown", + "slug": "container_service", + "category": "resources", + "subcategory": "Container" + }, + { + "id": "27671", + "title": "cosmosdb_account", + "path": "website/docs/r/cosmosdb_account.html.markdown", + "slug": "cosmosdb_account", + "category": "resources", + "subcategory": "CosmosDB (DocumentDB)" + }, + { + "id": "27672", + "title": "cosmosdb_cassandra_keyspace", + "path": "website/docs/r/cosmosdb_cassandra_keyspace.html.markdown", + "slug": "cosmosdb_cassandra_keyspace", + "category": "resources", + "subcategory": "CosmosDB (DocumentDB)" + }, + { + "id": "27673", + "title": "cosmosdb_mongo_collection", + "path": "website/docs/r/cosmosdb_mongo_collection.html.markdown", + "slug": "cosmosdb_mongo_collection", + "category": "resources", + "subcategory": "CosmosDB (DocumentDB)" + }, + { + "id": "27674", + "title": "cosmosdb_mongo_database", + "path": "website/docs/r/cosmosdb_mongo_database.html.markdown", + "slug": "cosmosdb_mongo_database", + "category": "resources", + "subcategory": "CosmosDB (DocumentDB)" + }, + { + "id": "27675", + "title": "cosmosdb_sql_container", + "path": "website/docs/r/cosmosdb_sql_container.html.markdown", + "slug": "cosmosdb_sql_container", + "category": "resources", + "subcategory": "CosmosDB (DocumentDB)" + }, + { + "id": "27676", + "title": "cosmosdb_sql_database", + "path": "website/docs/r/cosmosdb_sql_database.html.markdown", + "slug": "cosmosdb_sql_database", + "category": "resources", + "subcategory": "CosmosDB (DocumentDB)" + }, + { + "id": "27677", + "title": "cosmosdb_table", + "path": "website/docs/r/cosmosdb_table.html.markdown", + "slug": "cosmosdb_table", + "category": "resources", + "subcategory": "CosmosDB (DocumentDB)" + }, + { + "id": "27678", + "title": "dashboard", + "path": "website/docs/r/dashboard.html.markdown", + "slug": "dashboard", + "category": "resources", + "subcategory": "Portal" + }, + { + "id": "27679", + "title": "data_factory", + "path": "website/docs/r/data_factory.html.markdown", + "slug": "data_factory", + "category": "resources", + "subcategory": "Data Factory" + }, + { + "id": "27680", + "title": "data_factory_dataset_mysql", + "path": "website/docs/r/data_factory_dataset_mysql.html.markdown", + "slug": "data_factory_dataset_mysql", + "category": "resources", + "subcategory": "Data Factory" + }, + { + "id": "27681", + "title": "data_factory_dataset_postgresql", + "path": "website/docs/r/data_factory_dataset_postgresql.html.markdown", + "slug": "data_factory_dataset_postgresql", + "category": "resources", + "subcategory": "Data Factory" + }, + { + "id": "27682", + "title": "data_factory_dataset_sql_server_table", + "path": "website/docs/r/data_factory_dataset_sql_server_table.html.markdown", + "slug": "data_factory_dataset_sql_server_table", + "category": "resources", + "subcategory": "Data Factory" + }, + { + "id": "27683", + "title": "data_factory_integration_runtime_managed", + "path": "website/docs/r/data_factory_integration_runtime_managed.html.markdown", + "slug": "data_factory_integration_runtime_managed", + "category": "resources", + "subcategory": "Data Factory" + }, + { + "id": "27684", + "title": "data_factory_linked_service_data_lake_storage_gen2", + "path": "website/docs/r/data_factory_linked_service_data_lake_storage_gen2.html.markdown", + "slug": "data_factory_linked_service_data_lake_storage_gen2", + "category": "resources", + "subcategory": "Data Factory" + }, + { + "id": "27685", + "title": "data_factory_linked_service_mysql", + "path": "website/docs/r/data_factory_linked_service_mysql.html.markdown", + "slug": "data_factory_linked_service_mysql", + "category": "resources", + "subcategory": "Data Factory" + }, + { + "id": "27686", + "title": "data_factory_linked_service_postgresql", + "path": "website/docs/r/data_factory_linked_service_postgresql.html.markdown", + "slug": "data_factory_linked_service_postgresql", + "category": "resources", + "subcategory": "Data Factory" + }, + { + "id": "27687", + "title": "data_factory_linked_service_sql_server", + "path": "website/docs/r/data_factory_linked_service_sql_server.html.markdown", + "slug": "data_factory_linked_service_sql_server", + "category": "resources", + "subcategory": "Data Factory" + }, + { + "id": "27688", + "title": "data_factory_pipeline", + "path": "website/docs/r/data_factory_pipeline.html.markdown", + "slug": "data_factory_pipeline", + "category": "resources", + "subcategory": "Data Factory" + }, + { + "id": "27689", + "title": "data_factory_trigger_schedule", + "path": "website/docs/r/data_factory_trigger_schedule.html.markdown", + "slug": "data_factory_trigger_schedule", + "category": "resources", + "subcategory": "Data Factory" + }, + { + "id": "27690", + "title": "data_lake_analytics_account", + "path": "website/docs/r/data_lake_analytics_account.html.markdown", + "slug": "data_lake_analytics_account", + "category": "resources", + "subcategory": "Data Lake" + }, + { + "id": "27691", + "title": "data_lake_analytics_firewall_rule", + "path": "website/docs/r/data_lake_analytics_firewall_rule.html.markdown", + "slug": "data_lake_analytics_firewall_rule", + "category": "resources", + "subcategory": "Data Lake" + }, + { + "id": "27692", + "title": "data_lake_store", + "path": "website/docs/r/data_lake_store.html.markdown", + "slug": "data_lake_store", + "category": "resources", + "subcategory": "Data Lake" + }, + { + "id": "27693", + "title": "data_lake_store_file", + "path": "website/docs/r/data_lake_store_file.html.markdown", + "slug": "data_lake_store_file", + "category": "resources", + "subcategory": "Data Lake" + }, + { + "id": "27694", + "title": "data_lake_store_firewall_rule", + "path": "website/docs/r/data_lake_store_firewall_rule.html.markdown", + "slug": "data_lake_store_firewall_rule", + "category": "resources", + "subcategory": "Data Lake" + }, + { + "id": "27695", + "title": "databricks_workspace", + "path": "website/docs/r/databricks_workspace.html.markdown", + "slug": "databricks_workspace", + "category": "resources", + "subcategory": "Databricks" + }, + { + "id": "27696", + "title": "ddos_protection_plan", + "path": "website/docs/r/ddos_protection_plan.html.markdown", + "slug": "ddos_protection_plan", + "category": "resources", + "subcategory": "Network" + }, + { + "id": "27697", + "title": "dev_test_lab", + "path": "website/docs/r/dev_test_lab.html.markdown", + "slug": "dev_test_lab", + "category": "resources", + "subcategory": "Dev Test" + }, + { + "id": "27698", + "title": "dev_test_linux_virtual_machine", + "path": "website/docs/r/dev_test_linux_virtual_machine.html.markdown", + "slug": "dev_test_linux_virtual_machine", + "category": "resources", + "subcategory": "Dev Test" + }, + { + "id": "27699", + "title": "dev_test_policy", + "path": "website/docs/r/dev_test_policy.html.markdown", + "slug": "dev_test_policy", + "category": "resources", + "subcategory": "Dev Test" + }, + { + "id": "27700", + "title": "dev_test_schedule", + "path": "website/docs/r/dev_test_schedule.html.markdown", + "slug": "dev_test_schedule", + "category": "resources", + "subcategory": "Dev Test" + }, + { + "id": "27701", + "title": "dev_test_virtual_network", + "path": "website/docs/r/dev_test_virtual_network.html.markdown", + "slug": "dev_test_virtual_network", + "category": "resources", + "subcategory": "Dev Test" + }, + { + "id": "27702", + "title": "dev_test_windows_virtual_machine", + "path": "website/docs/r/dev_test_windows_virtual_machine.html.markdown", + "slug": "dev_test_windows_virtual_machine", + "category": "resources", + "subcategory": "Dev Test" + }, + { + "id": "27703", + "title": "devspace_controller", + "path": "website/docs/r/devspace_controller.html.markdown", + "slug": "devspace_controller", + "category": "resources", + "subcategory": "DevSpace" + }, + { + "id": "27704", + "title": "dns_a_record", + "path": "website/docs/r/dns_a_record.html.markdown", + "slug": "dns_a_record", + "category": "resources", + "subcategory": "DNS" + }, + { + "id": "27705", + "title": "dns_aaaa_record", + "path": "website/docs/r/dns_aaaa_record.html.markdown", + "slug": "dns_aaaa_record", + "category": "resources", + "subcategory": "DNS" + }, + { + "id": "27706", + "title": "dns_caa_record", + "path": "website/docs/r/dns_caa_record.html.markdown", + "slug": "dns_caa_record", + "category": "resources", + "subcategory": "DNS" + }, + { + "id": "27707", + "title": "dns_cname_record", + "path": "website/docs/r/dns_cname_record.html.markdown", + "slug": "dns_cname_record", + "category": "resources", + "subcategory": "DNS" + }, + { + "id": "27708", + "title": "dns_mx_record", + "path": "website/docs/r/dns_mx_record.html.markdown", + "slug": "dns_mx_record", + "category": "resources", + "subcategory": "DNS" + }, + { + "id": "27709", + "title": "dns_ns_record", + "path": "website/docs/r/dns_ns_record.html.markdown", + "slug": "dns_ns_record", + "category": "resources", + "subcategory": "DNS" + }, + { + "id": "27710", + "title": "dns_ptr_record", + "path": "website/docs/r/dns_ptr_record.html.markdown", + "slug": "dns_ptr_record", + "category": "resources", + "subcategory": "DNS" + }, + { + "id": "27711", + "title": "dns_srv_record", + "path": "website/docs/r/dns_srv_record.html.markdown", + "slug": "dns_srv_record", + "category": "resources", + "subcategory": "DNS" + }, + { + "id": "27712", + "title": "dns_txt_record", + "path": "website/docs/r/dns_txt_record.html.markdown", + "slug": "dns_txt_record", + "category": "resources", + "subcategory": "DNS" + }, + { + "id": "27713", + "title": "dns_zone", + "path": "website/docs/r/dns_zone.html.markdown", + "slug": "dns_zone", + "category": "resources", + "subcategory": "DNS" + }, + { + "id": "27714", + "title": "eventgrid_domain", + "path": "website/docs/r/eventgrid_domain.html.markdown", + "slug": "eventgrid_domain", + "category": "resources", + "subcategory": "Messaging" + }, + { + "id": "27715", + "title": "eventgrid_event_subscription", + "path": "website/docs/r/eventgrid_event_subscription.html.markdown", + "slug": "eventgrid_event_subscription", + "category": "resources", + "subcategory": "Messaging" + }, + { + "id": "27716", + "title": "eventgrid_topic", + "path": "website/docs/r/eventgrid_topic.html.markdown", + "slug": "eventgrid_topic", + "category": "resources", + "subcategory": "Messaging" + }, + { + "id": "27717", + "title": "eventhub", + "path": "website/docs/r/eventhub.html.markdown", + "slug": "eventhub", + "category": "resources", + "subcategory": "Messaging" + }, + { + "id": "27718", + "title": "eventhub_authorization_rule", + "path": "website/docs/r/eventhub_authorization_rule.html.markdown", + "slug": "eventhub_authorization_rule", + "category": "resources", + "subcategory": "Messaging" + }, + { + "id": "27719", + "title": "eventhub_consumer_group", + "path": "website/docs/r/eventhub_consumer_group.html.markdown", + "slug": "eventhub_consumer_group", + "category": "resources", + "subcategory": "Messaging" + }, + { + "id": "27720", + "title": "eventhub_namespace", + "path": "website/docs/r/eventhub_namespace.html.markdown", + "slug": "eventhub_namespace", + "category": "resources", + "subcategory": "Messaging" + }, + { + "id": "27721", + "title": "eventhub_namespace_authorization_rule", + "path": "website/docs/r/eventhub_namespace_authorization_rule.html.markdown", + "slug": "eventhub_namespace_authorization_rule", + "category": "resources", + "subcategory": "Messaging" + }, + { + "id": "27722", + "title": "eventhub_namespace_disaster_recovery_config", + "path": "website/docs/r/eventhub_namespace_disaster_recovery_config.html.markdown", + "slug": "eventhub_namespace_disaster_recovery_config", + "category": "resources", + "subcategory": "Messaging" + }, + { + "id": "27723", + "title": "express_route_circuit", + "path": "website/docs/r/express_route_circuit.html.markdown", + "slug": "express_route_circuit", + "category": "resources", + "subcategory": "Network" + }, + { + "id": "27724", + "title": "express_route_circuit_authorization", + "path": "website/docs/r/express_route_circuit_authorization.html.markdown", + "slug": "express_route_circuit_authorization", + "category": "resources", + "subcategory": "Network" + }, + { + "id": "27725", + "title": "express_route_circuit_peering", + "path": "website/docs/r/express_route_circuit_peering.html.markdown", + "slug": "express_route_circuit_peering", + "category": "resources", + "subcategory": "Network" + }, + { + "id": "27726", + "title": "firewall", + "path": "website/docs/r/firewall.html.markdown", + "slug": "firewall", + "category": "resources", + "subcategory": "Network" + }, + { + "id": "27727", + "title": "firewall_application_rule_collection", + "path": "website/docs/r/firewall_application_rule_collection.html.markdown", + "slug": "firewall_application_rule_collection", + "category": "resources", + "subcategory": "Network" + }, + { + "id": "27728", + "title": "firewall_nat_rule_collection", + "path": "website/docs/r/firewall_nat_rule_collection.html.markdown", + "slug": "firewall_nat_rule_collection", + "category": "resources", + "subcategory": "Network" + }, + { + "id": "27729", + "title": "firewall_network_rule_collection", + "path": "website/docs/r/firewall_network_rule_collection.html.markdown", + "slug": "firewall_network_rule_collection", + "category": "resources", + "subcategory": "Network" + }, + { + "id": "27730", + "title": "front_door", + "path": "website/docs/r/front_door.html.markdown", + "slug": "front_door", + "category": "resources", + "subcategory": "Front Door" + }, + { + "id": "27731", + "title": "front_door_firewall_policy", + "path": "website/docs/r/front_door_firewall_policy.html.markdown", + "slug": "front_door_firewall_policy", + "category": "resources", + "subcategory": "Front Door" + }, + { + "id": "27732", + "title": "function_app", + "path": "website/docs/r/function_app.html.markdown", + "slug": "function_app", + "category": "resources", + "subcategory": "App Service (Web Apps)" + }, + { + "id": "27733", + "title": "hdinsight_hadoop_cluster", + "path": "website/docs/r/hdinsight_hadoop_cluster.html.markdown", + "slug": "hdinsight_hadoop_cluster", + "category": "resources", + "subcategory": "HDInsight" + }, + { + "id": "27734", + "title": "hdinsight_hbase_cluster", + "path": "website/docs/r/hdinsight_hbase_cluster.html.markdown", + "slug": "hdinsight_hbase_cluster", + "category": "resources", + "subcategory": "HDInsight" + }, + { + "id": "27735", + "title": "hdinsight_interactive_query_cluster", + "path": "website/docs/r/hdinsight_interactive_query_cluster.html.markdown", + "slug": "hdinsight_interactive_query_cluster", + "category": "resources", + "subcategory": "HDInsight" + }, + { + "id": "27736", + "title": "hdinsight_kafka_cluster", + "path": "website/docs/r/hdinsight_kafka_cluster.html.markdown", + "slug": "hdinsight_kafka_cluster", + "category": "resources", + "subcategory": "HDInsight" + }, + { + "id": "27737", + "title": "hdinsight_ml_services_cluster", + "path": "website/docs/r/hdinsight_ml_services_cluster.html.markdown", + "slug": "hdinsight_ml_services_cluster", + "category": "resources", + "subcategory": "HDInsight" + }, + { + "id": "27738", + "title": "hdinsight_rserver_cluster", + "path": "website/docs/r/hdinsight_rserver_cluster.html.markdown", + "slug": "hdinsight_rserver_cluster", + "category": "resources", + "subcategory": "HDInsight" + }, + { + "id": "27739", + "title": "hdinsight_spark_cluster", + "path": "website/docs/r/hdinsight_spark_cluster.html.markdown", + "slug": "hdinsight_spark_cluster", + "category": "resources", + "subcategory": "HDInsight" + }, + { + "id": "27740", + "title": "hdinsight_storm_cluster", + "path": "website/docs/r/hdinsight_storm_cluster.html.markdown", + "slug": "hdinsight_storm_cluster", + "category": "resources", + "subcategory": "HDInsight" + }, + { + "id": "27741", + "title": "healthcare_service", + "path": "website/docs/r/healthcare_service.html.markdown", + "slug": "healthcare_service", + "category": "resources", + "subcategory": "Healthcare API" + }, + { + "id": "27742", + "title": "image", + "path": "website/docs/r/image.html.markdown", + "slug": "image", + "category": "resources", + "subcategory": "Compute" + }, + { + "id": "27743", + "title": "iothub", + "path": "website/docs/r/iothub.html.markdown", + "slug": "iothub", + "category": "resources", + "subcategory": "IoT Hub" + }, + { + "id": "27744", + "title": "iothub_consumer_group", + "path": "website/docs/r/iothub_consumer_group.html.markdown", + "slug": "iothub_consumer_group", + "category": "resources", + "subcategory": "IoT Hub" + }, + { + "id": "27745", + "title": "iothub_dps", + "path": "website/docs/r/iothub_dps.html.markdown", + "slug": "iothub_dps", + "category": "resources", + "subcategory": "IoT Hub" + }, + { + "id": "27746", + "title": "iothub_dps_certificate", + "path": "website/docs/r/iothub_dps_certificate.html.markdown", + "slug": "iothub_dps_certificate", + "category": "resources", + "subcategory": "IoT Hub" + }, + { + "id": "27747", + "title": "iothub_endpoint_eventhub", + "path": "website/docs/r/iothub_endpoint_eventhub.html.markdown", + "slug": "iothub_endpoint_eventhub", + "category": "resources", + "subcategory": "Messaging" + }, + { + "id": "27748", + "title": "iothub_endpoint_servicebus_queue", + "path": "website/docs/r/iothub_endpoint_servicebus_queue.html.markdown", + "slug": "iothub_endpoint_servicebus_queue", + "category": "resources", + "subcategory": "Messaging" + }, + { + "id": "27749", + "title": "iothub_endpoint_servicebus_topic", + "path": "website/docs/r/iothub_endpoint_servicebus_topic.html.markdown", + "slug": "iothub_endpoint_servicebus_topic", + "category": "resources", + "subcategory": "Messaging" + }, + { + "id": "27750", + "title": "iothub_endpoint_storage_container", + "path": "website/docs/r/iothub_endpoint_storage_container.html.markdown", + "slug": "iothub_endpoint_storage_container", + "category": "resources", + "subcategory": "Messaging" + }, + { + "id": "27751", + "title": "iothub_route", + "path": "website/docs/r/iothub_route.html.markdown", + "slug": "iothub_route", + "category": "resources", + "subcategory": "Messaging" + }, + { + "id": "27752", + "title": "iothub_shared_access_policy", + "path": "website/docs/r/iothub_shared_access_policy.html.markdown", + "slug": "iothub_shared_access_policy", + "category": "resources", + "subcategory": "IoT Hub" + }, + { + "id": "27753", + "title": "key_vault", + "path": "website/docs/r/key_vault.html.markdown", + "slug": "key_vault", + "category": "resources", + "subcategory": "Key Vault" + }, + { + "id": "27754", + "title": "key_vault_access_policy", + "path": "website/docs/r/key_vault_access_policy.html.markdown", + "slug": "key_vault_access_policy", + "category": "resources", + "subcategory": "Key Vault" + }, + { + "id": "27755", + "title": "key_vault_certificate", + "path": "website/docs/r/key_vault_certificate.html.markdown", + "slug": "key_vault_certificate", + "category": "resources", + "subcategory": "Key Vault" + }, + { + "id": "27756", + "title": "key_vault_key", + "path": "website/docs/r/key_vault_key.html.markdown", + "slug": "key_vault_key", + "category": "resources", + "subcategory": "Key Vault" + }, + { + "id": "27757", + "title": "key_vault_secret", + "path": "website/docs/r/key_vault_secret.html.markdown", + "slug": "key_vault_secret", + "category": "resources", + "subcategory": "Key Vault" + }, + { + "id": "27758", + "title": "kubernetes_cluster", + "path": "website/docs/r/kubernetes_cluster.html.markdown", + "slug": "kubernetes_cluster", + "category": "resources", + "subcategory": "Container" + }, + { + "id": "27759", + "title": "kubernetes_cluster_node_pool", + "path": "website/docs/r/kubernetes_cluster_node_pool.html.markdown", + "slug": "kubernetes_cluster_node_pool", + "category": "resources", + "subcategory": "Container" + }, + { + "id": "27760", + "title": "kusto_cluster", + "path": "website/docs/r/kusto_cluster.html.markdown", + "slug": "kusto_cluster", + "category": "resources", + "subcategory": "Data Explorer" + }, + { + "id": "27761", + "title": "kusto_database", + "path": "website/docs/r/kusto_database.html.markdown", + "slug": "kusto_database", + "category": "resources", + "subcategory": "Data Explorer" + }, + { + "id": "27762", + "title": "kusto_eventhub_data_connection", + "path": "website/docs/r/kusto_eventhub_data_connection.html.markdown", + "slug": "kusto_eventhub_data_connection", + "category": "resources", + "subcategory": "Data Explorer" + }, + { + "id": "27763", + "title": "linux_virtual_machine_scale_set", + "path": "website/docs/r/linux_virtual_machine_scale_set.html.markdown", + "slug": "linux_virtual_machine_scale_set", + "category": "resources", + "subcategory": "Beta" + }, + { + "id": "27764", + "title": "loadbalancer", + "path": "website/docs/r/loadbalancer.html.markdown", + "slug": "loadbalancer", + "category": "resources", + "subcategory": "Load Balancer" + }, + { + "id": "27765", + "title": "loadbalancer_backend_address_pool", + "path": "website/docs/r/loadbalancer_backend_address_pool.html.markdown", + "slug": "loadbalancer_backend_address_pool", + "category": "resources", + "subcategory": "Load Balancer" + }, + { + "id": "27766", + "title": "loadbalancer_nat_pool", + "path": "website/docs/r/loadbalancer_nat_pool.html.markdown", + "slug": "loadbalancer_nat_pool", + "category": "resources", + "subcategory": "Load Balancer" + }, + { + "id": "27767", + "title": "loadbalancer_nat_rule", + "path": "website/docs/r/loadbalancer_nat_rule.html.markdown", + "slug": "loadbalancer_nat_rule", + "category": "resources", + "subcategory": "Load Balancer" + }, + { + "id": "27768", + "title": "loadbalancer_outbound_rule", + "path": "website/docs/r/loadbalancer_outbound_rule.html.markdown", + "slug": "loadbalancer_outbound_rule", + "category": "resources", + "subcategory": "Load Balancer" + }, + { + "id": "27769", + "title": "loadbalancer_probe", + "path": "website/docs/r/loadbalancer_probe.html.markdown", + "slug": "loadbalancer_probe", + "category": "resources", + "subcategory": "Load Balancer" + }, + { + "id": "27770", + "title": "loadbalancer_rule", + "path": "website/docs/r/loadbalancer_rule.html.markdown", + "slug": "loadbalancer_rule", + "category": "resources", + "subcategory": "Load Balancer" + }, + { + "id": "27771", + "title": "local_network_gateway", + "path": "website/docs/r/local_network_gateway.html.markdown", + "slug": "local_network_gateway", + "category": "resources", + "subcategory": "Network" + }, + { + "id": "27772", + "title": "log_analytics_linked_service", + "path": "website/docs/r/log_analytics_linked_service.html.markdown", + "slug": "log_analytics_linked_service", + "category": "resources", + "subcategory": "Log Analytics" + }, + { + "id": "27773", + "title": "log_analytics_solution", + "path": "website/docs/r/log_analytics_solution.html.markdown", + "slug": "log_analytics_solution", + "category": "resources", + "subcategory": "Log Analytics" + }, + { + "id": "27774", + "title": "log_analytics_workspace", + "path": "website/docs/r/log_analytics_workspace.html.markdown", + "slug": "log_analytics_workspace", + "category": "resources", + "subcategory": "Log Analytics" + }, + { + "id": "27775", + "title": "log_analytics_workspace_linked_service", + "path": "website/docs/r/log_analytics_workspace_linked_service.html.markdown", + "slug": "log_analytics_workspace_linked_service", + "category": "resources", + "subcategory": "Log Analytics" + }, + { + "id": "27776", + "title": "logic_app_action_custom", + "path": "website/docs/r/logic_app_action_custom.html.markdown", + "slug": "logic_app_action_custom", + "category": "resources", + "subcategory": "Logic App" + }, + { + "id": "27777", + "title": "logic_app_action_http", + "path": "website/docs/r/logic_app_action_http.html.markdown", + "slug": "logic_app_action_http", + "category": "resources", + "subcategory": "Logic App" + }, + { + "id": "27778", + "title": "logic_app_trigger_custom", + "path": "website/docs/r/logic_app_trigger_custom.html.markdown", + "slug": "logic_app_trigger_custom", + "category": "resources", + "subcategory": "Logic App" + }, + { + "id": "27779", + "title": "logic_app_trigger_http_request", + "path": "website/docs/r/logic_app_trigger_http_request.html.markdown", + "slug": "logic_app_trigger_http_request", + "category": "resources", + "subcategory": "Logic App" + }, + { + "id": "27780", + "title": "logic_app_trigger_recurrence", + "path": "website/docs/r/logic_app_trigger_recurrence.html.markdown", + "slug": "logic_app_trigger_recurrence", + "category": "resources", + "subcategory": "Logic App" + }, + { + "id": "27781", + "title": "logic_app_workflow", + "path": "website/docs/r/logic_app_workflow.html.markdown", + "slug": "logic_app_workflow", + "category": "resources", + "subcategory": "Logic App" + }, + { + "id": "27782", + "title": "managed_disk", + "path": "website/docs/r/managed_disk.html.markdown", + "slug": "managed_disk", + "category": "resources", + "subcategory": "Compute" + }, + { + "id": "27783", + "title": "management_group", + "path": "website/docs/r/management_group.html.markdown", + "slug": "management_group", + "category": "resources", + "subcategory": "Management" + }, + { + "id": "27784", + "title": "management_lock", + "path": "website/docs/r/management_lock.html.markdown", + "slug": "management_lock", + "category": "resources", + "subcategory": "Management" + }, + { + "id": "27785", + "title": "maps_account", + "path": "website/docs/r/maps_account.html.markdown", + "slug": "maps_account", + "category": "resources", + "subcategory": "Maps" + }, + { + "id": "27786", + "title": "mariadb_configuration", + "path": "website/docs/r/mariadb_configuration.html.markdown", + "slug": "mariadb_configuration", + "category": "resources", + "subcategory": "Database" + }, + { + "id": "27787", + "title": "mariadb_database", + "path": "website/docs/r/mariadb_database.html.markdown", + "slug": "mariadb_database", + "category": "resources", + "subcategory": "Database" + }, + { + "id": "27788", + "title": "mariadb_firewall_rule", + "path": "website/docs/r/mariadb_firewall_rule.html.markdown", + "slug": "mariadb_firewall_rule", + "category": "resources", + "subcategory": "Database" + }, + { + "id": "27789", + "title": "mariadb_server", + "path": "website/docs/r/mariadb_server.html.markdown", + "slug": "mariadb_server", + "category": "resources", + "subcategory": "Database" + }, + { + "id": "27790", + "title": "mariadb_virtual_network_rule", + "path": "website/docs/r/mariadb_virtual_network_rule.html.markdown", + "slug": "mariadb_virtual_network_rule", + "category": "resources", + "subcategory": "Database" + }, + { + "id": "27791", + "title": "marketplace_agreement", + "path": "website/docs/r/marketplace_agreement.html.markdown", + "slug": "marketplace_agreement", + "category": "resources", + "subcategory": "Compute" + }, + { + "id": "27792", + "title": "media_services_account", + "path": "website/docs/r/media_services_account.html.markdown", + "slug": "media_services_account", + "category": "resources", + "subcategory": "Media" + }, + { + "id": "27793", + "title": "metric_alertrule", + "path": "website/docs/r/metric_alertrule.html.markdown", + "slug": "metric_alertrule", + "category": "resources", + "subcategory": "Monitor" + }, + { + "id": "27794", + "title": "monitor_action_group", + "path": "website/docs/r/monitor_action_group.html.markdown", + "slug": "monitor_action_group", + "category": "resources", + "subcategory": "Monitor" + }, + { + "id": "27795", + "title": "monitor_activity_log_alert", + "path": "website/docs/r/monitor_activity_log_alert.html.markdown", + "slug": "monitor_activity_log_alert", + "category": "resources", + "subcategory": "Monitor" + }, + { + "id": "27796", + "title": "monitor_autoscale_setting", + "path": "website/docs/r/monitor_autoscale_setting.html.markdown", + "slug": "monitor_autoscale_setting", + "category": "resources", + "subcategory": "Monitor" + }, + { + "id": "27797", + "title": "monitor_diagnostic_setting", + "path": "website/docs/r/monitor_diagnostic_setting.html.markdown", + "slug": "monitor_diagnostic_setting", + "category": "resources", + "subcategory": "Monitor" + }, + { + "id": "27798", + "title": "monitor_log_profile", + "path": "website/docs/r/monitor_log_profile.html.markdown", + "slug": "monitor_log_profile", + "category": "resources", + "subcategory": "Monitor" + }, + { + "id": "27799", + "title": "monitor_metric_alert", + "path": "website/docs/r/monitor_metric_alert.html.markdown", + "slug": "monitor_metric_alert", + "category": "resources", + "subcategory": "Monitor" + }, + { + "id": "27800", + "title": "monitor_metric_alertrule", + "path": "website/docs/r/monitor_metric_alertrule.html.markdown", + "slug": "monitor_metric_alertrule", + "category": "resources", + "subcategory": "Monitor" + }, + { + "id": "27801", + "title": "mssql_elasticpool", + "path": "website/docs/r/mssql_elasticpool.html.markdown", + "slug": "mssql_elasticpool", + "category": "resources", + "subcategory": "Database" + }, + { + "id": "27802", + "title": "mysql_configuration", + "path": "website/docs/r/mysql_configuration.html.markdown", + "slug": "mysql_configuration", + "category": "resources", + "subcategory": "Database" + }, + { + "id": "27803", + "title": "mysql_database", + "path": "website/docs/r/mysql_database.html.markdown", + "slug": "mysql_database", + "category": "resources", + "subcategory": "Database" + }, + { + "id": "27804", + "title": "mysql_firewall_rule", + "path": "website/docs/r/mysql_firewall_rule.html.markdown", + "slug": "mysql_firewall_rule", + "category": "resources", + "subcategory": "Database" + }, + { + "id": "27805", + "title": "mysql_server", + "path": "website/docs/r/mysql_server.html.markdown", + "slug": "mysql_server", + "category": "resources", + "subcategory": "Database" + }, + { + "id": "27806", + "title": "mysql_virtual_network_rule", + "path": "website/docs/r/mysql_virtual_network_rule.html.markdown", + "slug": "mysql_virtual_network_rule", + "category": "resources", + "subcategory": "Database" + }, + { + "id": "27807", + "title": "netapp_account", + "path": "website/docs/r/netapp_account.html.markdown", + "slug": "netapp_account", + "category": "resources", + "subcategory": "NetApp" + }, + { + "id": "27808", + "title": "netapp_pool", + "path": "website/docs/r/netapp_pool.html.markdown", + "slug": "netapp_pool", + "category": "resources", + "subcategory": "NetApp" + }, + { + "id": "27809", + "title": "network_connection_monitor", + "path": "website/docs/r/network_connection_monitor.html.markdown", + "slug": "network_connection_monitor", + "category": "resources", + "subcategory": "Network" + }, + { + "id": "27810", + "title": "network_ddos_protection_plan", + "path": "website/docs/r/network_ddos_protection_plan.html.markdown", + "slug": "network_ddos_protection_plan", + "category": "resources", + "subcategory": "Network" + }, + { + "id": "27811", + "title": "network_interface", + "path": "website/docs/r/network_interface.html.markdown", + "slug": "network_interface", + "category": "resources", + "subcategory": "Network" + }, + { + "id": "27812", + "title": "network_interface_application_gateway_backend_address_pool_association", + "path": "website/docs/r/network_interface_application_gateway_backend_address_pool_association.html.markdown", + "slug": "network_interface_application_gateway_backend_address_pool_association", + "category": "resources", + "subcategory": "Network" + }, + { + "id": "27813", + "title": "network_interface_application_security_group_association", + "path": "website/docs/r/network_interface_application_security_group_association.html.markdown", + "slug": "network_interface_application_security_group_association", + "category": "resources", + "subcategory": "Network" + }, + { + "id": "27814", + "title": "network_interface_backend_address_pool_association", + "path": "website/docs/r/network_interface_backend_address_pool_association.html.markdown", + "slug": "network_interface_backend_address_pool_association", + "category": "resources", + "subcategory": "Network" + }, + { + "id": "27815", + "title": "network_interface_nat_rule_association", + "path": "website/docs/r/network_interface_nat_rule_association.html.markdown", + "slug": "network_interface_nat_rule_association", + "category": "resources", + "subcategory": "Network" + }, + { + "id": "27816", + "title": "network_packet_capture", + "path": "website/docs/r/network_packet_capture.html.markdown", + "slug": "network_packet_capture", + "category": "resources", + "subcategory": "Network" + }, + { + "id": "27817", + "title": "network_profile", + "path": "website/docs/r/network_profile.html.markdown", + "slug": "network_profile", + "category": "resources", + "subcategory": "Network" + }, + { + "id": "27818", + "title": "network_security_group", + "path": "website/docs/r/network_security_group.html.markdown", + "slug": "network_security_group", + "category": "resources", + "subcategory": "Network" + }, + { + "id": "27819", + "title": "network_security_rule", + "path": "website/docs/r/network_security_rule.html.markdown", + "slug": "network_security_rule", + "category": "resources", + "subcategory": "Network" + }, + { + "id": "27820", + "title": "network_watcher", + "path": "website/docs/r/network_watcher.html.markdown", + "slug": "network_watcher", + "category": "resources", + "subcategory": "Network" + }, + { + "id": "27821", + "title": "notification_hub", + "path": "website/docs/r/notification_hub.html.markdown", + "slug": "notification_hub", + "category": "resources", + "subcategory": "Messaging" + }, + { + "id": "27822", + "title": "notification_hub_authorization_rule", + "path": "website/docs/r/notification_hub_authorization_rule.html.markdown", + "slug": "notification_hub_authorization_rule", + "category": "resources", + "subcategory": "Messaging" + }, + { + "id": "27823", + "title": "notification_hub_namespace", + "path": "website/docs/r/notification_hub_namespace.html.markdown", + "slug": "notification_hub_namespace", + "category": "resources", + "subcategory": "Messaging" + }, + { + "id": "27824", + "title": "packet_capture", + "path": "website/docs/r/packet_capture.html.markdown", + "slug": "packet_capture", + "category": "resources", + "subcategory": "Network" + }, + { + "id": "27825", + "title": "policy_assignment", + "path": "website/docs/r/policy_assignment.html.markdown", + "slug": "policy_assignment", + "category": "resources", + "subcategory": "Policy" + }, + { + "id": "27826", + "title": "policy_definition", + "path": "website/docs/r/policy_definition.html.markdown", + "slug": "policy_definition", + "category": "resources", + "subcategory": "Policy" + }, + { + "id": "27827", + "title": "policy_set_definition", + "path": "website/docs/r/policy_set_definition.html.markdown", + "slug": "policy_set_definition", + "category": "resources", + "subcategory": "Policy" + }, + { + "id": "27828", + "title": "postgresql_configuration", + "path": "website/docs/r/postgresql_configuration.html.markdown", + "slug": "postgresql_configuration", + "category": "resources", + "subcategory": "Database" + }, + { + "id": "27829", + "title": "postgresql_database", + "path": "website/docs/r/postgresql_database.html.markdown", + "slug": "postgresql_database", + "category": "resources", + "subcategory": "Database" + }, + { + "id": "27830", + "title": "postgresql_firewall_rule", + "path": "website/docs/r/postgresql_firewall_rule.html.markdown", + "slug": "postgresql_firewall_rule", + "category": "resources", + "subcategory": "Database" + }, + { + "id": "27831", + "title": "postgresql_server", + "path": "website/docs/r/postgresql_server.html.markdown", + "slug": "postgresql_server", + "category": "resources", + "subcategory": "Database" + }, + { + "id": "27832", + "title": "postgresql_virtual_network_rule", + "path": "website/docs/r/postgresql_virtual_network_rule.html.markdown", + "slug": "postgresql_virtual_network_rule", + "category": "resources", + "subcategory": "Database" + }, + { + "id": "27833", + "title": "private_dns_a_record", + "path": "website/docs/r/private_dns_a_record.html.markdown", + "slug": "private_dns_a_record", + "category": "resources", + "subcategory": "Private DNS" + }, + { + "id": "27834", + "title": "private_dns_aaaa_record", + "path": "website/docs/r/private_dns_aaaa_record.html.markdown", + "slug": "private_dns_aaaa_record", + "category": "resources", + "subcategory": "Private DNS" + }, + { + "id": "27835", + "title": "private_dns_cname_record", + "path": "website/docs/r/private_dns_cname_record.html.markdown", + "slug": "private_dns_cname_record", + "category": "resources", + "subcategory": "Private DNS" + }, + { + "id": "27836", + "title": "private_dns_ptr_record", + "path": "website/docs/r/private_dns_ptr_record.html.markdown", + "slug": "private_dns_ptr_record", + "category": "resources", + "subcategory": "Private DNS" + }, + { + "id": "27837", + "title": "private_dns_srv_record", + "path": "website/docs/r/private_dns_srv_record.html.markdown", + "slug": "private_dns_srv_record", + "category": "resources", + "subcategory": "Private DNS" + }, + { + "id": "27838", + "title": "private_dns_zone", + "path": "website/docs/r/private_dns_zone.html.markdown", + "slug": "private_dns_zone", + "category": "resources", + "subcategory": "Private DNS" + }, + { + "id": "27839", + "title": "private_dns_zone_virtual_network_link", + "path": "website/docs/r/private_dns_zone_virtual_network_link.html.markdown", + "slug": "private_dns_zone_virtual_network_link", + "category": "resources", + "subcategory": "Private DNS" + }, + { + "id": "27840", + "title": "private_link_service", + "path": "website/docs/r/private_link_service.html.markdown", + "slug": "private_link_service", + "category": "resources", + "subcategory": "" + }, + { + "id": "27841", + "title": "proximity_placement_group", + "path": "website/docs/r/proximity_placement_group.html.markdown", + "slug": "proximity_placement_group", + "category": "resources", + "subcategory": "Compute" + }, + { + "id": "27842", + "title": "public_ip", + "path": "website/docs/r/public_ip.html.markdown", + "slug": "public_ip", + "category": "resources", + "subcategory": "Network" + }, + { + "id": "27843", + "title": "public_ip_prefix", + "path": "website/docs/r/public_ip_prefix.html.markdown", + "slug": "public_ip_prefix", + "category": "resources", + "subcategory": "Network" + }, + { + "id": "27844", + "title": "recovery_network_mapping", + "path": "website/docs/r/recovery_network_mapping.html.markdown", + "slug": "recovery_network_mapping", + "category": "resources", + "subcategory": "Recovery Services" + }, + { + "id": "27845", + "title": "recovery_services_fabric", + "path": "website/docs/r/recovery_services_fabric.html.markdown", + "slug": "recovery_services_fabric", + "category": "resources", + "subcategory": "Recovery Services" + }, + { + "id": "27846", + "title": "recovery_services_protected_vm", + "path": "website/docs/r/recovery_services_protected_vm.markdown", + "slug": "recovery_services_protected_vm", + "category": "resources", + "subcategory": "Recovery Services" + }, + { + "id": "27847", + "title": "recovery_services_protection_container", + "path": "website/docs/r/recovery_services_protection_container.html.markdown", + "slug": "recovery_services_protection_container", + "category": "resources", + "subcategory": "Recovery Services" + }, + { + "id": "27848", + "title": "recovery_services_protection_container_mapping", + "path": "website/docs/r/recovery_services_protection_container_mapping.html.markdown", + "slug": "recovery_services_protection_container_mapping", + "category": "resources", + "subcategory": "Recovery Services" + }, + { + "id": "27849", + "title": "recovery_services_protection_policy_vm", + "path": "website/docs/r/recovery_services_protection_policy_vm.markdown", + "slug": "recovery_services_protection_policy_vm", + "category": "resources", + "subcategory": "Recovery Services" + }, + { + "id": "27850", + "title": "recovery_services_replicated_vm", + "path": "website/docs/r/recovery_services_replicated_vm.html.markdown", + "slug": "recovery_services_replicated_vm", + "category": "resources", + "subcategory": "Recovery Services" + }, + { + "id": "27851", + "title": "recovery_services_replication_policy", + "path": "website/docs/r/recovery_services_replication_policy.html.markdown", + "slug": "recovery_services_replication_policy", + "category": "resources", + "subcategory": "Recovery Services" + }, + { + "id": "27852", + "title": "recovery_services_vault", + "path": "website/docs/r/recovery_services_vault.markdown", + "slug": "recovery_services_vault", + "category": "resources", + "subcategory": "Recovery Services" + }, + { + "id": "27853", + "title": "redis_cache", + "path": "website/docs/r/redis_cache.html.markdown", + "slug": "redis_cache", + "category": "resources", + "subcategory": "Redis" + }, + { + "id": "27854", + "title": "redis_firewall_rule", + "path": "website/docs/r/redis_firewall_rule.html.markdown", + "slug": "redis_firewall_rule", + "category": "resources", + "subcategory": "Redis" + }, + { + "id": "27855", + "title": "relay_hybrid_connection", + "path": "website/docs/r/relay_hybrid_connection.html.markdown", + "slug": "relay_hybrid_connection", + "category": "resources", + "subcategory": "Messaging" + }, + { + "id": "27856", + "title": "relay_namespace", + "path": "website/docs/r/relay_namespace.html.markdown", + "slug": "relay_namespace", + "category": "resources", + "subcategory": "Messaging" + }, + { + "id": "27857", + "title": "resource_group", + "path": "website/docs/r/resource_group.html.markdown", + "slug": "resource_group", + "category": "resources", + "subcategory": "Base" + }, + { + "id": "27858", + "title": "role_assignment", + "path": "website/docs/r/role_assignment.html.markdown", + "slug": "role_assignment", + "category": "resources", + "subcategory": "Authorization" + }, + { + "id": "27859", + "title": "role_definition", + "path": "website/docs/r/role_definition.html.markdown", + "slug": "role_definition", + "category": "resources", + "subcategory": "Authorization" + }, + { + "id": "27860", + "title": "route", + "path": "website/docs/r/route.html.markdown", + "slug": "route", + "category": "resources", + "subcategory": "Network" + }, + { + "id": "27861", + "title": "route_table", + "path": "website/docs/r/route_table.html.markdown", + "slug": "route_table", + "category": "resources", + "subcategory": "Network" + }, + { + "id": "27862", + "title": "scheduler_job", + "path": "website/docs/r/scheduler_job.html.markdown", + "slug": "scheduler_job", + "category": "resources", + "subcategory": "Scheduler" + }, + { + "id": "27863", + "title": "scheduler_job_collection", + "path": "website/docs/r/scheduler_job_collection.html.markdown", + "slug": "scheduler_job_collection", + "category": "resources", + "subcategory": "Scheduler" + }, + { + "id": "27864", + "title": "search_service", + "path": "website/docs/r/search_service.html.markdown", + "slug": "search_service", + "category": "resources", + "subcategory": "Search" + }, + { + "id": "27865", + "title": "security_center_contact", + "path": "website/docs/r/security_center_contact.markdown", + "slug": "security_center_contact", + "category": "resources", + "subcategory": "Security Center" + }, + { + "id": "27866", + "title": "security_center_subscription_pricing", + "path": "website/docs/r/security_center_subscription_pricing.markdown", + "slug": "security_center_subscription_pricing", + "category": "resources", + "subcategory": "Security Center" + }, + { + "id": "27867", + "title": "security_center_workspace", + "path": "website/docs/r/security_center_workspace.markdown", + "slug": "security_center_workspace", + "category": "resources", + "subcategory": "Security Center" + }, + { + "id": "27868", + "title": "service_fabric_cluster", + "path": "website/docs/r/service_fabric_cluster.html.markdown", + "slug": "service_fabric_cluster", + "category": "resources", + "subcategory": "Service Fabric" + }, + { + "id": "27869", + "title": "servicebus_namespace", + "path": "website/docs/r/servicebus_namespace.html.markdown", + "slug": "servicebus_namespace", + "category": "resources", + "subcategory": "Messaging" + }, + { + "id": "27870", + "title": "servicebus_namespace_authorization_rule", + "path": "website/docs/r/servicebus_namespace_authorization_rule.html.markdown", + "slug": "servicebus_namespace_authorization_rule", + "category": "resources", + "subcategory": "Messaging" + }, + { + "id": "27871", + "title": "servicebus_queue", + "path": "website/docs/r/servicebus_queue.html.markdown", + "slug": "servicebus_queue", + "category": "resources", + "subcategory": "Messaging" + }, + { + "id": "27872", + "title": "servicebus_queue_authorization_rule", + "path": "website/docs/r/servicebus_queue_authorization_rule.html.markdown", + "slug": "servicebus_queue_authorization_rule", + "category": "resources", + "subcategory": "Messaging" + }, + { + "id": "27873", + "title": "servicebus_subscription", + "path": "website/docs/r/servicebus_subscription.html.markdown", + "slug": "servicebus_subscription", + "category": "resources", + "subcategory": "Messaging" + }, + { + "id": "27874", + "title": "servicebus_subscription_rule", + "path": "website/docs/r/servicebus_subscription_rule.html.markdown", + "slug": "servicebus_subscription_rule", + "category": "resources", + "subcategory": "Messaging" + }, + { + "id": "27875", + "title": "servicebus_topic", + "path": "website/docs/r/servicebus_topic.html.markdown", + "slug": "servicebus_topic", + "category": "resources", + "subcategory": "Messaging" + }, + { + "id": "27876", + "title": "servicebus_topic_authorization_rule", + "path": "website/docs/r/servicebus_topic_authorization_rule.html.markdown", + "slug": "servicebus_topic_authorization_rule", + "category": "resources", + "subcategory": "Messaging" + }, + { + "id": "27877", + "title": "shared_image", + "path": "website/docs/r/shared_image.html.markdown", + "slug": "shared_image", + "category": "resources", + "subcategory": "Compute" + }, + { + "id": "27878", + "title": "shared_image_gallery", + "path": "website/docs/r/shared_image_gallery.html.markdown", + "slug": "shared_image_gallery", + "category": "resources", + "subcategory": "Compute" + }, + { + "id": "27879", + "title": "shared_image_version", + "path": "website/docs/r/shared_image_version.html.markdown", + "slug": "shared_image_version", + "category": "resources", + "subcategory": "Compute" + }, + { + "id": "27880", + "title": "signalr_service", + "path": "website/docs/r/signalr_service.html.markdown", + "slug": "signalr_service", + "category": "resources", + "subcategory": "Messaging" + }, + { + "id": "27881", + "title": "snapshot", + "path": "website/docs/r/snapshot.html.markdown", + "slug": "snapshot", + "category": "resources", + "subcategory": "Compute" + }, + { + "id": "27882", + "title": "sql_active_directory_administrator", + "path": "website/docs/r/sql_active_directory_administrator.markdown", + "slug": "sql_active_directory_administrator", + "category": "resources", + "subcategory": "Database" + }, + { + "id": "27883", + "title": "sql_database", + "path": "website/docs/r/sql_database.html.markdown", + "slug": "sql_database", + "category": "resources", + "subcategory": "Database" + }, + { + "id": "27884", + "title": "sql_elasticpool", + "path": "website/docs/r/sql_elasticpool.html.markdown", + "slug": "sql_elasticpool", + "category": "resources", + "subcategory": "Database" + }, + { + "id": "27885", + "title": "sql_failover_group", + "path": "website/docs/r/sql_failover_group.html.markdown", + "slug": "sql_failover_group", + "category": "resources", + "subcategory": "Database" + }, + { + "id": "27886", + "title": "sql_firewall_rule", + "path": "website/docs/r/sql_firewall_rule.html.markdown", + "slug": "sql_firewall_rule", + "category": "resources", + "subcategory": "Database" + }, + { + "id": "27887", + "title": "sql_server", + "path": "website/docs/r/sql_server.html.markdown", + "slug": "sql_server", + "category": "resources", + "subcategory": "Database" + }, + { + "id": "27888", + "title": "sql_virtual_network_rule", + "path": "website/docs/r/sql_virtual_network_rule.html.markdown", + "slug": "sql_virtual_network_rule", + "category": "resources", + "subcategory": "Database" + }, + { + "id": "27889", + "title": "storage_account", + "path": "website/docs/r/storage_account.html.markdown", + "slug": "storage_account", + "category": "resources", + "subcategory": "Storage" + }, + { + "id": "27890", + "title": "storage_blob", + "path": "website/docs/r/storage_blob.html.markdown", + "slug": "storage_blob", + "category": "resources", + "subcategory": "Storage" + }, + { + "id": "27891", + "title": "storage_container", + "path": "website/docs/r/storage_container.html.markdown", + "slug": "storage_container", + "category": "resources", + "subcategory": "Storage" + }, + { + "id": "27892", + "title": "storage_data_lake_gen2_filesystem", + "path": "website/docs/r/storage_data_lake_gen2_filesystem.html.markdown", + "slug": "storage_data_lake_gen2_filesystem", + "category": "resources", + "subcategory": "Storage" + }, + { + "id": "27893", + "title": "storage_management_policy", + "path": "website/docs/r/storage_management_policy.html.markdown", + "slug": "storage_management_policy", + "category": "resources", + "subcategory": "Storage" + }, + { + "id": "27894", + "title": "storage_queue", + "path": "website/docs/r/storage_queue.html.markdown", + "slug": "storage_queue", + "category": "resources", + "subcategory": "Storage" + }, + { + "id": "27895", + "title": "storage_share", + "path": "website/docs/r/storage_share.html.markdown", + "slug": "storage_share", + "category": "resources", + "subcategory": "Storage" + }, + { + "id": "27896", + "title": "storage_share_directory", + "path": "website/docs/r/storage_share_directory.html.markdown", + "slug": "storage_share_directory", + "category": "resources", + "subcategory": "Storage" + }, + { + "id": "27897", + "title": "storage_table", + "path": "website/docs/r/storage_table.html.markdown", + "slug": "storage_table", + "category": "resources", + "subcategory": "Storage" + }, + { + "id": "27898", + "title": "storage_table_entity", + "path": "website/docs/r/storage_table_entity.html.markdown", + "slug": "storage_table_entity", + "category": "resources", + "subcategory": "Storage" + }, + { + "id": "27899", + "title": "stream_analytics_function_javascript_udf", + "path": "website/docs/r/stream_analytics_function_javascript_udf.html.markdown", + "slug": "stream_analytics_function_javascript_udf", + "category": "resources", + "subcategory": "Stream Analytics" + }, + { + "id": "27900", + "title": "stream_analytics_job", + "path": "website/docs/r/stream_analytics_job.html.markdown", + "slug": "stream_analytics_job", + "category": "resources", + "subcategory": "Stream Analytics" + }, + { + "id": "27901", + "title": "stream_analytics_output_blob", + "path": "website/docs/r/stream_analytics_output_blob.html.markdown", + "slug": "stream_analytics_output_blob", + "category": "resources", + "subcategory": "Stream Analytics" + }, + { + "id": "27902", + "title": "stream_analytics_output_eventhub", + "path": "website/docs/r/stream_analytics_output_eventhub.html.markdown", + "slug": "stream_analytics_output_eventhub", + "category": "resources", + "subcategory": "Stream Analytics" + }, + { + "id": "27903", + "title": "stream_analytics_output_mssql", + "path": "website/docs/r/stream_analytics_output_mssql.html.markdown", + "slug": "stream_analytics_output_mssql", + "category": "resources", + "subcategory": "Stream Analytics" + }, + { + "id": "27904", + "title": "stream_analytics_output_servicebus_queue", + "path": "website/docs/r/stream_analytics_output_servicebus_queue.html.markdown", + "slug": "stream_analytics_output_servicebus_queue", + "category": "resources", + "subcategory": "Stream Analytics" + }, + { + "id": "27905", + "title": "stream_analytics_output_servicebus_topic", + "path": "website/docs/r/stream_analytics_output_servicebus_topic.html.markdown", + "slug": "stream_analytics_output_servicebus_topic", + "category": "resources", + "subcategory": "Stream Analytics" + }, + { + "id": "27906", + "title": "stream_analytics_stream_input_blob", + "path": "website/docs/r/stream_analytics_stream_input_blob.html.markdown", + "slug": "stream_analytics_stream_input_blob", + "category": "resources", + "subcategory": "Stream Analytics" + }, + { + "id": "27907", + "title": "stream_analytics_stream_input_eventhub", + "path": "website/docs/r/stream_analytics_stream_input_eventhub.html.markdown", + "slug": "stream_analytics_stream_input_eventhub", + "category": "resources", + "subcategory": "Stream Analytics" + }, + { + "id": "27908", + "title": "stream_analytics_stream_input_iothub", + "path": "website/docs/r/stream_analytics_stream_input_iothub.html.markdown", + "slug": "stream_analytics_stream_input_iothub", + "category": "resources", + "subcategory": "Stream Analytics" + }, + { + "id": "27909", + "title": "subnet", + "path": "website/docs/r/subnet.html.markdown", + "slug": "subnet", + "category": "resources", + "subcategory": "Network" + }, + { + "id": "27910", + "title": "subnet_network_security_group_association", + "path": "website/docs/r/subnet_network_security_group_association.html.markdown", + "slug": "subnet_network_security_group_association", + "category": "resources", + "subcategory": "Network" + }, + { + "id": "27911", + "title": "subnet_route_table_association", + "path": "website/docs/r/subnet_route_table_association.html.markdown", + "slug": "subnet_route_table_association", + "category": "resources", + "subcategory": "Network" + }, + { + "id": "27912", + "title": "template_deployment", + "path": "website/docs/r/template_deployment.html.markdown", + "slug": "template_deployment", + "category": "resources", + "subcategory": "Template" + }, + { + "id": "27913", + "title": "traffic_manager_endpoint", + "path": "website/docs/r/traffic_manager_endpoint.html.markdown", + "slug": "traffic_manager_endpoint", + "category": "resources", + "subcategory": "Network" + }, + { + "id": "27914", + "title": "traffic_manager_profile", + "path": "website/docs/r/traffic_manager_profile.html.markdown", + "slug": "traffic_manager_profile", + "category": "resources", + "subcategory": "Network" + }, + { + "id": "27915", + "title": "user_assigned_identity", + "path": "website/docs/r/user_assigned_identity.markdown", + "slug": "user_assigned_identity", + "category": "resources", + "subcategory": "Authorization" + }, + { + "id": "27916", + "title": "virtual_machine", + "path": "website/docs/r/virtual_machine.html.markdown", + "slug": "virtual_machine", + "category": "resources", + "subcategory": "Compute" + }, + { + "id": "27917", + "title": "virtual_machine_data_disk_attachment", + "path": "website/docs/r/virtual_machine_data_disk_attachment.html.markdown", + "slug": "virtual_machine_data_disk_attachment", + "category": "resources", + "subcategory": "Compute" + }, + { + "id": "27918", + "title": "virtual_machine_extension", + "path": "website/docs/r/virtual_machine_extension.html.markdown", + "slug": "virtual_machine_extension", + "category": "resources", + "subcategory": "Compute" + }, + { + "id": "27919", + "title": "virtual_machine_scale_set", + "path": "website/docs/r/virtual_machine_scale_set.html.markdown", + "slug": "virtual_machine_scale_set", + "category": "resources", + "subcategory": "Compute" + }, + { + "id": "27920", + "title": "virtual_network", + "path": "website/docs/r/virtual_network.html.markdown", + "slug": "virtual_network", + "category": "resources", + "subcategory": "Network" + }, + { + "id": "27921", + "title": "virtual_network_gateway", + "path": "website/docs/r/virtual_network_gateway.html.markdown", + "slug": "virtual_network_gateway", + "category": "resources", + "subcategory": "Network" + }, + { + "id": "27922", + "title": "virtual_network_gateway_connection", + "path": "website/docs/r/virtual_network_gateway_connection.html.markdown", + "slug": "virtual_network_gateway_connection", + "category": "resources", + "subcategory": "Network" + }, + { + "id": "27923", + "title": "virtual_network_peering", + "path": "website/docs/r/virtual_network_peering.html.markdown", + "slug": "virtual_network_peering", + "category": "resources", + "subcategory": "Network" + }, + { + "id": "27924", + "title": "virtual_wan", + "path": "website/docs/r/virtual_wan.html.markdown", + "slug": "virtual_wan", + "category": "resources", + "subcategory": "Network" + }, + { + "id": "27925", + "title": "web_application_firewall_policy", + "path": "website/docs/r/web_application_firewall_policy.html.markdown", + "slug": "web_application_firewall_policy", + "category": "resources", + "subcategory": "Network" + }, + { + "id": "27926", + "title": "windows_virtual_machine_scale_set", + "path": "website/docs/r/windows_virtual_machine_scale_set.html.markdown", + "slug": "windows_virtual_machine_scale_set", + "category": "resources", + "subcategory": "Beta" + } + ] +} diff --git a/lib/datasource/terraform-provider/__fixtures__/releaseBackendIndex.json b/lib/datasource/terraform-provider/__fixtures__/releaseBackendIndex.json index a5cd75cb8425e8..ff04c0cd8ebf9e 100644 --- a/lib/datasource/terraform-provider/__fixtures__/releaseBackendIndex.json +++ b/lib/datasource/terraform-provider/__fixtures__/releaseBackendIndex.json @@ -43,26 +43,26 @@ { "name": "terraform-provider-google-beta", "version": "1.20.0", - "os": "openbsd", - "arch": "386", - "filename": "terraform-provider-google-beta_1.20.0_openbsd_386.zip", - "url": "https://releases.hashicorp.com/terraform-provider-google-beta/1.20.0/terraform-provider-google-beta_1.20.0_openbsd_386.zip" + "os": "darwin", + "arch": "amd64", + "filename": "terraform-provider-google-beta_1.20.0_darwin_amd64.zip", + "url": "https://releases.hashicorp.com/terraform-provider-google-beta/1.20.0/terraform-provider-google-beta_1.20.0_darwin_amd64.zip" }, { "name": "terraform-provider-google-beta", "version": "1.20.0", - "os": "openbsd", - "arch": "amd64", - "filename": "terraform-provider-google-beta_1.20.0_openbsd_amd64.zip", - "url": "https://releases.hashicorp.com/terraform-provider-google-beta/1.20.0/terraform-provider-google-beta_1.20.0_openbsd_amd64.zip" + "os": "freebsd", + "arch": "386", + "filename": "terraform-provider-google-beta_1.20.0_freebsd_386.zip", + "url": "https://releases.hashicorp.com/terraform-provider-google-beta/1.20.0/terraform-provider-google-beta_1.20.0_freebsd_386.zip" }, { "name": "terraform-provider-google-beta", "version": "1.20.0", - "os": "solaris", + "os": "freebsd", "arch": "amd64", - "filename": "terraform-provider-google-beta_1.20.0_solaris_amd64.zip", - "url": "https://releases.hashicorp.com/terraform-provider-google-beta/1.20.0/terraform-provider-google-beta_1.20.0_solaris_amd64.zip" + "filename": "terraform-provider-google-beta_1.20.0_freebsd_amd64.zip", + "url": "https://releases.hashicorp.com/terraform-provider-google-beta/1.20.0/terraform-provider-google-beta_1.20.0_freebsd_amd64.zip" } ] }, diff --git a/lib/datasource/terraform-provider/__snapshots__/index.spec.ts.snap b/lib/datasource/terraform-provider/__snapshots__/index.spec.ts.snap index 0f5172b44cea82..1790d5fed3a454 100644 --- a/lib/datasource/terraform-provider/__snapshots__/index.spec.ts.snap +++ b/lib/datasource/terraform-provider/__snapshots__/index.spec.ts.snap @@ -59,200 +59,11 @@ Object { "registryUrl": "https://registry.terraform.io", "releases": Array [ Object { - "version": "0.1.0", - }, - Object { - "version": "0.1.1", - }, - Object { - "version": "0.1.2", - }, - Object { - "version": "0.1.3", - }, - Object { - "version": "0.1.4", - }, - Object { - "version": "0.1.5", - }, - Object { - "version": "0.1.6", - }, - Object { - "version": "0.1.7", - }, - Object { - "version": "0.2.0", - }, - Object { - "version": "0.2.1", - }, - Object { - "version": "0.2.2", - }, - Object { - "version": "0.3.0", - }, - Object { - "version": "0.3.1", - }, - Object { - "version": "0.3.2", - }, - Object { - "version": "0.3.3", - }, - Object { - "version": "1.0.0", - }, - Object { - "version": "1.0.1", - }, - Object { - "version": "1.1.0", - }, - Object { - "version": "1.1.1", - }, - Object { - "version": "1.1.2", - }, - Object { - "version": "1.2.0", - }, - Object { - "version": "1.3.0", - }, - Object { - "version": "1.3.1", - }, - Object { - "version": "1.3.2", - }, - Object { - "version": "1.3.3", - }, - Object { - "version": "1.4.0", - }, - Object { - "version": "1.5.0", - }, - Object { - "version": "1.6.0", - }, - Object { - "version": "1.7.0", - }, - Object { - "version": "1.8.0", - }, - Object { - "version": "1.9.0", - }, - Object { - "version": "1.10.0", - }, - Object { - "version": "1.11.0", - }, - Object { - "version": "1.12.0", - }, - Object { - "version": "1.13.0", - }, - Object { - "version": "1.14.0", - }, - Object { - "version": "1.15.0", - }, - Object { - "version": "1.16.0", - }, - Object { - "version": "1.17.0", - }, - Object { - "version": "1.18.0", - }, - Object { - "version": "1.19.0", - }, - Object { - "version": "1.20.0", - }, - Object { - "version": "1.21.0", - }, - Object { - "version": "1.22.0", - }, - Object { - "version": "1.22.1", - }, - Object { - "version": "1.23.0", - }, - Object { - "version": "1.24.0", - }, - Object { - "version": "1.25.0", - }, - Object { - "version": "1.26.0", - }, - Object { - "version": "1.27.0", - }, - Object { - "version": "1.27.1", - }, - Object { - "version": "1.28.0", - }, - Object { - "version": "1.29.0", - }, - Object { - "version": "1.30.0", - }, - Object { - "version": "1.30.1", - }, - Object { - "version": "1.31.0", - }, - Object { - "version": "1.32.0", - }, - Object { - "version": "1.32.1", - }, - Object { - "version": "1.33.0", - }, - Object { - "version": "1.33.1", - }, - Object { - "version": "1.34.0", - }, - Object { - "version": "1.35.0", - }, - Object { - "version": "1.36.0", - }, - Object { - "version": "1.36.1", + "version": "2.52.0", }, Object { "releaseTimestamp": "2019-11-26T08:22:56.000Z", - "version": "1.37.0", + "version": "2.53.0", }, ], "sourceUrl": "https://github.com/terraform-providers/terraform-provider-azurerm", @@ -290,200 +101,11 @@ Object { "registryUrl": "https://registry.company.com", "releases": Array [ Object { - "version": "0.1.0", - }, - Object { - "version": "0.1.1", - }, - Object { - "version": "0.1.2", - }, - Object { - "version": "0.1.3", - }, - Object { - "version": "0.1.4", - }, - Object { - "version": "0.1.5", - }, - Object { - "version": "0.1.6", - }, - Object { - "version": "0.1.7", - }, - Object { - "version": "0.2.0", - }, - Object { - "version": "0.2.1", - }, - Object { - "version": "0.2.2", - }, - Object { - "version": "0.3.0", - }, - Object { - "version": "0.3.1", - }, - Object { - "version": "0.3.2", - }, - Object { - "version": "0.3.3", - }, - Object { - "version": "1.0.0", - }, - Object { - "version": "1.0.1", - }, - Object { - "version": "1.1.0", - }, - Object { - "version": "1.1.1", - }, - Object { - "version": "1.1.2", - }, - Object { - "version": "1.2.0", - }, - Object { - "version": "1.3.0", - }, - Object { - "version": "1.3.1", - }, - Object { - "version": "1.3.2", - }, - Object { - "version": "1.3.3", - }, - Object { - "version": "1.4.0", - }, - Object { - "version": "1.5.0", - }, - Object { - "version": "1.6.0", - }, - Object { - "version": "1.7.0", - }, - Object { - "version": "1.8.0", - }, - Object { - "version": "1.9.0", - }, - Object { - "version": "1.10.0", - }, - Object { - "version": "1.11.0", - }, - Object { - "version": "1.12.0", - }, - Object { - "version": "1.13.0", - }, - Object { - "version": "1.14.0", - }, - Object { - "version": "1.15.0", - }, - Object { - "version": "1.16.0", - }, - Object { - "version": "1.17.0", - }, - Object { - "version": "1.18.0", - }, - Object { - "version": "1.19.0", - }, - Object { - "version": "1.20.0", - }, - Object { - "version": "1.21.0", - }, - Object { - "version": "1.22.0", - }, - Object { - "version": "1.22.1", - }, - Object { - "version": "1.23.0", - }, - Object { - "version": "1.24.0", - }, - Object { - "version": "1.25.0", - }, - Object { - "version": "1.26.0", - }, - Object { - "version": "1.27.0", - }, - Object { - "version": "1.27.1", - }, - Object { - "version": "1.28.0", - }, - Object { - "version": "1.29.0", - }, - Object { - "version": "1.30.0", - }, - Object { - "version": "1.30.1", - }, - Object { - "version": "1.31.0", - }, - Object { - "version": "1.32.0", - }, - Object { - "version": "1.32.1", - }, - Object { - "version": "1.33.0", - }, - Object { - "version": "1.33.1", - }, - Object { - "version": "1.34.0", - }, - Object { - "version": "1.35.0", - }, - Object { - "version": "1.36.0", - }, - Object { - "version": "1.36.1", + "version": "2.52.0", }, Object { "releaseTimestamp": "2019-11-26T08:22:56.000Z", - "version": "1.37.0", + "version": "2.53.0", }, ], "sourceUrl": "https://github.com/terraform-providers/terraform-provider-azurerm", diff --git a/lib/datasource/terraform-provider/types.ts b/lib/datasource/terraform-provider/types.ts index 40f3bdfadc50ce..e2a739c48da723 100644 --- a/lib/datasource/terraform-provider/types.ts +++ b/lib/datasource/terraform-provider/types.ts @@ -1,3 +1,18 @@ +export interface VersionDetailResponse { + name: string; + version: string; + builds: TerraformBuild[]; +} + +export interface TerraformBuild { + name: string; + version: string; + os: string; + arch: string; + filename: string; + url: string; +} + export interface TerraformProvider { namespace: string; name: string; @@ -8,13 +23,12 @@ export interface TerraformProvider { published_at: string; } -export interface TerraformProviderReleaseBackend { - [key: string]: { +export type TerraformProviderReleaseBackend = Record< + string, + { name: string; versions: VersionsReleaseBackend; - }; -} + } +>; -interface VersionsReleaseBackend { - [key: string]: Record; -} +export type VersionsReleaseBackend = Record; diff --git a/lib/manager/terraform/index.ts b/lib/manager/terraform/index.ts index 9b0a8b0d2050ee..17107d2b17b8bd 100644 --- a/lib/manager/terraform/index.ts +++ b/lib/manager/terraform/index.ts @@ -1,7 +1,9 @@ import * as hashicorpVersioning from '../../versioning/hashicorp'; +export { updateArtifacts } from './lockfile'; export { extractPackageFile } from './extract'; +export const supportsLockFileMaintenance = true; export const defaultConfig = { commitMessageTopic: 'Terraform {{managerData.terraformDependencyType}} {{depName}}', diff --git a/lib/manager/terraform/lockfile/__fixtures__/releaseBackendAzurerm_2_56_0.json b/lib/manager/terraform/lockfile/__fixtures__/releaseBackendAzurerm_2_56_0.json new file mode 100644 index 00000000000000..46b15368939320 --- /dev/null +++ b/lib/manager/terraform/lockfile/__fixtures__/releaseBackendAzurerm_2_56_0.json @@ -0,0 +1,24 @@ +{ + "name": "terraform-provider-azurerm", + "version": "2.56.0", + "shasums": "terraform-provider-azurerm_2.56.0_SHA256SUMS", + "shasums_signature": "terraform-provider-azurerm_2.56.0_SHA256SUMS.sig", + "builds": [ + { + "name": "terraform-provider-azurerm", + "version": "2.56.0", + "os": "darwin", + "arch": "amd64", + "filename": "terraform-provider-azurerm_2.56.0_darwin_amd64.zip", + "url": "https://releases.hashicorp.com/terraform-provider-azurerm/2.56.0/terraform-provider-azurerm_2.56.0_darwin_amd64.zip" + }, + { + "name": "terraform-provider-azurerm", + "version": "2.56.0", + "os": "linux", + "arch": "amd64", + "filename": "terraform-provider-azurerm_2.56.0_linux_amd64.zip", + "url": "https://releases.hashicorp.com/terraform-provider-azurerm/2.56.0/terraform-provider-azurerm_2.56.0_linux_amd64.zip" + } + ] +} diff --git a/lib/manager/terraform/lockfile/__fixtures__/test.zip b/lib/manager/terraform/lockfile/__fixtures__/test.zip new file mode 100644 index 00000000000000..7aa2446540b45e Binary files /dev/null and b/lib/manager/terraform/lockfile/__fixtures__/test.zip differ diff --git a/lib/manager/terraform/lockfile/__fixtures__/validLockfile.hcl b/lib/manager/terraform/lockfile/__fixtures__/validLockfile.hcl new file mode 100644 index 00000000000000..2c8d639cbf100a --- /dev/null +++ b/lib/manager/terraform/lockfile/__fixtures__/validLockfile.hcl @@ -0,0 +1,59 @@ +# This file is maintained automatically by "terraform init". +# Manual edits may be lost in future updates. + +provider "registry.terraform.io/hashicorp/aws" { + version = "3.0.0" + constraints = "3.0.0" + hashes = [ + "h1:ULKfwySvQ4pDhy027ryRhLxDhg640wsojYc+7NHMFBU=", + "zh:25294510ae9c250502f2e37ac32b01017439735f098f82a1728772427626a2fd", + "zh:3b723e7772d47bd8cc11bea6e5d3e0b5e1df8398c0e7aaf510e3a8a54e0f1874", + "zh:4b7b73b86f4a0705d5d2a7f1d3ad3279706bdb3957a48f4a389c36918fba838e", + "zh:9e26cdc3be97e3001c253c0ca28c5c8ff2d5476373ca1beb849f3f3957ce7f1a", + "zh:9e73cf1304bf57968d3048d70c0b766d41497430a2a9a7a718a196f3a385106a", + "zh:a30b5b66facfbb2b02814e4cd33ca9899f9ade5bbf478f78c41d2fe789f0582a", + "zh:b06fb5da094db41cb5e430c95c988b73f32695e9f90f25499e926842dbd21b21", + "zh:c5a4ff607e9e9edee3fcd6d6666241fb532adf88ea1fe24f2aa1eb36845b3ca3", + "zh:df568a69087831c1780fac4395630a2cfb3cdf67b7dffbfe16bd78c64770bb75", + "zh:fce1b69dd673aace19508640b0b9b7eb1ef7e746d76cb846b49e7d52e0f5fb7e", + ] +} + +provider "registry.terraform.io/hashicorp/azurerm" { + version = "2.50.0" + constraints = "~> 2.50" + hashes = [ + "h1:Vr6WUm88s9hXGkyVjHtHsP2Jmc2ypQXn6ww7dXtvk1M=", + "zh:0c0688d5a743248f8646d39eb3645a4ac19fd7523ba1b47072fa3fb03b92b1b0", + "zh:2beb3a55ee970f87a9292ae96d57134be8a03d0566117e7be0fe0d9c1267e4ea", + "zh:38091b463fbafe5756420ce34c87845c2a391fec0cded27bdcbbca28febad382", + "zh:4ba455da3b37ba8f8b03ff2781121d9c54d0bd8afd76dfe67593011c475dd73f", + "zh:5d32b9ed871b3c3b774dc69f1fe14cdf7c1fd63d12bb5f21aad4bfbf75e5ee3d", + "zh:6c80cf90a3fc1e17d9caf67cc558c2ff91f8b25e29fdf00942f67711895be5c0", + "zh:c0a53e3165407999d10de7aaa983485d42797433c60b5775791ae299121279ed", + "zh:dab51d6d76041505aeebf20111febe8616ec465ca31dfb7901f5f5c23a5af095", + "zh:e1ad6399f6a6d799002206ee4cb7b794dbb2533b8c3c14502a4419955ec96bff", + "zh:e98f1d178d1e111b3f3449e27d305ce263071226fad3d86272e1bd161c26fd43", + "zh:eb76ec000c9c49a0bf730370c8880f671597bc01f7b7401ab301df7124c049ec", + ] +} + +provider "registry.terraform.io/hashicorp/random" { + version = "2.2.1" + constraints = "~> 2.2" + hashes = [ + "h1:Zg1Bpi6vr7b0H6no8kVDfEucn5pvNALivdrVKVHarGs=", + "zh:072ce92b0138ee65df2e4e2e6e5f6632fa12a7e6453b91399bad89291855d426", + "zh:5731987fe61051515f449033e456ee55207caf17ef41096eb82247810585f53b", + "zh:6f18b10175708bb5839e1f2082dcc02651b876786cd54ec415a091f3821807c3", + "zh:7fa7737661380d18cba3cdc71c4ec6f2fd281b9d61112f6b48d06ca8bbf97771", + "zh:8466cb8fbb4de887b23039082a6e3dc85aeabce86dd808e2a7a65e4e1c51dbae", + "zh:888c63417701c13bbe785ab11dc690d4803e6a2156318cf188970b7b6400b99e", + "zh:a231df55d36fbad1a6705f5d3be4f7459a73ec76117d13f22aa83c10fc610278", + "zh:b62d9a4cd64a2d229070260f4abfef476ebbd7c5511b43e9cdccf23ce938f630", + "zh:b6bd1a325f909bb93f7c9bef00eb306bef1e406cbdf557901d755a3e7a4a5448", + "zh:b9f59afc23cc5567075f76313214baa1e5ce909325229e23c9a4666f7b26e7f7", + "zh:d040220c09b8d9d6bd937572bd5b14bc069af2b883185a873460530d8a1de6e6", + "zh:f254c1f943eb016ae07ebe91b23f813dc79f2064616c65f98c8f64ce23be90c4", + ] +} diff --git a/lib/manager/terraform/lockfile/__snapshots__/hash.spec.ts.snap b/lib/manager/terraform/lockfile/__snapshots__/hash.spec.ts.snap new file mode 100644 index 00000000000000..f621c2ea7f7042 --- /dev/null +++ b/lib/manager/terraform/lockfile/__snapshots__/hash.spec.ts.snap @@ -0,0 +1,104 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`manager/terraform/lockfile/hash backend index throws error 1`] = ` +Array [ + Object { + "headers": Object { + "accept": "application/json", + "accept-encoding": "gzip, deflate, br", + "host": "releases.hashicorp.com", + "user-agent": "https://github.com/renovatebot/renovate", + }, + "method": "GET", + "url": "https://releases.hashicorp.com/terraform-provider-azurerm/2.56.0/index.json", + }, +] +`; + +exports[`manager/terraform/lockfile/hash fail to create hashes 1`] = ` +Array [ + Object { + "headers": Object { + "accept": "application/json", + "accept-encoding": "gzip, deflate, br", + "host": "releases.hashicorp.com", + "user-agent": "https://github.com/renovatebot/renovate", + }, + "method": "GET", + "url": "https://releases.hashicorp.com/terraform-provider-azurerm/2.56.0/index.json", + }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "releases.hashicorp.com", + "user-agent": "https://github.com/renovatebot/renovate", + }, + "method": "GET", + "url": "https://releases.hashicorp.com/terraform-provider-azurerm/2.56.0/terraform-provider-azurerm_2.56.0_darwin_amd64.zip", + }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "releases.hashicorp.com", + "user-agent": "https://github.com/renovatebot/renovate", + }, + "method": "GET", + "url": "https://releases.hashicorp.com/terraform-provider-azurerm/2.56.0/terraform-provider-azurerm_2.56.0_linux_amd64.zip", + }, +] +`; + +exports[`manager/terraform/lockfile/hash full walkthrough 1`] = ` +Array [ + "h1:I2F2atKZqKEOYk1tTLe15Llf9rVqxz48ZL1eZB9g8zM=", + "h1:I2F2atKZqKEOYk1tTLe15Llf9rVqxz48ZL1eZB9g8zM=", +] +`; + +exports[`manager/terraform/lockfile/hash full walkthrough 2`] = ` +Array [ + Object { + "headers": Object { + "accept": "application/json", + "accept-encoding": "gzip, deflate, br", + "host": "releases.hashicorp.com", + "user-agent": "https://github.com/renovatebot/renovate", + }, + "method": "GET", + "url": "https://releases.hashicorp.com/terraform-provider-azurerm/2.56.0/index.json", + }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "releases.hashicorp.com", + "user-agent": "https://github.com/renovatebot/renovate", + }, + "method": "GET", + "url": "https://releases.hashicorp.com/terraform-provider-azurerm/2.56.0/terraform-provider-azurerm_2.56.0_darwin_amd64.zip", + }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "releases.hashicorp.com", + "user-agent": "https://github.com/renovatebot/renovate", + }, + "method": "GET", + "url": "https://releases.hashicorp.com/terraform-provider-azurerm/2.56.0/terraform-provider-azurerm_2.56.0_linux_amd64.zip", + }, +] +`; + +exports[`manager/terraform/lockfile/hash return null if requesting a version which is not available 1`] = ` +Array [ + Object { + "headers": Object { + "accept": "application/json", + "accept-encoding": "gzip, deflate, br", + "host": "releases.hashicorp.com", + "user-agent": "https://github.com/renovatebot/renovate", + }, + "method": "GET", + "url": "https://releases.hashicorp.com/terraform-provider-azurerm/2.59.0/index.json", + }, +] +`; diff --git a/lib/manager/terraform/lockfile/__snapshots__/index.spec.ts.snap b/lib/manager/terraform/lockfile/__snapshots__/index.spec.ts.snap new file mode 100644 index 00000000000000..22c1e15be875c8 --- /dev/null +++ b/lib/manager/terraform/lockfile/__snapshots__/index.spec.ts.snap @@ -0,0 +1,276 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`manager/terraform/lockfile/index do full lock file maintenance 1`] = ` +Object { + "contents": "# This file is maintained automatically by \\"terraform init\\". +# Manual edits may be lost in future updates. + +provider \\"registry.terraform.io/hashicorp/aws\\" { + version = \\"3.0.0\\" + constraints = \\"3.0.0\\" + hashes = [ + \\"h1:ULKfwySvQ4pDhy027ryRhLxDhg640wsojYc+7NHMFBU=\\", + \\"zh:25294510ae9c250502f2e37ac32b01017439735f098f82a1728772427626a2fd\\", + \\"zh:3b723e7772d47bd8cc11bea6e5d3e0b5e1df8398c0e7aaf510e3a8a54e0f1874\\", + \\"zh:4b7b73b86f4a0705d5d2a7f1d3ad3279706bdb3957a48f4a389c36918fba838e\\", + \\"zh:9e26cdc3be97e3001c253c0ca28c5c8ff2d5476373ca1beb849f3f3957ce7f1a\\", + \\"zh:9e73cf1304bf57968d3048d70c0b766d41497430a2a9a7a718a196f3a385106a\\", + \\"zh:a30b5b66facfbb2b02814e4cd33ca9899f9ade5bbf478f78c41d2fe789f0582a\\", + \\"zh:b06fb5da094db41cb5e430c95c988b73f32695e9f90f25499e926842dbd21b21\\", + \\"zh:c5a4ff607e9e9edee3fcd6d6666241fb532adf88ea1fe24f2aa1eb36845b3ca3\\", + \\"zh:df568a69087831c1780fac4395630a2cfb3cdf67b7dffbfe16bd78c64770bb75\\", + \\"zh:fce1b69dd673aace19508640b0b9b7eb1ef7e746d76cb846b49e7d52e0f5fb7e\\", + ] +} + +provider \\"registry.terraform.io/hashicorp/azurerm\\" { + version = \\"2.56.0\\" + constraints = \\"~> 2.50\\" + hashes = [ + \\"h1:lDsKRxDRXPEzA4AxkK4t+lJd3IQIP2UoaplJGjQSp2s=\\", + \\"h1:6zB2hX7YIOW26OrKsLJn0uLMnjqbPNxcz9RhlWEuuSY=\\", + ] +} + +provider \\"registry.terraform.io/hashicorp/random\\" { + version = \\"2.2.2\\" + constraints = \\"~> 2.2\\" + hashes = [ + \\"h1:lDsKRxDRXPEzA4AxkK4t+lJd3IQIP2UoaplJGjQSp2s=\\", + \\"h1:6zB2hX7YIOW26OrKsLJn0uLMnjqbPNxcz9RhlWEuuSY=\\", + ] +} +", + "name": ".terraform.lock.hcl", +} +`; + +exports[`manager/terraform/lockfile/index do full lock file maintenance 2`] = ` +Array [ + Array [ + "hashicorp/azurerm", + "2.56.0", + "/tmp/renovate/cache", + ], + Array [ + "hashicorp/random", + "2.2.2", + "/tmp/renovate/cache", + ], +] +`; + +exports[`manager/terraform/lockfile/index do full lock file maintenance without necessary changes 1`] = `Array []`; + +exports[`manager/terraform/lockfile/index return null if hashing fails 1`] = ` +Array [ + Array [ + "hashicorp/azurerm", + "2.56.0", + "/tmp/renovate/cache", + ], + Array [ + "hashicorp/random", + "2.2.2", + "/tmp/renovate/cache", + ], +] +`; + +exports[`manager/terraform/lockfile/index update single dependency with exact constraint 1`] = ` +Object { + "contents": "# This file is maintained automatically by \\"terraform init\\". +# Manual edits may be lost in future updates. + +provider \\"registry.terraform.io/hashicorp/aws\\" { + version = \\"3.36.0\\" + constraints = \\"3.36.0\\" + hashes = [ + \\"h1:lDsKRxDRXPEzA4AxkK4t+lJd3IQIP2UoaplJGjQSp2s=\\", + \\"h1:6zB2hX7YIOW26OrKsLJn0uLMnjqbPNxcz9RhlWEuuSY=\\", + ] +} + +provider \\"registry.terraform.io/hashicorp/azurerm\\" { + version = \\"2.50.0\\" + constraints = \\"~> 2.50\\" + hashes = [ + \\"h1:Vr6WUm88s9hXGkyVjHtHsP2Jmc2ypQXn6ww7dXtvk1M=\\", + \\"zh:0c0688d5a743248f8646d39eb3645a4ac19fd7523ba1b47072fa3fb03b92b1b0\\", + \\"zh:2beb3a55ee970f87a9292ae96d57134be8a03d0566117e7be0fe0d9c1267e4ea\\", + \\"zh:38091b463fbafe5756420ce34c87845c2a391fec0cded27bdcbbca28febad382\\", + \\"zh:4ba455da3b37ba8f8b03ff2781121d9c54d0bd8afd76dfe67593011c475dd73f\\", + \\"zh:5d32b9ed871b3c3b774dc69f1fe14cdf7c1fd63d12bb5f21aad4bfbf75e5ee3d\\", + \\"zh:6c80cf90a3fc1e17d9caf67cc558c2ff91f8b25e29fdf00942f67711895be5c0\\", + \\"zh:c0a53e3165407999d10de7aaa983485d42797433c60b5775791ae299121279ed\\", + \\"zh:dab51d6d76041505aeebf20111febe8616ec465ca31dfb7901f5f5c23a5af095\\", + \\"zh:e1ad6399f6a6d799002206ee4cb7b794dbb2533b8c3c14502a4419955ec96bff\\", + \\"zh:e98f1d178d1e111b3f3449e27d305ce263071226fad3d86272e1bd161c26fd43\\", + \\"zh:eb76ec000c9c49a0bf730370c8880f671597bc01f7b7401ab301df7124c049ec\\", + ] +} + +provider \\"registry.terraform.io/hashicorp/random\\" { + version = \\"2.2.1\\" + constraints = \\"~> 2.2\\" + hashes = [ + \\"h1:Zg1Bpi6vr7b0H6no8kVDfEucn5pvNALivdrVKVHarGs=\\", + \\"zh:072ce92b0138ee65df2e4e2e6e5f6632fa12a7e6453b91399bad89291855d426\\", + \\"zh:5731987fe61051515f449033e456ee55207caf17ef41096eb82247810585f53b\\", + \\"zh:6f18b10175708bb5839e1f2082dcc02651b876786cd54ec415a091f3821807c3\\", + \\"zh:7fa7737661380d18cba3cdc71c4ec6f2fd281b9d61112f6b48d06ca8bbf97771\\", + \\"zh:8466cb8fbb4de887b23039082a6e3dc85aeabce86dd808e2a7a65e4e1c51dbae\\", + \\"zh:888c63417701c13bbe785ab11dc690d4803e6a2156318cf188970b7b6400b99e\\", + \\"zh:a231df55d36fbad1a6705f5d3be4f7459a73ec76117d13f22aa83c10fc610278\\", + \\"zh:b62d9a4cd64a2d229070260f4abfef476ebbd7c5511b43e9cdccf23ce938f630\\", + \\"zh:b6bd1a325f909bb93f7c9bef00eb306bef1e406cbdf557901d755a3e7a4a5448\\", + \\"zh:b9f59afc23cc5567075f76313214baa1e5ce909325229e23c9a4666f7b26e7f7\\", + \\"zh:d040220c09b8d9d6bd937572bd5b14bc069af2b883185a873460530d8a1de6e6\\", + \\"zh:f254c1f943eb016ae07ebe91b23f813dc79f2064616c65f98c8f64ce23be90c4\\", + ] +} +", + "name": ".terraform.lock.hcl", +} +`; + +exports[`manager/terraform/lockfile/index update single dependency with exact constraint 2`] = ` +Array [ + Array [ + "hashicorp/aws", + "3.36.0", + "/tmp/renovate/cache", + ], +] +`; + +exports[`manager/terraform/lockfile/index update single dependency with range constraint and major update 1`] = ` +Object { + "contents": "# This file is maintained automatically by \\"terraform init\\". +# Manual edits may be lost in future updates. + +provider \\"registry.terraform.io/hashicorp/aws\\" { + version = \\"3.0.0\\" + constraints = \\"3.0.0\\" + hashes = [ + \\"h1:ULKfwySvQ4pDhy027ryRhLxDhg640wsojYc+7NHMFBU=\\", + \\"zh:25294510ae9c250502f2e37ac32b01017439735f098f82a1728772427626a2fd\\", + \\"zh:3b723e7772d47bd8cc11bea6e5d3e0b5e1df8398c0e7aaf510e3a8a54e0f1874\\", + \\"zh:4b7b73b86f4a0705d5d2a7f1d3ad3279706bdb3957a48f4a389c36918fba838e\\", + \\"zh:9e26cdc3be97e3001c253c0ca28c5c8ff2d5476373ca1beb849f3f3957ce7f1a\\", + \\"zh:9e73cf1304bf57968d3048d70c0b766d41497430a2a9a7a718a196f3a385106a\\", + \\"zh:a30b5b66facfbb2b02814e4cd33ca9899f9ade5bbf478f78c41d2fe789f0582a\\", + \\"zh:b06fb5da094db41cb5e430c95c988b73f32695e9f90f25499e926842dbd21b21\\", + \\"zh:c5a4ff607e9e9edee3fcd6d6666241fb532adf88ea1fe24f2aa1eb36845b3ca3\\", + \\"zh:df568a69087831c1780fac4395630a2cfb3cdf67b7dffbfe16bd78c64770bb75\\", + \\"zh:fce1b69dd673aace19508640b0b9b7eb1ef7e746d76cb846b49e7d52e0f5fb7e\\", + ] +} + +provider \\"registry.terraform.io/hashicorp/azurerm\\" { + version = \\"2.50.0\\" + constraints = \\"~> 2.50\\" + hashes = [ + \\"h1:Vr6WUm88s9hXGkyVjHtHsP2Jmc2ypQXn6ww7dXtvk1M=\\", + \\"zh:0c0688d5a743248f8646d39eb3645a4ac19fd7523ba1b47072fa3fb03b92b1b0\\", + \\"zh:2beb3a55ee970f87a9292ae96d57134be8a03d0566117e7be0fe0d9c1267e4ea\\", + \\"zh:38091b463fbafe5756420ce34c87845c2a391fec0cded27bdcbbca28febad382\\", + \\"zh:4ba455da3b37ba8f8b03ff2781121d9c54d0bd8afd76dfe67593011c475dd73f\\", + \\"zh:5d32b9ed871b3c3b774dc69f1fe14cdf7c1fd63d12bb5f21aad4bfbf75e5ee3d\\", + \\"zh:6c80cf90a3fc1e17d9caf67cc558c2ff91f8b25e29fdf00942f67711895be5c0\\", + \\"zh:c0a53e3165407999d10de7aaa983485d42797433c60b5775791ae299121279ed\\", + \\"zh:dab51d6d76041505aeebf20111febe8616ec465ca31dfb7901f5f5c23a5af095\\", + \\"zh:e1ad6399f6a6d799002206ee4cb7b794dbb2533b8c3c14502a4419955ec96bff\\", + \\"zh:e98f1d178d1e111b3f3449e27d305ce263071226fad3d86272e1bd161c26fd43\\", + \\"zh:eb76ec000c9c49a0bf730370c8880f671597bc01f7b7401ab301df7124c049ec\\", + ] +} + +provider \\"registry.terraform.io/hashicorp/random\\" { + version = \\"3.1.0\\" + constraints = \\"~> 3.0\\" + hashes = [ + \\"h1:lDsKRxDRXPEzA4AxkK4t+lJd3IQIP2UoaplJGjQSp2s=\\", + \\"h1:6zB2hX7YIOW26OrKsLJn0uLMnjqbPNxcz9RhlWEuuSY=\\", + ] +} +", + "name": ".terraform.lock.hcl", +} +`; + +exports[`manager/terraform/lockfile/index update single dependency with range constraint and major update 2`] = ` +Array [ + Array [ + "hashicorp/random", + "3.1.0", + "/tmp/renovate/cache", + ], +] +`; + +exports[`manager/terraform/lockfile/index update single dependency with range constraint and minor update 1`] = ` +Object { + "contents": "# This file is maintained automatically by \\"terraform init\\". +# Manual edits may be lost in future updates. + +provider \\"registry.terraform.io/hashicorp/aws\\" { + version = \\"3.0.0\\" + constraints = \\"3.0.0\\" + hashes = [ + \\"h1:ULKfwySvQ4pDhy027ryRhLxDhg640wsojYc+7NHMFBU=\\", + \\"zh:25294510ae9c250502f2e37ac32b01017439735f098f82a1728772427626a2fd\\", + \\"zh:3b723e7772d47bd8cc11bea6e5d3e0b5e1df8398c0e7aaf510e3a8a54e0f1874\\", + \\"zh:4b7b73b86f4a0705d5d2a7f1d3ad3279706bdb3957a48f4a389c36918fba838e\\", + \\"zh:9e26cdc3be97e3001c253c0ca28c5c8ff2d5476373ca1beb849f3f3957ce7f1a\\", + \\"zh:9e73cf1304bf57968d3048d70c0b766d41497430a2a9a7a718a196f3a385106a\\", + \\"zh:a30b5b66facfbb2b02814e4cd33ca9899f9ade5bbf478f78c41d2fe789f0582a\\", + \\"zh:b06fb5da094db41cb5e430c95c988b73f32695e9f90f25499e926842dbd21b21\\", + \\"zh:c5a4ff607e9e9edee3fcd6d6666241fb532adf88ea1fe24f2aa1eb36845b3ca3\\", + \\"zh:df568a69087831c1780fac4395630a2cfb3cdf67b7dffbfe16bd78c64770bb75\\", + \\"zh:fce1b69dd673aace19508640b0b9b7eb1ef7e746d76cb846b49e7d52e0f5fb7e\\", + ] +} + +provider \\"registry.terraform.io/hashicorp/azurerm\\" { + version = \\"2.56.0\\" + constraints = \\"~> 2.50\\" + hashes = [ + \\"h1:lDsKRxDRXPEzA4AxkK4t+lJd3IQIP2UoaplJGjQSp2s=\\", + \\"h1:6zB2hX7YIOW26OrKsLJn0uLMnjqbPNxcz9RhlWEuuSY=\\", + ] +} + +provider \\"registry.terraform.io/hashicorp/random\\" { + version = \\"2.2.1\\" + constraints = \\"~> 2.2\\" + hashes = [ + \\"h1:Zg1Bpi6vr7b0H6no8kVDfEucn5pvNALivdrVKVHarGs=\\", + \\"zh:072ce92b0138ee65df2e4e2e6e5f6632fa12a7e6453b91399bad89291855d426\\", + \\"zh:5731987fe61051515f449033e456ee55207caf17ef41096eb82247810585f53b\\", + \\"zh:6f18b10175708bb5839e1f2082dcc02651b876786cd54ec415a091f3821807c3\\", + \\"zh:7fa7737661380d18cba3cdc71c4ec6f2fd281b9d61112f6b48d06ca8bbf97771\\", + \\"zh:8466cb8fbb4de887b23039082a6e3dc85aeabce86dd808e2a7a65e4e1c51dbae\\", + \\"zh:888c63417701c13bbe785ab11dc690d4803e6a2156318cf188970b7b6400b99e\\", + \\"zh:a231df55d36fbad1a6705f5d3be4f7459a73ec76117d13f22aa83c10fc610278\\", + \\"zh:b62d9a4cd64a2d229070260f4abfef476ebbd7c5511b43e9cdccf23ce938f630\\", + \\"zh:b6bd1a325f909bb93f7c9bef00eb306bef1e406cbdf557901d755a3e7a4a5448\\", + \\"zh:b9f59afc23cc5567075f76313214baa1e5ce909325229e23c9a4666f7b26e7f7\\", + \\"zh:d040220c09b8d9d6bd937572bd5b14bc069af2b883185a873460530d8a1de6e6\\", + \\"zh:f254c1f943eb016ae07ebe91b23f813dc79f2064616c65f98c8f64ce23be90c4\\", + ] +} +", + "name": ".terraform.lock.hcl", +} +`; + +exports[`manager/terraform/lockfile/index update single dependency with range constraint and minor update 2`] = ` +Array [ + Array [ + "hashicorp/azurerm", + "2.56.0", + "/tmp/renovate/cache", + ], +] +`; diff --git a/lib/manager/terraform/lockfile/__snapshots__/util.spec.ts.snap b/lib/manager/terraform/lockfile/__snapshots__/util.spec.ts.snap new file mode 100644 index 00000000000000..c17268a2dcfc05 --- /dev/null +++ b/lib/manager/terraform/lockfile/__snapshots__/util.spec.ts.snap @@ -0,0 +1,102 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`manager/terraform/lockfile/util extractLocks() extracts 1`] = ` +Array [ + Object { + "constraints": "3.0.0", + "hashes": Array [ + "h1:ULKfwySvQ4pDhy027ryRhLxDhg640wsojYc+7NHMFBU=", + "zh:25294510ae9c250502f2e37ac32b01017439735f098f82a1728772427626a2fd", + "zh:3b723e7772d47bd8cc11bea6e5d3e0b5e1df8398c0e7aaf510e3a8a54e0f1874", + "zh:4b7b73b86f4a0705d5d2a7f1d3ad3279706bdb3957a48f4a389c36918fba838e", + "zh:9e26cdc3be97e3001c253c0ca28c5c8ff2d5476373ca1beb849f3f3957ce7f1a", + "zh:9e73cf1304bf57968d3048d70c0b766d41497430a2a9a7a718a196f3a385106a", + "zh:a30b5b66facfbb2b02814e4cd33ca9899f9ade5bbf478f78c41d2fe789f0582a", + "zh:b06fb5da094db41cb5e430c95c988b73f32695e9f90f25499e926842dbd21b21", + "zh:c5a4ff607e9e9edee3fcd6d6666241fb532adf88ea1fe24f2aa1eb36845b3ca3", + "zh:df568a69087831c1780fac4395630a2cfb3cdf67b7dffbfe16bd78c64770bb75", + "zh:fce1b69dd673aace19508640b0b9b7eb1ef7e746d76cb846b49e7d52e0f5fb7e", + ], + "lineNumbers": Object { + "block": Object { + "end": 21, + "start": 3, + }, + "constraint": 2, + "hashes": Object { + "end": 14, + "start": 4, + }, + "version": 1, + }, + "lookupName": "hashicorp/aws", + "registryUrl": "registry.terraform.io", + "version": "3.0.0", + }, + Object { + "constraints": "~> 2.50", + "hashes": Array [ + "h1:Vr6WUm88s9hXGkyVjHtHsP2Jmc2ypQXn6ww7dXtvk1M=", + "zh:0c0688d5a743248f8646d39eb3645a4ac19fd7523ba1b47072fa3fb03b92b1b0", + "zh:2beb3a55ee970f87a9292ae96d57134be8a03d0566117e7be0fe0d9c1267e4ea", + "zh:38091b463fbafe5756420ce34c87845c2a391fec0cded27bdcbbca28febad382", + "zh:4ba455da3b37ba8f8b03ff2781121d9c54d0bd8afd76dfe67593011c475dd73f", + "zh:5d32b9ed871b3c3b774dc69f1fe14cdf7c1fd63d12bb5f21aad4bfbf75e5ee3d", + "zh:6c80cf90a3fc1e17d9caf67cc558c2ff91f8b25e29fdf00942f67711895be5c0", + "zh:c0a53e3165407999d10de7aaa983485d42797433c60b5775791ae299121279ed", + "zh:dab51d6d76041505aeebf20111febe8616ec465ca31dfb7901f5f5c23a5af095", + "zh:e1ad6399f6a6d799002206ee4cb7b794dbb2533b8c3c14502a4419955ec96bff", + "zh:e98f1d178d1e111b3f3449e27d305ce263071226fad3d86272e1bd161c26fd43", + "zh:eb76ec000c9c49a0bf730370c8880f671597bc01f7b7401ab301df7124c049ec", + ], + "lineNumbers": Object { + "block": Object { + "end": 40, + "start": 21, + }, + "constraint": 2, + "hashes": Object { + "end": 15, + "start": 4, + }, + "version": 1, + }, + "lookupName": "hashicorp/azurerm", + "registryUrl": "registry.terraform.io", + "version": "2.50.0", + }, + Object { + "constraints": "~> 2.2", + "hashes": Array [ + "h1:Zg1Bpi6vr7b0H6no8kVDfEucn5pvNALivdrVKVHarGs=", + "zh:072ce92b0138ee65df2e4e2e6e5f6632fa12a7e6453b91399bad89291855d426", + "zh:5731987fe61051515f449033e456ee55207caf17ef41096eb82247810585f53b", + "zh:6f18b10175708bb5839e1f2082dcc02651b876786cd54ec415a091f3821807c3", + "zh:7fa7737661380d18cba3cdc71c4ec6f2fd281b9d61112f6b48d06ca8bbf97771", + "zh:8466cb8fbb4de887b23039082a6e3dc85aeabce86dd808e2a7a65e4e1c51dbae", + "zh:888c63417701c13bbe785ab11dc690d4803e6a2156318cf188970b7b6400b99e", + "zh:a231df55d36fbad1a6705f5d3be4f7459a73ec76117d13f22aa83c10fc610278", + "zh:b62d9a4cd64a2d229070260f4abfef476ebbd7c5511b43e9cdccf23ce938f630", + "zh:b6bd1a325f909bb93f7c9bef00eb306bef1e406cbdf557901d755a3e7a4a5448", + "zh:b9f59afc23cc5567075f76313214baa1e5ce909325229e23c9a4666f7b26e7f7", + "zh:d040220c09b8d9d6bd937572bd5b14bc069af2b883185a873460530d8a1de6e6", + "zh:f254c1f943eb016ae07ebe91b23f813dc79f2064616c65f98c8f64ce23be90c4", + ], + "lineNumbers": Object { + "block": Object { + "end": 59, + "start": 40, + }, + "constraint": 2, + "hashes": Object { + "end": 16, + "start": 4, + }, + "version": 1, + }, + "lookupName": "hashicorp/random", + "registryUrl": "registry.terraform.io", + "version": "2.2.1", + }, +] +`; diff --git a/lib/manager/terraform/lockfile/hash.spec.ts b/lib/manager/terraform/lockfile/hash.spec.ts new file mode 100644 index 00000000000000..875ee609f8db89 --- /dev/null +++ b/lib/manager/terraform/lockfile/hash.spec.ts @@ -0,0 +1,98 @@ +import { createReadStream } from 'fs'; +import * as httpMock from '../../../../test/http-mock'; +import { getFixturePath, getName, loadFixture } from '../../../../test/util'; +import { TerraformProviderDatasource } from '../../../datasource/terraform-provider'; +import createHashes from './hash'; + +const terraformProviderDatasource = new TerraformProviderDatasource(); +const releaseBackendUrl = terraformProviderDatasource.defaultRegistryUrls[1]; +const releaseBackendAzurerm = loadFixture('releaseBackendAzurerm_2_56_0.json'); + +describe(getName(), () => { + it('returns null if a non hashicorp release is found ', async () => { + const result = await createHashes( + 'test/gitlab', + '2.56.0', + '/tmp/renovate/cache' + ); + expect(result).toBeNull(); + }); + + it('return null if requesting a version which is not available', async () => { + httpMock + .scope(releaseBackendUrl) + .get('/terraform-provider-azurerm/2.59.0/index.json') + .reply(403, ''); + + const result = await createHashes( + 'hashicorp/azurerm', + '2.59.0', + '/tmp/renovate/cache' + ); + expect(result).toBeNull(); + expect(httpMock.getTrace()).toMatchSnapshot(); + }); + + it('backend index throws error', async () => { + httpMock + .scope(releaseBackendUrl) + .get('/terraform-provider-azurerm/2.56.0/index.json') + .replyWithError(''); + + const result = await createHashes('hashicorp/azurerm', '2.56.0', '/tmp'); + expect(result).toBeNull(); + expect(httpMock.getTrace()).toMatchSnapshot(); + }); + + it('fail to create hashes', async () => { + const readStreamLinux = createReadStream( + getFixturePath('releaseBackendAzurerm_2_56_0.json') + ); + const readStreamDarwin = createReadStream( + getFixturePath('releaseBackendAzurerm_2_56_0.json') + ); + httpMock + .scope(releaseBackendUrl) + .get('/terraform-provider-azurerm/2.56.0/index.json') + .reply(200, releaseBackendAzurerm) + .get( + '/terraform-provider-azurerm/2.56.0/terraform-provider-azurerm_2.56.0_linux_amd64.zip' + ) + .reply(200, readStreamLinux) + .get( + '/terraform-provider-azurerm/2.56.0/terraform-provider-azurerm_2.56.0_darwin_amd64.zip' + ) + .reply(200, readStreamDarwin); + + const result = await createHashes('hashicorp/azurerm', '2.56.0', '/tmp'); + expect(result).toBeNull(); + expect(httpMock.getTrace()).toMatchSnapshot(); + }); + + it('full walkthrough', async () => { + const readStreamLinux = createReadStream( + 'lib/manager/terraform/lockfile/__fixtures__/test.zip' + ); + const readStreamDarwin = createReadStream( + 'lib/manager/terraform/lockfile/__fixtures__/test.zip' + ); + httpMock + .scope(releaseBackendUrl) + .get('/terraform-provider-azurerm/2.56.0/index.json') + .reply(200, releaseBackendAzurerm) + .get( + '/terraform-provider-azurerm/2.56.0/terraform-provider-azurerm_2.56.0_linux_amd64.zip' + ) + .reply(200, readStreamLinux) + .get( + '/terraform-provider-azurerm/2.56.0/terraform-provider-azurerm_2.56.0_darwin_amd64.zip' + ) + .reply(200, readStreamDarwin); + + const result = await createHashes('hashicorp/azurerm', '2.56.0', '/tmp'); + expect(result).not.toBeNull(); + expect(result).toBeArrayOfSize(2); + expect(result).toMatchSnapshot(); + expect(httpMock.getTrace()).toMatchSnapshot(); + }); +}); diff --git a/lib/manager/terraform/lockfile/hash.ts b/lib/manager/terraform/lockfile/hash.ts new file mode 100644 index 00000000000000..4d101a47176e68 --- /dev/null +++ b/lib/manager/terraform/lockfile/hash.ts @@ -0,0 +1,169 @@ +import crypto from 'crypto'; +import extract from 'extract-zip'; +import pMap from 'p-map'; +import { TerraformProviderDatasource } from '../../../datasource/terraform-provider'; +import type { + TerraformBuild, + VersionDetailResponse, +} from '../../../datasource/terraform-provider/types'; +import { logger } from '../../../logger'; +import * as packageCache from '../../../util/cache/package'; +import * as fs from '../../../util/fs'; +import { Http } from '../../../util/http'; +import { repositoryRegex } from './util'; + +const http = new Http(TerraformProviderDatasource.id); +const hashCacheTTL = 10080; // in seconds == 1 week +const terraformProviderDatasource = new TerraformProviderDatasource(); + +export async function hashFiles(files: string[]): Promise { + const rootHash = crypto.createHash('sha256'); + + for (const file of files) { + // build for every file a line looking like "aaaaaaaaaaaaaaa file.txt\n" + const hash = crypto.createHash('sha256'); + + // a sha256sum displayed as lowercase hex string to root hash + const fileBuffer = await fs.readFile(file); + hash.update(fileBuffer); + hash.end(); + const data = hash.read(); + rootHash.update(data.toString('hex')); + + // add double space, the filename and a new line char + rootHash.update(' '); + const fileName = file.replace(/^.*[\\/]/, ''); + rootHash.update(fileName); + rootHash.update('\n'); + } + + rootHash.end(); + const rootData = rootHash.read(); + const result: string = rootData.toString('base64'); + return result; +} + +export async function hashOfZipContent( + zipFilePath: string, + extractPath: string +): Promise { + await extract(zipFilePath, { dir: extractPath }); + const files = await fs.readdir(extractPath); + // the h1 hashing algorithms requires that the files are sorted by filename + const sortedFiles = files.sort((a, b) => a.localeCompare(b)); + const filesWithPath = sortedFiles.map((file) => `${extractPath}/${file}`); + + const result = hashFiles(filesWithPath); + + // delete extracted files + await fs.rm(extractPath, { recursive: true }); + + return result; +} + +async function getReleaseBackendIndex( + backendLookUpName: string, + version: string +): Promise { + return ( + await http.getJson( + `${terraformProviderDatasource.defaultRegistryUrls[1]}/${backendLookUpName}/${version}/index.json` + ) + ).body; +} + +export async function calculateHashes( + builds: TerraformBuild[], + cacheDir: string +): Promise { + // for each build download ZIP, extract content and generate hash for all containing files + const hashes = await pMap( + builds, + async (build) => { + const downloadFileName = `${cacheDir}/${build.filename}`; + const extractPath = `${cacheDir}/extract/${build.filename}`; + logger.trace( + `Downloading archive and generating hash for ${build.name}-${build.version}...` + ); + const readStream = http.stream(build.url); + const writeStream = fs.createWriteStream(downloadFileName); + + let hash = null; + try { + await fs.pipeline(readStream, writeStream); + + hash = await hashOfZipContent(downloadFileName, extractPath); + logger.trace( + { hash }, + `Generated hash for ${build.name}-${build.version}` + ); + } catch (err) { + /* istanbul ignore next */ + logger.error({ err }, 'write stream error'); + } finally { + // delete zip file + await fs.unlink(downloadFileName); + } + return hash; + }, + { concurrency: 4 } // allow to look up 4 builds for this version in parallel + ); + return hashes; +} + +export default async function createHashes( + repository: string, + version: string, + cacheDir: string +): Promise { + // check cache for hashes + const repositoryRegexResult = repositoryRegex.exec(repository); + if (!repositoryRegexResult) { + // non hashicorp builds are not supported at the moment + return null; + } + const lookupName = repositoryRegexResult.groups.lookupName; + const backendLookUpName = `terraform-provider-${lookupName}`; + + const cacheKey = `${terraformProviderDatasource.defaultRegistryUrls[1]}/${repository}/${lookupName}-${version}`; + const cachedRelease = await packageCache.get( + 'terraform-provider-release', + cacheKey + ); + // istanbul ignore if + if (cachedRelease) { + return cachedRelease; + } + let versionReleaseBackend; + try { + versionReleaseBackend = await getReleaseBackendIndex( + backendLookUpName, + version + ); + } catch (err) { + logger.debug( + { err, backendLookUpName, version }, + `Failed to retrieve builds for ${backendLookUpName} ${version}` + ); + return null; + } + + const builds = versionReleaseBackend.builds; + const hashes = await calculateHashes(builds, cacheDir); + + // if a hash could not be produced skip caching and return null + if (hashes.some((value) => value == null)) { + return null; + } + + // sorting the hash alphabetically as terraform does this as well + const sortedHashes = hashes.sort().map((hash) => `h1:${hash}`); + // save to cache + await packageCache.set( + 'terraform-provider-release', + cacheKey, + sortedHashes, + hashCacheTTL + ); + return sortedHashes; +} diff --git a/lib/manager/terraform/lockfile/index.spec.ts b/lib/manager/terraform/lockfile/index.spec.ts new file mode 100644 index 00000000000000..b2dbc4f8be3d92 --- /dev/null +++ b/lib/manager/terraform/lockfile/index.spec.ts @@ -0,0 +1,374 @@ +import { join } from 'upath'; +import { fs, getName, loadFixture } from '../../../../test/util'; +import { setAdminConfig } from '../../../config/admin'; +import { getPkgReleases } from '../../../datasource'; +import type { UpdateArtifactsConfig } from '../../types'; +import hash from './hash'; +import { updateArtifacts } from './index'; + +// auto-mock fs +jest.mock('../../../util/fs'); +jest.mock('./hash'); +jest.mock('../../../datasource'); + +const config = { + constraints: {}, +}; + +const adminConfig = { + // `join` fixes Windows CI + localDir: join('/tmp/github/some/repo'), + cacheDir: join('/tmp/renovate/cache'), +}; + +const validLockfile = loadFixture('validLockfile.hcl'); + +const mockHash = hash as jest.MockedFunction; +const mockGetPkgReleases = getPkgReleases as jest.MockedFunction< + typeof getPkgReleases +>; + +describe(getName(), () => { + beforeEach(() => { + jest.resetAllMocks(); + jest.resetModules(); + setAdminConfig(adminConfig); + }); + + afterEach(() => { + delete process.env.RENOVATE_X_TERRAFORM_LOCK_FILE; + }); + + it('returns null if no .terraform.lock.hcl found', async () => { + fs.readLocalFile.mockResolvedValueOnce(null); + + process.env.RENOVATE_X_TERRAFORM_LOCK_FILE = 'test'; + + expect( + await updateArtifacts({ + packageFileName: 'main.tf', + updatedDeps: ['aws'], + newPackageFileContent: '', + config, + }) + ).toBeNull(); + }); + + it('returns null if .terraform.lock.hcl is empty', async () => { + fs.readLocalFile.mockResolvedValueOnce('empty' as any); + + process.env.RENOVATE_X_TERRAFORM_LOCK_FILE = 'test'; + + expect( + await updateArtifacts({ + packageFileName: 'main.tf', + updatedDeps: ['aws'], + newPackageFileContent: '', + config, + }) + ).toBeNull(); + }); + + it('update single dependency with exact constraint', async () => { + fs.readLocalFile.mockResolvedValueOnce(validLockfile as any); + + mockHash.mockResolvedValueOnce([ + 'h1:lDsKRxDRXPEzA4AxkK4t+lJd3IQIP2UoaplJGjQSp2s=', + 'h1:6zB2hX7YIOW26OrKsLJn0uLMnjqbPNxcz9RhlWEuuSY=', + ]); + + const localConfig: UpdateArtifactsConfig = { + updateType: 'minor', + newVersion: '3.36.0', + newValue: '3.36.0', + ...config, + }; + + process.env.RENOVATE_X_TERRAFORM_LOCK_FILE = 'test'; + + const result = await updateArtifacts({ + packageFileName: 'main.tf', + updatedDeps: ['hashicorp/aws'], + newPackageFileContent: '', + config: localConfig, + }); + expect(result).not.toBeNull(); + expect(result).toBeArrayOfSize(1); + expect(result[0].file).not.toBeNull(); + expect(result[0].file).toMatchSnapshot(); + + expect(mockHash.mock.calls).toBeArrayOfSize(1); + expect(mockHash.mock.calls).toMatchSnapshot(); + }); + + it('update single dependency with range constraint and minor update', async () => { + fs.readLocalFile.mockResolvedValueOnce(validLockfile as any); + + mockHash.mockResolvedValueOnce([ + 'h1:lDsKRxDRXPEzA4AxkK4t+lJd3IQIP2UoaplJGjQSp2s=', + 'h1:6zB2hX7YIOW26OrKsLJn0uLMnjqbPNxcz9RhlWEuuSY=', + ]); + + const localConfig: UpdateArtifactsConfig = { + updateType: 'minor', + newVersion: '2.56.0', + newValue: '~> 2.50', + ...config, + }; + + process.env.RENOVATE_X_TERRAFORM_LOCK_FILE = 'test'; + + const result = await updateArtifacts({ + packageFileName: 'main.tf', + updatedDeps: ['azurerm'], + newPackageFileContent: '', + config: localConfig, + }); + expect(result).not.toBeNull(); + expect(result).toBeArrayOfSize(1); + expect(result[0].file).not.toBeNull(); + expect(result[0].file).toMatchSnapshot(); + + expect(mockHash.mock.calls).toBeArrayOfSize(1); + expect(mockHash.mock.calls).toMatchSnapshot(); + }); + + it('update single dependency with range constraint and major update', async () => { + fs.readLocalFile.mockResolvedValueOnce(validLockfile as any); + + mockHash.mockResolvedValueOnce([ + 'h1:lDsKRxDRXPEzA4AxkK4t+lJd3IQIP2UoaplJGjQSp2s=', + 'h1:6zB2hX7YIOW26OrKsLJn0uLMnjqbPNxcz9RhlWEuuSY=', + ]); + + const localConfig: UpdateArtifactsConfig = { + updateType: 'major', + newVersion: '3.1.0', + newValue: '~> 3.0', + ...config, + }; + + process.env.RENOVATE_X_TERRAFORM_LOCK_FILE = 'test'; + + const result = await updateArtifacts({ + packageFileName: 'main.tf', + updatedDeps: ['random'], + newPackageFileContent: '', + config: localConfig, + }); + expect(result).not.toBeNull(); + expect(result).toBeArrayOfSize(1); + expect(result[0].file).not.toBeNull(); + expect(result[0].file).toMatchSnapshot(); + + expect(mockHash.mock.calls).toBeArrayOfSize(1); + expect(mockHash.mock.calls).toMatchSnapshot(); + }); + + it('do full lock file maintenance', async () => { + fs.readLocalFile.mockResolvedValueOnce(validLockfile as any); + + mockGetPkgReleases + .mockResolvedValueOnce({ + // aws + releases: [ + { + version: '2.30.0', + }, + { + version: '3.0.0', + }, + { + version: '3.36.0', + }, + ], + }) + .mockResolvedValueOnce({ + // azurerm + releases: [ + { + version: '2.50.0', + }, + { + version: '2.55.0', + }, + { + version: '2.56.0', + }, + ], + }) + .mockResolvedValueOnce({ + // random + releases: [ + { + version: '2.2.1', + }, + { + version: '2.2.2', + }, + { + version: '3.0.0', + }, + ], + }); + mockHash.mockResolvedValue([ + 'h1:lDsKRxDRXPEzA4AxkK4t+lJd3IQIP2UoaplJGjQSp2s=', + 'h1:6zB2hX7YIOW26OrKsLJn0uLMnjqbPNxcz9RhlWEuuSY=', + ]); + + const localConfig: UpdateArtifactsConfig = { + updateType: 'lockFileMaintenance', + ...config, + }; + + process.env.RENOVATE_X_TERRAFORM_LOCK_FILE = 'test'; + + const result = await updateArtifacts({ + packageFileName: '', + updatedDeps: [], + newPackageFileContent: '', + config: localConfig, + }); + expect(result).not.toBeNull(); + expect(result).toBeArrayOfSize(1); + + result.forEach((value) => expect(value.file).not.toBeNull()); + result.forEach((value) => expect(value.file).toMatchSnapshot()); + + expect(mockHash.mock.calls).toBeArrayOfSize(2); + expect(mockHash.mock.calls).toMatchSnapshot(); + }); + + it('do full lock file maintenance without necessary changes', async () => { + fs.readLocalFile.mockResolvedValueOnce(validLockfile as any); + + mockGetPkgReleases + .mockResolvedValueOnce({ + // aws + releases: [ + { + version: '2.30.0', + }, + { + version: '3.0.0', + }, + ], + }) + .mockResolvedValueOnce({ + // azurerm + releases: [ + { + version: '2.50.0', + }, + ], + }) + .mockResolvedValueOnce({ + // random + releases: [ + { + version: '2.2.1', + }, + ], + }); + mockHash.mockResolvedValue([ + 'h1:lDsKRxDRXPEzA4AxkK4t+lJd3IQIP2UoaplJGjQSp2s=', + 'h1:6zB2hX7YIOW26OrKsLJn0uLMnjqbPNxcz9RhlWEuuSY=', + ]); + + const localConfig: UpdateArtifactsConfig = { + updateType: 'lockFileMaintenance', + ...config, + }; + const result = await updateArtifacts({ + packageFileName: '', + updatedDeps: [], + newPackageFileContent: '', + config: localConfig, + }); + expect(result).toBeNull(); + + expect(mockHash.mock.calls).toBeArrayOfSize(0); + expect(mockHash.mock.calls).toMatchSnapshot(); + }); + + it('return null if hashing fails', async () => { + fs.readLocalFile.mockResolvedValueOnce(validLockfile as any); + + mockGetPkgReleases + .mockResolvedValueOnce({ + // aws + releases: [ + { + version: '2.30.0', + }, + { + version: '3.0.0', + }, + { + version: '3.36.0', + }, + ], + }) + .mockResolvedValueOnce({ + // azurerm + releases: [ + { + version: '2.50.0', + }, + { + version: '2.55.0', + }, + { + version: '2.56.0', + }, + ], + }) + .mockResolvedValueOnce({ + // random + releases: [ + { + version: '2.2.1', + }, + { + version: '2.2.2', + }, + { + version: '3.0.0', + }, + ], + }); + mockHash.mockResolvedValue(null); + + const localConfig: UpdateArtifactsConfig = { + updateType: 'lockFileMaintenance', + ...config, + }; + + process.env.RENOVATE_X_TERRAFORM_LOCK_FILE = 'test'; + + const result = await updateArtifacts({ + packageFileName: '', + updatedDeps: [], + newPackageFileContent: '', + config: localConfig, + }); + expect(result).toBeNull(); + + expect(mockHash.mock.calls).toBeArrayOfSize(2); + expect(mockHash.mock.calls).toMatchSnapshot(); + }); + + it('return null if experimental flag is not set', async () => { + const localConfig: UpdateArtifactsConfig = { + updateType: 'lockFileMaintenance', + ...config, + }; + const result = await updateArtifacts({ + packageFileName: '', + updatedDeps: [], + newPackageFileContent: '', + config: localConfig, + }); + expect(result).toBeNull(); + }); +}); diff --git a/lib/manager/terraform/lockfile/index.ts b/lib/manager/terraform/lockfile/index.ts new file mode 100644 index 00000000000000..deb30c23fcee6b --- /dev/null +++ b/lib/manager/terraform/lockfile/index.ts @@ -0,0 +1,122 @@ +import pMap from 'p-map'; +import { getAdminConfig } from '../../../config/admin'; +import { GetPkgReleasesConfig, getPkgReleases } from '../../../datasource'; +import { logger } from '../../../logger'; +import { get as getVersioning } from '../../../versioning'; +import type { + UpdateArtifact, + UpdateArtifactsConfig, + UpdateArtifactsResult, +} from '../../types'; +import hash from './hash'; +import type { ProviderLock, ProviderLockUpdate } from './types'; +import { + extractLocks, + isPinnedVersion, + readLockFile, + writeLockUpdates, +} from './util'; + +async function updateAllLocks( + locks: ProviderLock[], + config: UpdateArtifactsConfig +): Promise { + const { cacheDir } = getAdminConfig(); + + const updates = await pMap( + locks, + async (lock) => { + const updateConfig: GetPkgReleasesConfig = { + versioning: 'hashicorp', + datasource: 'terraform-provider', + depName: lock.lookupName, + }; + const { releases } = await getPkgReleases(updateConfig); + const versioning = getVersioning(updateConfig.versioning); + const versionsList = releases.map((release) => release.version); + const newVersion = versioning.getSatisfyingVersion( + versionsList, + lock.constraints + ); + + // if the new version is the same as the last, signal that no update is needed + if (newVersion === lock.version) { + return null; + } + const update: ProviderLockUpdate = { + newVersion, + newConstraint: lock.constraints, + newHashes: await hash(lock.lookupName, newVersion, cacheDir), + ...lock, + }; + return update; + }, + { concurrency: 4 } // allow to look up 4 lock in parallel + ); + + return updates.filter(Boolean); +} + +export async function updateArtifacts({ + packageFileName, + updatedDeps, + config, +}: UpdateArtifact): Promise { + logger.debug(`terraform.updateArtifacts(${packageFileName})`); + + // TODO remove experimental flag, if functionality is confirmed + if (!process.env.RENOVATE_X_TERRAFORM_LOCK_FILE) { + logger.debug( + `terraform.updateArtifacts: skipping updates. Experimental feature not activated` + ); + return null; + } + + const { cacheDir } = getAdminConfig(); + + const lockFileContent = await readLockFile(packageFileName); + if (!lockFileContent) { + logger.debug('No .terraform.lock.hcl found'); + return null; + } + const locks = extractLocks(lockFileContent); + if (!locks) { + logger.debug('No Locks in .terraform.lock.hcl found'); + return null; + } + + const updates: ProviderLockUpdate[] = []; + if (config.updateType === 'lockFileMaintenance') { + // update all locks in the file during maintenance --> only update version in constraints + const maintenanceUpdates = await updateAllLocks(locks, config); + updates.push(...maintenanceUpdates); + } else { + // update only specific locks but with constrain updates + const lookupName = updatedDeps[0]; + const repository = lookupName.includes('/') + ? lookupName + : `hashicorp/${lookupName}`; + const newConstraint = isPinnedVersion(config.newValue) + ? config.newVersion + : config.newValue; + const updateLock = locks.find((value) => value.lookupName === repository); + const update: ProviderLockUpdate = { + newVersion: config.newVersion, + newConstraint, + newHashes: await hash(repository, config.newVersion, cacheDir), + ...updateLock, + }; + updates.push(update); + } + + // if no updates have been found or there are failed hashes abort + if ( + updates.length === 0 || + updates.some((value) => value.newHashes == null) + ) { + return null; + } + + const res = writeLockUpdates(updates, lockFileContent); + return res ? [res] : null; +} diff --git a/lib/manager/terraform/lockfile/types.ts b/lib/manager/terraform/lockfile/types.ts new file mode 100644 index 00000000000000..b5cb56299c7183 --- /dev/null +++ b/lib/manager/terraform/lockfile/types.ts @@ -0,0 +1,35 @@ +export interface ProviderLock { + lookupName: string; + registryUrl: string; + version: string; + constraints: string; + hashes: string[]; + lineNumbers: LineNumbers; +} + +export interface ProviderLockUpdate extends ProviderLock { + newVersion: string; + newConstraint: string; + newHashes: string[]; +} + +export interface ProviderSlice { + lines: string[]; + block: { + start: number; + end: number; + }; +} + +export interface LineNumbers { + version?: number; + constraint?: number; + block?: { + start: number; + end: number; + }; + hashes: { + start?: number; + end?: number; + }; +} diff --git a/lib/manager/terraform/lockfile/util.spec.ts b/lib/manager/terraform/lockfile/util.spec.ts new file mode 100644 index 00000000000000..77e60d7f19d8bb --- /dev/null +++ b/lib/manager/terraform/lockfile/util.spec.ts @@ -0,0 +1,19 @@ +import { getName, loadFixture } from '../../../../test/util'; +import { extractLocks } from './util'; + +const validLockfile = loadFixture('validLockfile.hcl'); + +describe(getName(), () => { + describe('extractLocks()', () => { + it('returns null for empty', () => { + const result = extractLocks('nothing here'); + expect(result).toBeNull(); + }); + + it('extracts', () => { + const res = extractLocks(validLockfile); + expect(res).toHaveLength(3); + expect(res).toMatchSnapshot(); + }); + }); +}); diff --git a/lib/manager/terraform/lockfile/util.ts b/lib/manager/terraform/lockfile/util.ts new file mode 100644 index 00000000000000..4cb5443998e9d7 --- /dev/null +++ b/lib/manager/terraform/lockfile/util.ts @@ -0,0 +1,209 @@ +import { getSiblingFileName, readLocalFile } from '../../../util/fs'; +import { get as getVersioning } from '../../../versioning'; +import type { UpdateArtifactsResult } from '../../types'; +import type { + LineNumbers, + ProviderLock, + ProviderLockUpdate, + ProviderSlice, +} from './types'; + +export const repositoryRegex = /^hashicorp\/(?\S+)$/; + +const providerStartLineRegex = + /^provider "(?[^/]*)\/(?[^/]*)\/(?[^/]*)"/; +const versionLineRegex = + /^(?[\s]*version[\s]*=[\s]*")(?[^"']+)(?".*)$/; +const constraintLineRegex = + /^(?[\s]*constraints[\s]*=[\s]*")(?[^"']+)(?".*)$/; +const hashLineRegex = /^(?\s*")(?[^"]+)(?",.*)$/; + +const lockFile = '.terraform.lock.hcl'; + +export function readLockFile(packageFilePath: string): Promise { + const lockFilePath = getSiblingFileName(packageFilePath, lockFile); + return readLocalFile(lockFilePath, 'utf8'); +} + +export function extractLocks(lockFileContent: string): ProviderLock[] { + const lines = lockFileContent.split('\n'); + const blockStarts: number[] = []; + // get first lines of blocks + lines.forEach((line, index) => { + if (line.startsWith('provider "')) { + blockStarts.push(index); + } + }); + + // sort ascending + const sortedStarts = blockStarts.sort((a, b) => a - b); + const contentSlices = sortedStarts.map((start, index, array) => { + let end: number; + if (index < array.length - 1) { + end = array[index + 1]; + } else { + end = lines.length - 1; + } + const slice: ProviderSlice = { + lines: lines.slice(start, end), + block: { + start, + end, + }, + }; + return slice; + }); + + // generate Lock objects from slices + const locks = contentSlices.map((slice) => { + let lookupName = ''; + let registryUrl = ''; + let version = ''; + let constraints = ''; + const relativeLineNumbers: LineNumbers = { + block: slice.block, + hashes: { + start: -1, + end: -1, + }, + }; + const hashes = []; + + slice.lines.forEach((line, index) => { + const hashLineResult = hashLineRegex.exec(line); + if (hashLineResult) { + hashes.push(hashLineResult.groups.hash); + relativeLineNumbers.hashes.start = + relativeLineNumbers.hashes.start === -1 + ? index + : relativeLineNumbers.hashes.start; + relativeLineNumbers.hashes.end = index; + return; + } + + const providerStartLineResult = providerStartLineRegex.exec(line); + if (providerStartLineResult) { + lookupName = `${providerStartLineResult.groups.namespace}/${providerStartLineResult.groups.depName}`; + registryUrl = providerStartLineResult.groups.registryUrl; + return; + } + + const versionLineResult = versionLineRegex.exec(line); + if (versionLineResult) { + version = versionLineResult.groups.version; + relativeLineNumbers.version = index; + return; + } + + const constraintLineResult = constraintLineRegex.exec(line); + if (constraintLineResult) { + constraints = constraintLineResult.groups.constraint; + relativeLineNumbers.constraint = index; + } + }); + + const lock: ProviderLock = { + lookupName, + registryUrl, + version, + constraints, + hashes, + lineNumbers: relativeLineNumbers, + }; + return lock; + }); + + if (locks.length === 0) { + return null; + } + return locks; +} + +export function isPinnedVersion(value: string): boolean { + const versioning = getVersioning('hashicorp'); + return !!versioning.isSingleVersion(value); +} + +export function writeLockUpdates( + updates: ProviderLockUpdate[], + oldLockFileContent: string +): UpdateArtifactsResult { + const lines = oldLockFileContent.split('\n'); + + const sections: string[][] = []; + updates.forEach((update, index, array) => { + // re add leading whitespace + let startWhitespace; + if (index > 0) { + // get end of the + startWhitespace = array[index - 1].lineNumbers.block.end; + } + const leadingNonRelevantLines = lines.slice( + startWhitespace, + update.lineNumbers.block.start + ); + sections.push(leadingNonRelevantLines); + + const providerBlockLines = lines.slice( + update.lineNumbers.block.start, + update.lineNumbers.block.end + ); + const newProviderBlockLines: string[] = []; + let hashLinePrefix = ''; + let hashLineSuffix = ''; + providerBlockLines.forEach((providerBlockLine, providerBlockIndex) => { + const versionLine = providerBlockLine.replace( + versionLineRegex, + `$1${update.newVersion}$3` + ); + if (versionLine !== providerBlockLine) { + newProviderBlockLines.push(versionLine); + return; + } + + const constraintLine = providerBlockLine.replace( + constraintLineRegex, + `$1${update.newConstraint}$3` + ); + if (constraintLine !== providerBlockLine) { + newProviderBlockLines.push(constraintLine); + return; + } + + const hashLineRegexResult = hashLineRegex.exec(providerBlockLine); + if (hashLineRegexResult) { + // skip hash line but safe the whitespace + hashLinePrefix = hashLineRegexResult.groups.prefix; + hashLineSuffix = hashLineRegexResult.groups.suffix; + return; + } + newProviderBlockLines.push(providerBlockLine); + }); + const hashesWithWhitespace = update.newHashes.map( + (value) => `${hashLinePrefix}${value}${hashLineSuffix}` + ); + newProviderBlockLines.splice( + update.lineNumbers.hashes.start, + 0, + ...hashesWithWhitespace + ); + sections.push(newProviderBlockLines); + }); + + const trailingNotUpdatedLines = lines.slice( + updates[updates.length - 1].lineNumbers.block.end + ); + sections.push(trailingNotUpdatedLines); + + const newLines = sections.reduce((previousValue, currentValue) => + previousValue.concat(currentValue) + ); + const newContent = newLines.join('\n'); + + return { + file: { + name: lockFile, + contents: newContent, + }, + }; +} diff --git a/lib/util/fs/__snapshots__/index.spec.ts.snap b/lib/util/fs/__snapshots__/index.spec.ts.snap new file mode 100644 index 00000000000000..de76c6eab813d8 --- /dev/null +++ b/lib/util/fs/__snapshots__/index.spec.ts.snap @@ -0,0 +1,16 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`util/fs/index readLocalDirectory returns dir content 1`] = ` +Array [ + "Cargo.lock", + "Cargo.toml", +] +`; + +exports[`util/fs/index readLocalDirectory returns dir content 2`] = ` +Array [ + "Cargo.lock", + "Cargo.toml", + "subdir", +] +`; diff --git a/lib/util/fs/index.spec.ts b/lib/util/fs/index.spec.ts index b8a05915e28bc5..e619dd32a5e3fb 100644 --- a/lib/util/fs/index.spec.ts +++ b/lib/util/fs/index.spec.ts @@ -2,9 +2,11 @@ import { withDir } from 'tmp-promise'; import { getName } from '../../../test/util'; import { setAdminConfig } from '../../config/admin'; import { + ensureLocalDir, findLocalSiblingOrParent, getSubDirectory, localPathExists, + readLocalDirectory, readLocalFile, writeLocalFile, } from '.'; @@ -99,4 +101,55 @@ describe(getName(), () => { expect(await findLocalSiblingOrParent('other', '/etc/hosts')).toBeNull(); }); }); + + describe('readLocalDirectory', () => { + it('returns dir content', async () => { + await withDir( + async (localDir) => { + setAdminConfig({ + localDir: localDir.path, + }); + await writeLocalFile('test/Cargo.toml', ''); + await writeLocalFile('test/Cargo.lock', ''); + + const result = await readLocalDirectory('test'); + expect(result).not.toBeNull(); + expect(result).toBeArrayOfSize(2); + expect(result).toMatchSnapshot(); + + await writeLocalFile('Cargo.lock', ''); + await writeLocalFile('/test/subdir/Cargo.lock', ''); + + const resultWithAdditionalFiles = await readLocalDirectory('test'); + expect(resultWithAdditionalFiles).not.toBeNull(); + expect(resultWithAdditionalFiles).toBeArrayOfSize(3); + expect(resultWithAdditionalFiles).toMatchSnapshot(); + }, + { + unsafeCleanup: true, + } + ); + }); + + it('return empty array for non existing directory', async () => { + await withDir( + async (localDir) => { + setAdminConfig({ + localDir: localDir.path, + }); + await expect(readLocalDirectory('somedir')).rejects.toThrow(); + }, + { + unsafeCleanup: true, + } + ); + }); + + it('return empty array for a existing but empty directory', async () => { + await ensureLocalDir('somedir'); + const result = await readLocalDirectory('somedir'); + expect(result).not.toBeNull(); + expect(result).toBeArrayOfSize(0); + }); + }); }); diff --git a/lib/util/fs/index.ts b/lib/util/fs/index.ts index be10caffd13b34..3c0938380d9c9c 100644 --- a/lib/util/fs/index.ts +++ b/lib/util/fs/index.ts @@ -1,3 +1,5 @@ +import stream from 'stream'; +import util from 'util'; import is from '@sindresorhus/is'; import * as fs from 'fs-extra'; import { isAbsolute, join, parse } from 'upath'; @@ -6,6 +8,8 @@ import { logger } from '../../logger'; export * from './proxies'; +export const pipeline = util.promisify(stream.pipeline); + export function getSubDirectory(fileName: string): string { return parse(fileName).dir; } @@ -136,3 +140,17 @@ export async function findLocalSiblingOrParent( return null; } + +/** + * Get files by name from directory + */ +export async function readLocalDirectory(path: string): Promise { + const { localDir } = getAdminConfig(); + const localPath = join(localDir, path); + const fileList = await fs.readdir(localPath); + return fileList; +} + +export function createWriteStream(path: string): fs.WriteStream { + return fs.createWriteStream(path); +} diff --git a/lib/util/fs/proxies.ts b/lib/util/fs/proxies.ts index 9dfefc4667c167..3abe0f4624a97c 100644 --- a/lib/util/fs/proxies.ts +++ b/lib/util/fs/proxies.ts @@ -70,3 +70,21 @@ export function move( ): Promise { return fs.move(src, dest, options ?? {}); } + +// istanbul ignore next +export function readdir(path: string): Promise { + return fs.readdir(path); +} + +// istanbul ignore next +export function rm( + path: string, + options?: { + force?: boolean; + maxRetries?: number; + recursive?: boolean; + retryDelay?: number; + } +): Promise { + return fs.rm(path, options); +} diff --git a/package.json b/package.json index 110af74674329c..2052e170390210 100644 --- a/package.json +++ b/package.json @@ -144,6 +144,7 @@ "dequal": "2.0.2", "detect-indent": "6.1.0", "email-addresses": "4.0.0", + "extract-zip": "2.0.1", "emoji-regex": "9.2.2", "emojibase": "5.2.0", "emojibase-regex": "5.1.3", diff --git a/yarn.lock b/yarn.lock index 21ea0ec2327256..53eea7367cc91e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1882,6 +1882,13 @@ dependencies: "@types/yargs-parser" "*" +"@types/yauzl@^2.9.1": + version "2.9.1" + resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.9.1.tgz#d10f69f9f522eef3cf98e30afb684a1e1ec923af" + integrity sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA== + dependencies: + "@types/node" "*" + "@types/yargs@^16.0.0": version "16.0.3" resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.3.tgz#4b6d35bb8e680510a7dc2308518a80ee1ef27e01" @@ -2598,6 +2605,11 @@ bser@2.1.1: dependencies: node-int64 "^0.4.0" +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= + buffer-from@1.x, buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" @@ -3996,6 +4008,17 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" +extract-zip@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" + integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== + dependencies: + debug "^4.1.1" + get-stream "^5.1.0" + yauzl "^2.10.0" + optionalDependencies: + "@types/yauzl" "^2.9.1" + extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" @@ -4057,6 +4080,13 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= + dependencies: + pend "~1.2.0" + figures@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" @@ -6511,6 +6541,7 @@ minipass-fetch@^1.3.0, minipass-fetch@^1.3.2: resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.3.3.tgz#34c7cea038c817a8658461bf35174551dce17a0a" integrity sha512-akCrLDWfbdAWkMLBxJEeWTdNsjML+dt5YgOI4gJ53vuO0vrmYQkUPxa6j6V65s9CcePIr2SSWqjT2EcrNseryQ== dependencies: + encoding "^0.1.12" minipass "^3.1.0" minipass-sized "^1.0.3" minizlib "^2.0.0" @@ -7442,6 +7473,11 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= + performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" @@ -9608,6 +9644,14 @@ yargs@^16.0.3, yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" +yauzl@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" + yn@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"