cloudstack-cloudmonkey
cloudstack-cloudmonkey copied to clipboard
cmk ignores the CLI profile arg when loading the cache file
Summary
Cloudmonkey requires a default profile in .cmk/config
to read the .cmk/profiles/*.cache
files and it will ignore the command line arg when loading said cache, preferring the default profile.
System
OS: MacOS 11 CPU: darwin.x86-64 CMK Version: 6.2.0 (build: 8aae61e, 2021-09-23T10:50:26+0530)
Setup
Create a sample .cmk/config
with something like:
profile = dev
[dev]
...
[prod]
...
Then perform a sync:
$ cmk sync
Discovered 194 APIs
Verify that it did create the sync cache for dev
:
$ ls ~/.cmk/profiles
dev.cache
Verify that my custom command did sync and is cached:
$ jq '.api[] | select(.name=="myCustomCommand") | {name: .name}' ~/.cmk/profiles/dev.cache
{
"name": "myCustomCommand"
}
Attempt 1: Shouldn't work but does
Let's try to use one of those recently synced custom commands for prod
, which doesn't have any cache file at all (as seen above):
cmk -d -p prod myCustomCommand
[debug] Trying to load profile: prod
[debug] cmdline args:cmk, -d, -p, prod, myCustomCommand
[debug] ExecCmd args: myCustomCommand
<actual results of working command>
That works, even though it shouldn't. The debug output shows that it is loading prod
profile but I would expect it to fail since there is no prod.cache
with the custom commands. Instead, it is reading dev.cache
for the custom commands and only use prod
as the profile for the actual execution of the command.
Attempt 2: Should work, but doesn't
Let's remove the default profile from .cmk/config
(setting it to profile =
or entirely deleting the line both do the same):
profile =
[dev]
...
[prod]
...
Then, since dev.cache
already exists, let's try and use that:
$ cmk -d -p dev myCustomCommand
[debug] Trying to load profile: dev
[debug] cmdline args:cmk, -d, -p, dev, myCustomCommand
[debug] ExecCmd args: myCustomCommand
Error: unknown command or API requested
That should work since there is a dev.cache
file; there is a [dev]
profile defined in the .cmk/config
; and it does recognize that -p dev
is valid. But because there is no profile = dev
in .cmk/config
, it will not work.
Workarounds
If myCustomCommand
is the same in all profiles, then I can simply arbitrarily set profile = dev
in .cmk/config
and the command line -p <profile>
will work for all profiles.
Alternatively, I can have separate config files per profile and use the new -c <config>
option, but that only works starting recently.