Azure / Azure/azure-cli

az vmss update fails JSON serialization for updating secrets on windows

Open
#15,119 4 comments 1 reaction 2 assignees Claimed by @zhoxing-ms View on GitHub
act-observability-squad Compute customer-reported feature-request OKR3.2 Candidate
Dominant language
Python
Stars
4.6k
Forks
3.5k
Avg merge
3d 2h
Merged PRs (30d)
60

Description

I am trying to add the secrets (on windows) in the vmss using cli with Json parameters but it's failing to deserialize. I came across an existing closed [bug](https://github.com/Azure/azure-cli/issues/12623) and followed the instructions suggested [here](https://github.com/Azure/azure-cli/issues/12623#issuecomment-634472185). However, it still doesn't work.
Please note: once add starts working, I have a requirement to work on the removal part as well.

**Command Name**
`az vmss update --name $vmScaleSetName --resource-group $sfResourceGroupName --add virtualMachineProfile.osProfile.secrets @myCert.json`

Content of the json file (for more clarity, also replaced the sensitive information with dummy values)
`[
{
"sourceVault": {
"id": "/subscriptions/123123234234234234/resourceGroups/myresourcegroup/providers/Microsoft.KeyVault/vaults/mykeyvault"
},
"vaultCertificates": [
{
"certificateStore": "MY",
"certificateUrl": "https://mykeyvault.vault.azure.net/secrets/mycert/1231kj23h1k2j3h12312323"
}
]
}
]`

