Apache CloudStack CloudMonkey Changelog
---------------------------------------

Version 5.3.0
=============
This release includes
- CloudMonkey becomes unicode friendly
- Autocompletion for filters, precache changes
- Autocompletion for config 'set' options and boolean api args
- Current server profile displayed on prompt
- Server profile related bugfixes, blank profile names are not allowed
- Filtering support for default display output
- Filtering by single key only outputs results without key names
- New command line arg: -d for display (json, table or default)
- Non-interactive commands from command line are outputted without colors
- Parameter completion uses list api heuristics and related APIs as fallback
- Parameter completion options are cached to speed up rendering of options
- CloudMonkey returns non-zero exit code when run on shell and a error is return
  from managment server, the error message is written to stderr
- Adds new config parameter 'verifysslcert' to enable/disable SSL cert checking

Make sure you backup your config before you upgrade cloudmonkey from previous releases.
With this release `cloudmonkey` will automatically fix your config file, add missing
configuration parameters and save it as the upgraded versions starts for the first time.

Version 5.2.0
=============
This release includes
 - In the config [server] section is deprecated now
 - For missing keys, cloudmonkey will set default values
 - Network requests, json decoding and shell related bugfixes
 - Based on platform, it will install either pyreadline (Windows) or readline (OSX and Linux)
 - Config options `protocol`, `host`, `port`, `path` are deprecated now
 - Backward compatibilty exists for above options but we use `url` for the mgmt server URL
 - Introduces server profiles so users can use cloudmonkey with different hosts and management server configs
 - A default profile under the section [local] is added with default values
 - Everytime `set` is called, cloudmonkey will write the config and reload config file

Make sure you backup your config before you upgrade cloudmonkey from previous releases.
With this release `cloudmonkey` will automatically fix your config file, add missing
configuration parameters and save it as the upgraded versions starts for the first time.

Version 5.1.0
=============
This release includes
 - support for using username and password instead of / in addition to api key and secret key
 - Usage of signature version 3 for the api signing process. This reduces the chance of API replay attacks
 - cleanup based on reporting from PEP8 and Flake8

If you upgrade from 5.0, then cloudmonkey will ask you to update your config file (~/.cloudmonkey/config)
Under the [user], you can add
username =
password =
Under the [server], you can add
expires = 600

Version 5.0.0
=============
This is the first release of CloudMonkey independent from the Apache CloudStack core orchestration engine. The release
includes a precache of Apache CloudStack 4.2.0 API calls, and should be backward compatible with prior 3.x and 4.x
CloudStack installations (with the obvious caveat that previous versions will have a subset of the latest API commands /
parameters).
