- Adds ability to add a config setting to clouds.yaml to disable fetching extra_specs from flavors.
- Add the add_server_security_groups and remove_server_security_groups functions to add and remove security groups from a specific server.
- Added missing dependency on futures library for python 2. The depend was missed in testing due to it having been listed in test-requirements already.
- Added list_availability_zone_names API call.
- Cluster Templates have data model and normalization now. As a result, the detail parameter is now ignored and detailed records are always returned.
attach_volumemethod now always returns a
attach_volumewould return a
volumeobject if it was called with
- magnumclient is no longer a direct dependency as magnum API calls are now made directly via REST.
- Add new method, ‘endpoint_for’ which will return the raw endpoint for a given service from the current catalog.
- Add ‘all_projects’ parameter to list_servers and search_servers which will tell Nova to return servers for all projects rather than just for the current project. This is only available to cloud admins.
- Nova microversion is being requested. Since shade is not yet actively microversion aware, but has been dealing with the 2.0 structures anyway, this should not affect anyone.
- name_or_id parameters to search/get methods now support filename-like globbing. This means search_servers(‘nb0*’) will return all servers whose names start with ‘nb0’.
- Added ability to create an image from a volume.
- troveclient is no longer a hard dependency. Users who were using shade to construct a troveclient Client object should use os_client_config.make_legacy_client instead.
- Nova flavor operations are now handled via REST calls instead of via novaclient. There should be no noticable difference.
- Add a list_flavor_access method to list all the projects/tenants allowed to access a given flavor.
- Allow to retrieve the limits of a specific project
- Allow to retrieve the usage of a specific project
- get_object now supports streaming output directly to a file.
- Add support for listing volume types.
- Add support for managing volume type access.
- Removed swiftclient as a dependency. All swift operations are now performed with direct REST calls using keystoneauth Adapter.
- Fixed an issue where shade could report a floating IP being attached to a server erroneously due to only matching on fixed ip. Changed the lookup to match on port ids. This adds an API call in the case where the workaround is needed because of a bug in the cloud, but in most cases it should have no difference.
- Fixed an issue where glance image list pagination was being ignored, leading to truncated image lists.
This release marks the beginning of the path towards removing all of the ‘python-*client’ libraries as dependencies. Subsequent releases should expect to have fewer and fewer library depdencies.
- Added support for created_at, updated_at, description and revision_number attributes for floating ips.
- Removed glanceclient as a dependency. All glance operations are now performed with direct REST calls using keystoneauth Adapter.
- Fixed magnum service_type. shade was using it as ‘container’ but the correct type is ‘container-infra’. It’s possible that on old clouds with magnum shade may now do the wrong thing. If that occurs, please file a bug.
- shade will now only generate file hashes for glance images if both hashes are empty. If only one is given, the other will be treated as an empty string.
- All get and search functions can now take a jmespath expression in their filters parameter.
- Add description parameter to create_user, available on Keystone v3
- Add support for Cinder volume backup resources, with the usual methods (search/list/get/create/delete).
- Explicit data model contracts are now defined for Flavors, Images, Security Groups, Security Group Rules, and Servers.
- Resources with data model contracts are now being returned with ‘location’ attribute. The location carries cloud name, region name and information about the project that owns the resource.
- Image dicts that are returned are now normalized across glance v1 and glance v2. Extra key/value properties are now both in the root dict and in a properties dict. Additionally, cloud and region have been added like they are for server.
- Added ‘strict’ mode, which is set by passing strict=True to the OpenStackCloud constructor. strict mode tells shade to only return values in resources that are part of shade’s declared data model contract.
- delete_image used to fail with an AttributeError if an invalid image name or id was passed, rather than returning False which was the intent. This is worthy of note because it’s a behavior change, but the previous behavior was a bug.
- Added get_server_console method to fetch the console log from a Server. On clouds that do not expose this feature, a debug line will be logged and an empty string will be returned.
- Added support for dual stack networks where the IPv4 subnet and the IPv6 subnet have opposite public/private qualities. It is now possible to add configuration to clouds.yaml that will indicate that a network is public for v6 and private for v4, which is otherwise very difficult to correctly infer while setting server attributes like private_v4, public_v4 and public_v6.
- The image and flavor parameters for create_server now accept name in addition to id and dict. If given as a name or id, shade will do a get_image or a get_flavor to find the matching image or flavor. If you have an id already and are not using any caching and the extra lookup is annoying, passing the id in as “dict(id=’my-id’)” will avoid the lookup.
- If your cloud presents a default split IPv4/IPv6 stack with a public v6 and a private v4 address and you have the expectation that auto_ip should procure a v4 floating ip, you need to set ‘force_ipv4’ to True in your clouds.yaml entry for the cloud.
- shade now correctly does not try to attach a floating ip with auto_ip if the cloud has given a public IPv6 address and the calling context supports IPv6 routing. shade has always used this logic to determine the server ‘interface_ip’, but the auto floating ip was incorrectly only looking at the ‘public_v4’ value to determine whether the server needed additional networking.
- The contents of x-openstack-request-id are no longer added to object returned. Instead, they are logged to a logger named ‘shade.request_ids’.
- If a cloud does not have a neutron service, it is now assumed that Nova will be the source of security groups. To handle clouds that have nova-network and do not have the security group extension, setting secgroup_source to None will prevent attempting to use them at all. If the cloud has neutron but it is not a functional source of security groups, set secgroup_source to nova.
- Added update_endpoint as a new function that allows the user to update a created endpoint with new values rather than deleting and recreating that endpoint. This feature only works with keystone v3, with v2 it will raise an exception stating the feature is not available.
- Add support for Magnum baymodels, with the usual methods (search/list/get/create/update/delete). Due to upcoming rename in Magnum from baymodel to cluster_template, the shade functionality uses the term cluster_template. However, baymodel aliases are provided for each api call.
- Add support for listing Magnum services.
- Add update_server method to update name or description of a server.
- Add new APIs, OperatorCloud.get_compute_quotas(), OperatorCloud.set_compute_quotas() and OperatorCloud.delete_compute_quotas() to manage nova quotas for projects and users
- Add new APIs, OpenStackCloud.set_server_metadata() and OpenStackCloud.delete_server_metadata() to manage metadata of existing nova compute instances
- create_object() now has a “metadata” parameter that can be used to create an object with metadata of each key and value pair in that dictionary
- Add an update_object() function that updates the metadata of a swift object
- Added a parameter to create_image ‘meta’ which allows for providing parameters to the API that will not have any type conversions performed. For the simple case, the existing kwargs approach to image metadata is still the best bet.
- Add new APIs, OperatorCloud.get_network_quotas(), OperatorCloud.set_network_quotas() and OperatorCloud.delete_network_quotas() to manage neutron quotas for projects and users
- Add new APIs, OperatorCloud.get_volume_quotas(), OperatorCloud.set_volume_quotas() and OperatorCloud.delete_volume_quotas() to manage cinder quotas for projects and users
- Add support for host aggregates and host aggregate membership.
- Adds support to create and delete server groups.
- Add support for Designate recordsets resources, with the usual methods (search/list/get/create/update/delete).
- Add support for Designate zones resources, with the usual methods (search/list/get/create/update/delete).
- Added name_or_id parameter to domain operations, allowing an admin to update/delete/get by domain name.
- Implement update_stack to perform the update action on existing orchestration stacks.
- Delete swift objects uploaded in service of uploading images at the time that the corresponding image is deleted. On some clouds, image uploads are accomplished by uploading the image to swift and then running a task-import. As shade does this action on behalf of the user, it is not reasonable to assume that the user would then be aware of or manage the swift objects shade created, which led to an ongoing leak of swift objects.
- Upload swift Large Objects as Static Large Objects by default. Shade automatically uploads objects as Large Objects when they are over a segment_size threshold. It had been doing this as Dynamic Large Objects, which sound great, but which have the downside of not deleting their sub-segments when the primary object is deleted. Since nothing in the shade interface exposes that the object was segmented, the user would not know they would also need to find and delete the segments. Instead, we now upload as Static Large Objects which behave as expected and delete segments when the object is deleted.
- The delete_project() API now conforms to our standard of returning True when the delete succeeds, or False when the project was not found. It would previously raise an expection if the project was not found.
- Adds a new pair of options to create_image_snapshot(), wait and timeout, to have the function wait until the image snapshot being created goes into an active state.
- Adds a new function wait_for_image() which will wait for an image to go into an active state.
- Add the ability to update a keystone service information. This feature is not available on keystone v2.0. The new function, update_service(), allows the user to update description, name of service, service type, and enabled status.
- Flavors will always contain an ‘extra_specs’ attribute. Client cruft, such as ‘links’, ‘HUMAN_ID’, etc. has been removed.
- New wait_for_server() API call to wait for a server to reach ACTIVE status.
- Setting and unsetting flavor extra specs now works. This had been broken since the 1.2.0 release.
- No longer fail in list_router_interfaces() if a router does not have the external_gateway_info key.
- Fixed an issue where a section of code that was supposed to be resetting the SwiftService object was instead resetting the protective mutex around the SwiftService object leading to an exception of “__exit__”
- Added a new API call, OpenStackCloud.get_object(), to download objects from swift.
- add granting and revoking of roles from groups and users
- Implement list_role_assignments for keystone v2, using roles_for_user.
- Network provider options are now accepted in create_network().
- The create_server() API call would not use the supplied ‘network’ parameter if the ‘nics’ parameter was also supplied, even though it would be an empty list. It now uses ‘network’ if ‘nics’ is not supplied or if it is an empty list.
- The returned data from a create_service() call was not being normalized.
- When creating a new server, the timeout was not being passed through to floating IP creation, which could also timeout.
- Role assignments were being returned as plain dicts instead of Munch objects. This has been corrected.
- Keystone service descriptions were missing an attribute describing whether or not the service was enabled. A new ‘enabled’ boolean attribute has been added to the service data.
- Fixed caching the volume list when volumes are in use.
- Fixed the volume normalization function when used with cinder v2.
- The create_stack() call was fixed to call the correct iterator method and to return the updated stack object when waiting.
- The delete_object() method was not returning True/False, similar to other delete methods. It is now consistent with the other delete APIs.
- Fix for list_networks() ignoring any filters.
- Fix for update_domain() where ‘name’ was not updatable.
- Started using reno for release notes.