**Errors:**
`The command failed with an unexpected error. Here is the traceback:

Unable to build a model: Unable to deserialize to object: type, AttributeError: 'str' object has no attribute 'get', DeserializationError: Unable to deserialize to object: type, AttributeError: 'str' object has no attribute 'get'
Traceback (most recent call last):
File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-yf22vmg2\msrest\msrest\serialization.py", line 1291, in _deserialize
File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-yf22vmg2\msrest\msrest\serialization.py", line 1081, in rest_key_case_insensitive_extractor
File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-yf22vmg2\msrest\msrest\serialization.py", line 1104, in attribute_key_case_insensitive_extractor
AttributeError: 'str' object has no attribute 'get'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-yf22vmg2\msrest\msrest\serialization.py", line 571, in body
File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-yf22vmg2\msrest\msrest\serialization.py", line 1261, in _deserialize
File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-yf22vmg2\msrest\msrest\serialization.py", line 1261, in _deserialize
File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-yf22vmg2\msrest\msrest\serialization.py", line 1261, in _deserialize
File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-yf22vmg2\msrest\msrest\serialization.py", line 1270, in _deserialize
File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-yf22vmg2\msrest\msrest\serialization.py", line 1450, in deserialize_data
File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-yf22vmg2\msrest\msrest\serialization.py", line 1481, in deserialize_iter
File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-yf22vmg2\msrest\msrest\serialization.py", line 1481, in
File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-yf22vmg2\msrest\msrest\serialization.py", line 1463, in deserialize_data
File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-yf22vmg2\msrest\msrest\serialization.py", line 1301, in _deserialize
File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-yf22vmg2\msrest\msrest\exceptions.py", line 51, in raise_with_traceback
File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-yf22vmg2\msrest\msrest\serialization.py", line 1291, in _deserialize
File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-yf22vmg2\msrest\msrest\serialization.py", line 1081, in rest_key_case_insensitive_extractor
File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-yf22vmg2\msrest\msrest\serialization.py", line 1104, in attribute_key_case_insensitive_extractor
msrest.exceptions.DeserializationError: Unable to deserialize to object: type, AttributeError: 'str' object has no attribute 'get'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-yf22vmg2\knack\knack\cli.py", line 215, in invoke
File "D:\a\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure\cli\core\commands\__init__.py", line 654, in execute
File "D:\a\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure\cli\core\commands\__init__.py", line 718, in _run_jobs_serially
File "D:\a\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure\cli\core\commands\__init__.py", line 711, in _run_job
File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-yf22vmg2\six\six.py", line 703, in reraise
File "D:\a\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure\cli\core\commands\__init__.py", line 688, in _run_job
File "D:\a\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure\cli\core\commands\__init__.py", line 325, in __call__
File "D:\a\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure\cli\core\commands\arm.py", line 567, in handler
File "D:\a\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure\cli\core\commands\__init__.py", line 444, in cached_put
File "D:\a\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure\cli\core\commands\__init__.py", line 438, in _put_operation
File "D:\a\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure\cli\command_modules\vm\custom.py", line 2758, in update_vmss
File "D:\a\1\s\build_scripts\windows\artifacts\cli\Lib\site-packages\azure\cli\core\util.py", line 515, in sdk_no_wait
File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-yf22vmg2\azure-mgmt-compute\azure\mgmt\compute\v2019_12_01\operations\_virtual_machine_scale_sets_operations.py", line 127, in create_or_update
File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-yf22vmg2\azure-mgmt-compute\azure\mgmt\compute\v2019_12_01\operations\_virtual_machine_scale_sets_operations.py", line 72, in _create_or_update_initial
File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-yf22vmg2\msrest\msrest\serialization.py", line 574, in body
File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-yf22vmg2\msrest\msrest\exceptions.py", line 51, in raise_with_traceback
File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-yf22vmg2\msrest\msrest\serialization.py", line 571, in body
File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-yf22vmg2\msrest\msrest\serialization.py", line 1261, in _deserialize
File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-yf22vmg2\msrest\msrest\serialization.py", line 1261, in _deserialize
File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-yf22vmg2\msrest\msrest\serialization.py", line 1261, in _deserialize
File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-yf22vmg2\msrest\msrest\serialization.py", line 1270, in _deserialize
File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-yf22vmg2\msrest\msrest\serialization.py", line 1450, in deserialize_data
File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-yf22vmg2\msrest\msrest\serialization.py", line 1481, in deserialize_iter
File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-yf22vmg2\msrest\msrest\serialization.py", line 1481, in
File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-yf22vmg2\msrest\msrest\serialization.py", line 1463, in deserialize_data
File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-yf22vmg2\msrest\msrest\serialization.py", line 1301, in _deserialize
File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-yf22vmg2\msrest\msrest\exceptions.py", line 51, in raise_with_traceback
File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-yf22vmg2\msrest\msrest\serialization.py", line 1291, in _deserialize
File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-yf22vmg2\msrest\msrest\serialization.py", line 1081, in rest_key_case_insensitive_extractor
File "C:\Users\VSSADM~1\AppData\Local\Temp\pip-install-yf22vmg2\msrest\msrest\serialization.py", line 1104, in attribute_key_case_insensitive_extractor
msrest.exceptions.SerializationError: Unable to build a model: Unable to deserialize to object: type, AttributeError: 'str' object has no attribute 'get', DeserializationError: Unable to deserialize to object: type, AttributeError: 'str' object has no attribute 'get'`

## To Reproduce:

- Setup an azure vault
- Store a secret in the vault
- Run the powershell command above

##Prerequisite
Run the below script to output JSON in a file.
`$secrets = $(az keyvault secret list-versions --vault-name $keyvaultName -n $certificateName --query "[?attributes.enabled].id" -o tsv)
az vm secret format -s $secrets --keyvault $keyvaultName -g mykvresourcegroupname --certificate-store "MY"| Out-File "myCert.json"`

Please note: the source for the above script is this [example](https://docs.microsoft.com/en-us/cli/azure/keyvault/certificate?view=azure-cli-latest#az-keyvault-certificate-create-examples)

## Expected Behavior
Should be able to update vmss with the secret/certificate

## Environment Summary
```
Windows-10-10.0.17763-SP0
Python 3.6.6
Installer: MSI

azure-cli 2.6.0 *

```
## Additional Context

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.