Azure / azure-cli

Azure Command-Line Interface
MIT License
4.01k stars 2.98k forks source link

az appconfig feature list broken 2.64.0 -> 2.65.0 #30106

Open DanoThom opened 2 weeks ago

DanoThom commented 2 weeks ago

Describe the bug

The Az CLI App Configuration command az appconfig feature list to list out feature flags broke after upgrading from version 2.64.0 to 2.65.0. Worked previously for many months locally and in the Azure DevOps pipelines. After the upgrade in the pipelines and locally we noticed the following JSON decode error in the output:

WARNING: Invalid value. Unable to decode the following JSON value

Image

I replicated this locally and in Azure Pipeline build agents.

Downgrading back to version 2.64.0 works successfully.

Related command

az appconfig feature list

Errors

WARNING: Invalid value. Unable to decode the following JSON value: key:.appconfig.featureflag/xxx-BandwidthPolicyNewProps value:{"id": "xxx-BandwidthPolicyNewProps", "description": "Shows UI elements that control maximumConcurrentUploads, maximumConcurrentDownloads, disableSubscriptionNotifications, maximumUploadSpeed and maximumDownloadSpeed in CDM in the bandwidth policy.", "enabled": false, "display_name": null, "conditions": {"client_filters": null}} Full exception: 'NoneType' object is not iterable

WARNING: Invalid value. Unable to decode the following JSON value: key:.appconfig.featureflag/xxx-CleanupPolicyPage value:{"id": "xxx-CleanupPolicyPage", "description": "Allows users to decide how configure the way in which the app manages and cleans cache data.", "enabled": true, "display_name": null, "conditions": {"client_filters": null}} Full exception: 'NoneType' object is not iterable

Issue script & Debug output

Image

Expected behavior

Lists out feature flags from an App Configuration service without error.

Environment Summary

{ "azure-cli": "2.65.0", "azure-cli-core": "2.65.0", "azure-cli-telemetry": "1.1.0", "extensions": { "azure-devops": "1.0.1", "image-copy-extension": "0.2.13", "maintenance": "1.7.0b1", "storage-preview": "1.0.0b4" } }

Additional context

No response

yonzhan commented 2 weeks ago

Thank you for opening this issue, we will look into it.

sjchapmanuk commented 1 week ago

Just chiming in to say I'm seeing the exact same issue - deployments failing due to a change in the behaviour of the output of the az appconfig feature list command.

In reality we actually have more like ~40 feature flags. There is no clear defining characteristic for those which are failing vs those which are succeeding. There are a variety of created dates, last modified dates, key lengths, descriptions, states etc. and there is no clear correlation with which keys are failing vs those which are being returned.

v2.63.0:

[
    {
      "conditions": {
        "client_filters": []
      },
      "description": "",
      "key": ".appconfig.featureflag/ExampleName1",
      "label": null,
      "lastModified": "2024-08-27T11:25:21+00:00",
      "locked": false,
      "name": "ExampleName1",
      "state": "on"
    },
    {
      "conditions": {
        "client_filters": []
      },
      "description": "",
      "key": ".appconfig.featureflag/ExampleName2",
      "label": null,
      "lastModified": "2024-08-29T12:47:24+00:00",
      "locked": false,
      "name": "ExampleName2",
      "state": "on"
    }
]

v2.65.0:

Invalid value. Unable to decode the following JSON value: 
key:.appconfig.featureflag/ExampleName1 value:{"id": "ExampleName1", "enabled": true, "conditions": {"client_filters": null}, "display_name": null, "description": null}
Full exception: 
'NoneType' object is not iterable

Found 1 invalid feature flags. These feature flags will be skipped.
[
  {
    "conditions": {
      "client_filters": []
    },
    "description": "",
    "key": ".appconfig.featureflag/ExampleName2",
    "label": null,
    "lastModified": "2024-08-29T12:47:24+00:00",
    "locked": false,
    "name": "ExampleName2",
    "state": "on"
  }
]
gonzmed commented 1 week ago

We have encounter the same issue after the upgrade and suspect that it is related to the value in the conditions field. If there is no value or if the value looks like this:

{
    "conditions": {
        "client_filters": null
    }
}

we encounter an error. We were able to resolve the issue by using the portal and making an advanced edit to the feature flags, adding or modifying the conditions field as follows

{
    "id": "flagName",
    "description": "desc",
    "enabled": false,
    "conditions": null
}

OR

{
    "id": "flagName",
    "description": "desc",
    "enabled": false,
    "conditions": {
        "client_filters": []
    }
}