Search code examples
azure-devopsterraformterraform-template-fileazure-configuration

Terraform apply error 'The number of path segments is not divisible by 2' for Azure App Feature Flag


Terraform apply error 'The number of path segments is not divisible by 2' for Azure App Feature Flag

Why am I seeing this error? Hard to find any answer to this anywhere. I am using Terraform v2.93.0 and I also tried 2.90.0 and 2.56.0, and got the same problem. I was adding configs just fine but as soon as I tried to configure a Feature Flag, it breaks the Terraform project AND I am forced to rebuild re-init from scratch. Terraform is not able to recover on its own if I remove the config and running plan again.

╷
│ Error: while parsing resource ID: while parsing resource ID:  
| The number of path segments is not divisible by 2 in 
|  "subscriptions/{key}/resourceGroups/my-config-test/providers/Microsoft.AppConfiguration/configurationStores/my-app-configuration/AppConfigurationFeature/.appconfig.featureflag/DEBUG/Label/my-functions-test"
│ 
│ while parsing resource ID: while parsing resource ID: 
| The number of path segments is not divisible by 2 in
│ "subscriptions/{key}/resourceGroups/my-config-test/providers/Microsoft.AppConfiguration/configurationStores/my-app-configuration/AppConfigurationFeature/.appconfig.featureflag/DEBUG/Label/my-functions-test"
╵
╷
│ Error: obtaining auth token for "https://my-app-configuration.azconfig.io": getting authorization token for endpoint https://my-app-configuration.azconfig.io: 
|  obtaining Authorization Token from the Azure CLI: parsing json result from the Azure CLI: waiting for the Azure CLI: exit status 1: ERROR: The command failed with an unexpected error. Here is the traceback:
│ ERROR: [Errno 2] No such file or directory

WHY is the slash missing from the front of the ID????

And here is the config that breaks it:

resource "azurerm_app_configuration_feature" "my_functions_test_DEBUG" {
  configuration_store_id = azurerm_app_configuration.my_app_configuration.id
  description            = "Debug Flag"
  name                   = "DEBUG"
  label                  = "my-functions-test"
  enabled                = false
}

When it is healthy, the apply on configs works, and looks like this:

Plan: 4 to add, 0 to change, 0 to destroy.

Do you want to perform these actions in workspace "my-app-config-test"?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

azurerm_resource_group.my_config_rg_test: Creating...
azurerm_resource_group.my_config_rg_test: Creation complete after 0s [id=/subscriptions/{key}/resourceGroups/my-config-test]

Solution

  • Ok, I figured it out. There is a bug: when create a azurerm_app_configuration_key resource, the key can be like so key = "/application/config.EXSTREAM_DOMAIN" BUT when you create a azurerm_app_configuration_feature, you will HOSE your terraform config if you try to set the name field to name = .appconfig.featureflag/DEBUG. Instead, just set the name field to DEBUG. If you don't do that, you have to completely reset your terraform and re-initialize all the resources. Had to learn the hard way. There error message was not helpful but could be updated to be helpful in this respect.