azure-cli: `az aks get-credentials` throws exception if ~/.kube/config does not contain the expected sections
Describe the bug
az aks get-credentials
expects ~/.kube/config to contain a clusters
, users
and contexts
section. If even one of them is missing, then the command will bail out with a Python KeyError exception.
To Reproduce Create ~/.kube/config with the following contents:
apiVersion: v1
clusters: []
kind: Config
Then run:
az aks get-credentials --resource-group SOMETHING --name SOMETHING --overwrite-existing
Actual behavior
The command failed with an unexpected error. Here is the traceback:
'users'
Traceback (most recent call last):
File "/usr/local/Cellar/azure-cli/2.0.74/libexec/lib/python3.7/site-packages/knack/cli.py", line 206, in invoke
cmd_result = self.invocation.execute(args)
File "/usr/local/Cellar/azure-cli/2.0.74/libexec/lib/python3.7/site-packages/azure/cli/core/commands/__init__.py", line 603, in execute
raise ex
File "/usr/local/Cellar/azure-cli/2.0.74/libexec/lib/python3.7/site-packages/azure/cli/core/commands/__init__.py", line 661, in _run_jobs_serially
results.append(self._run_job(expanded_arg, cmd_copy))
File "/usr/local/Cellar/azure-cli/2.0.74/libexec/lib/python3.7/site-packages/azure/cli/core/commands/__init__.py", line 654, in _run_job
six.reraise(*sys.exc_info())
File "/usr/local/Cellar/azure-cli/2.0.74/libexec/lib/python3.7/site-packages/six.py", line 693, in reraise
raise value
File "/usr/local/Cellar/azure-cli/2.0.74/libexec/lib/python3.7/site-packages/azure/cli/core/commands/__init__.py", line 631, in _run_job
result = cmd_copy(params)
File "/usr/local/Cellar/azure-cli/2.0.74/libexec/lib/python3.7/site-packages/azure/cli/core/commands/__init__.py", line 306, in __call__
return self.handler(*args, **kwargs)
File "/usr/local/Cellar/azure-cli/2.0.74/libexec/lib/python3.7/site-packages/azure/cli/core/__init__.py", line 485, in default_command_handler
return op(**command_args)
File "/usr/local/Cellar/azure-cli/2.0.74/libexec/lib/python3.7/site-packages/azure/cli/command_modules/acs/custom.py", line 1887, in aks_get_credentials
_print_or_merge_credentials(path, kubeconfig, overwrite_existing, context_name)
File "/usr/local/Cellar/azure-cli/2.0.74/libexec/lib/python3.7/site-packages/azure/cli/command_modules/acs/custom.py", line 2775, in _print_or_merge_credentials
merge_kubernetes_configurations(path, temp_path, overwrite_existing, context_name)
File "/usr/local/Cellar/azure-cli/2.0.74/libexec/lib/python3.7/site-packages/azure/cli/command_modules/acs/custom.py", line 1178, in merge_kubernetes_configurations
_handle_merge(existing, addition, 'users', replace)
File "/usr/local/Cellar/azure-cli/2.0.74/libexec/lib/python3.7/site-packages/azure/cli/command_modules/acs/custom.py", line 1112, in _handle_merge
if existing[key] is None:
KeyError: 'users'
To open an issue, please run: 'az feedback'
Expected behavior I expect the command to succeed, like this:
Merged "SOMETHING" as current context in ~/.kube/config
Environment summary I was able to reproduce this problem on two different environments.
Environment 1:
- Install method: Homebrew
- CLI version: 2.0.74
- OS: macOS Mojave
- Shell: bash
Environment 2:
- Install method: APT (via packages.microsoft.com)
- CLI version: 2.0.74
- OS: Ubuntu 16.04 (running inside a Docker container)
Additional context The problematic line is here: https://github.com/Azure/azure-cli/blob/0d4a040f56d481afa6b3d8cd1319b51bde9dd69a/src/azure-cli/azure/cli/command_modules/acs/custom.py#L1112
The code there attempts to check whether the config section exists, but does so in a wrong way. In Python, foo[key]
raises an exception if the key doesn’t exist, so foo[key] is None
makes no sense here. You want foo.get(key) is None
which does not raise but returns None if the key does not exist.
About this issue
- Original URL
- State: closed
- Created 5 years ago
- Reactions: 1
- Comments: 15 (5 by maintainers)
Also need update one this.
Is there anything we can do to mitigate?
@phealy Could you please let us know if you have any update on this issue ?