Changelog

v6.1.0 - 2026-08-24

  • Added the ServerGroup resource to manage Nova server group scheduling policies.

  • A VirtualMachine can be scheduled into a ServerGroup through the new server_group relation: the machine boots with the Nova group scheduler hint set to that group.

  • A NetworkPort can live on a network its project does not own, as long as that network is shared or external: the network lookup no longer stops at the port’s own project. This is what a port on an appliance’s (external) management network needs. Neutron only lets the network’s own project, a project it is shared with, or an admin create a port on such a network, and refuses by hiding the network behind a 404 The resource could not be found.; the port is now skipped naming that reason instead, as an external network is readable by every project but not attachable by all of them.

  • A virtual machine can boot on a port that only carries a network (no subnet): its NIC is then resolved by network name instead of through a subnet, so a machine can boot on a pre-existing network whose subnet names are unknown. A port pinned to a subnet keeps resolving through that subnet, and a missing one is now reported as Subnet <name> not found instead of Network <name> not found.

  • A NetworkPort now depends on the network it lives on, and on its subnet when it pins a fixed ip, so both are deployed before the port.

  • Security groups now support IPv6 rules via a new SecurityRule.ethertype attribute; unmanaged IPv6 rules are left untouched.

  • SecurityRule.ip_protocol now also accepts ipv6-icmp and IP protocol numbers (e.g. "73"), and IPrule.remote_prefix accepts IPv6 networks.

  • A NetworkPort whose network or vm no longer exists is now reported as purged instead of skipped, so purging such a port completes instead of getting stuck. A port that is still desired is skipped when it is created, and a vm that is not there is no longer waited for.

  • The subnet of a NetworkPort with a fixed ip is resolved through the network the port is on instead of being looked up scoped to the port’s own project, as the subnet of a shared network is owned by the project owning that network. Such a port was reported as purged and then skipped with Network <name> for port <name> not found..

  • A VirtualMachine resolves its boot NICs in its own project, falling back to a shared or external network, instead of through an unscoped lookup: a machine and its own port can no longer resolve different networks for the same relation.

  • Added an optional description attribute to Flavor, updated in place instead of recreating the flavor. It defaults to null, which leaves the description unmanaged.

  • Flavor.extra_specs is updated in place again instead of recreating the flavor. Extra specs are mutable in Nova, and recreating changed the flavor id for no reason. The attribute is now also nullable: it still defaults to an empty dict, which manages the specs exhaustively, and setting it to null leaves whatever is on the flavor untouched.

  • Fix Flavor lookup by name: the name was passed as a query parameter the Nova flavor list does not support and openstacksdk silently discarded it, so the handler listed every flavor in the cloud and failed with NotUniqueException as soon as more than one existed.

  • Fix NetworkPort on a network shared by another project: the network, and for a port with a fixed ip its subnet, were looked up scoped to the port’s own project, while a shared network is owned by the project that created it. Such a port was reported as purged and then skipped with Network <name> for port <name> not found.. The network lookup now falls back to shared networks and the subnet is resolved through the network the port is on.

v6.0.0 - 2026-07-14

v5.1.2 - 2026-07-14

  • Breaking: Removed the HostPort entity. Its functionality is merged into NetworkPort, which now takes an optional vm relation: set it to attach the port to a virtual machine (the former HostPort behaviour), leave it unset for a standalone port. Replace openstack::HostPort(...) with openstack::NetworkPort(...).

  • A NetworkPort used as the parent port of a TrunkNetwork is now created unbound and the virtual machine boots on it, instead of being bound first. This fixes trunk creation failing with Port <id> is currently in use and is not eligible for use as a parent port on neutron backends that reject a trunk built on a bound port.

v5.1.1 - 2026-07-02

  • Fix read resource for HostPort and VirtualMachine

  • Report all assigned HostPort fixed IPs as a fixed_ips fact (JSON list of addresses), replacing the ip_address_<N> facts.

  • Support dual-stack and IPv6-only HostPort: address is now optional and a new optional address_v6 requests a fixed IPv6; subnet accepts any SubnetBase.

  • A dual-stack HostPort keeps its port_index interface slot: it boots with its IPv4 and the IPv6 is added afterwards.

v5.1.0 - 2026-06-29

  • Support updating the flavor of a VirtualMachine in place by resizing the server instead of recreating it.

  • Added HostAggregateMetadata resource to manage a single key/value metadata item on a Nova host aggregate

  • Add resizing of flavors while maintaining immutability

  • Added availability_zone attribute to VirtualMachine and Host to allow pinning VMs to a specific Nova availability zone.

  • Added HostPort.security_groups for per-port security groups; empty (default) leaves them unmanaged, non-empty requires port security.

  • VirtualMachine leaves server-level security groups unmanaged when its security_groups relation is empty, deferring to per-port groups.

  • Fix NetworkPort failing with NotUniqueException when networks with the same name exist in different projects, by scoping the network lookup to the port’s project.

  • Add mac_address attribute to NetworkPort for explicit mac address setting.

v5.0.2 - 2026-06-22

  • Added NetworkPort, TrunkNetwork and TrunkPort resources

  • Fix local file image upload on clouds without the ‘glance-direct’ import method by falling back to direct data upload

v5.0.1 - 2026-05-04

  • Fix segmentation_id update behavior on network.

  • Fix update of network port_security_enabled

v5.0.0 - 2026-04-17

  • Made uri an optional parameter, uri is no longer read back as it is only needed for image creation.

  • Updated openstack credentials. Changed tenant to project everywhere and added user_domain_name and project_domain_name.

  • Added ProjectQuota resource for managing project quotas across compute, storage, and network services.

  • Added GroupRole resource for group-based role assignments on projects.

  • Remove netifaces import (outdated and not used anywhere in the repository).

  • Added mtu and qos_policy_id attributes for network service

  • Added qos_policy entity with dscp support - links to network through qos_policy name.

  • Added static routes to subnets.

v4.0.8 - 2024-11-12

  • Fix compatibility with std>=7.0.0

v4.0.7 - 2024-10-04

  • Updated documentation

v4.0.6 - 2024-07-12

  • Convert to module v2

v4.0.5 - 2024-07-05

v4.0.4 - 2024-03-29

v4.0.3 - 2024-02-14

  • Add netifaces dependency

v4.0.2 - 2023-12-11

  • Remove usage of deprecated net module

v4.0.1 - 2023-12-07

  • Remove the broken install_agent functionality.

  • Use either float or int

4.0.0 - 2023-12-07

  • When using openstack::Host the ip attribute will no longer be set automatically to the ip of eth0. To get the same behaviour, add the following to the openstack::Host constructor ip=std::getfact(host.vm, "ip_address")

v3.8.12 - 2023-10-12

v3.8.11 - 2023-06-30

v3.8.10 - 2023-05-08

  • Convert constraints in requirements.txt file

v3.8.9 - 2023-04-04

v3.8.8 - 2023-04-04

v3.8.7 - 2023-02-02

v3.8.6 - 2023-02-02

  • Dropped outdated requirements

3.8.3

  • Add default null value to mac address

3.7.11

  • Remove pytest.ini and move its logic to pyproject.toml

3.7.10

  • Add pytest.ini file and set asyncio_mode to auto

3.7.7

  • Use conditional requirement for inmanta-dev-dependencies package

3.7.5

  • Fix the bug that makes the openstack::Image handler hang when the newly created image doesn’t enter the active status.

3.7.3

  • openstack::FloatingIP resource set its ip_address fact on creation

3.7.2

  • Fix wait condition on delete of openstack::VirtualMachine

3.7.1

  • Ensure correct detection of deleted HostPorts (#286)

3.7.0

  • Add purge_on_delete option on the Host entity

3.6.13

  • Tune caching to prevent double creation of VM’s

3.6.12

  • Update inmanta-dev-dependencies package

3.6.11

  • Add setuptools-rust dependency required to build the cryptography package.

3.6.10

  • Pin PyOpenssl for compatibility with openssl 1.0.2

3.6.9

  • Remove transitive dependencies

3.6.8

  • Use inmanta-dev-dependencies package

3.6.7

  • Pin cryptography dependency to the correct version (inmanta/infra-tickets#93)

3.6.6

  • Downgrade cryptography to maintain compatibility with openssl 1.0.2 (inmanta/infra-tickets#93)

3.6.5

  • Remove the importlib-resources dependency

3.6.4

  • Remove the prettytable dependency.

3.6.3

  • Fix type object ‘resource’ has no attribute ‘project’

3.6.2

  • Fix type object ‘resource’ has no attribute ‘project’

3.6.1

  • Fix scoping issue on SecurityGroup resource (# 184)

3.6.0

  • Add support to disable SSL verification (# 152)

3.5.6

  • Raise a PluginException when find_flavor fails to find a matching flavor.

3.5.5

  • Ensure a hostport gets deleted before the associated VM (#79)

3.5.4

  • Start the packstack VM via pytest

3.5.3

  • Pin dependencies using ~=

3.5.2

  • Pin transitive dependencies

3.5.1

  • Fix problem where the vm_state variable is referenced before assignment

3.5.0

  • Added support to disable the gateway IP of a subnet

3.4.1

  • use new relation syntax (#65)

3.4.0

  • set gateway_ip on subnet by default to null

  • fix caching of find_image when name is used

  • close requests session of keystone library

3.3.2

  • fixed dependency manager mixing up identical objects in different providers (#48)

3.3.1

  • added examples folder

3.3.0

  • added improved caching for find_image

  • added an OpenStack image resource, for add OS images to OpenStack

  • Changed send_event default value to true from false

3.2.0

  • Added support for flavors

  • fix updates/creation for host with DHCP and fixed ip

3.1.1

  • added cache to improve find_flavor performance

  • allow model compilation to continue if openstack is unavailable