Changelog¶
v6.1.0 - 2026-08-24¶
Added the
ServerGroupresource to manage Nova server group scheduling policies.A
VirtualMachinecan be scheduled into aServerGroupthrough the newserver_grouprelation: the machine boots with the Novagroupscheduler hint set to that group.A
NetworkPortcan 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 a404 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(nosubnet): 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 asSubnet <name> not foundinstead ofNetwork <name> not found.A
NetworkPortnow 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.ethertypeattribute; unmanaged IPv6 rules are left untouched.SecurityRule.ip_protocolnow also acceptsipv6-icmpand IP protocol numbers (e.g."73"), andIPrule.remote_prefixaccepts IPv6 networks.A
NetworkPortwhose 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
NetworkPortwith 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 withNetwork <name> for port <name> not found..A
VirtualMachineresolves 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
descriptionattribute toFlavor, updated in place instead of recreating the flavor. It defaults to null, which leaves the description unmanaged.Flavor.extra_specsis 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
Flavorlookup 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 withNotUniqueExceptionas soon as more than one existed.Fix
NetworkPorton 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 withNetwork <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
HostPortentity. Its functionality is merged intoNetworkPort, which now takes an optionalvmrelation: set it to attach the port to a virtual machine (the formerHostPortbehaviour), leave it unset for a standalone port. Replaceopenstack::HostPort(...)withopenstack::NetworkPort(...).A
NetworkPortused as the parent port of aTrunkNetworkis now created unbound and the virtual machine boots on it, instead of being bound first. This fixes trunk creation failing withPort <id> is currently in use and is not eligible for use as a parent porton 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
HostPortfixed IPs as afixed_ipsfact (JSON list of addresses), replacing theip_address_<N>facts.Support dual-stack and IPv6-only
HostPort:addressis now optional and a new optionaladdress_v6requests a fixed IPv6;subnetaccepts anySubnetBase.A dual-stack
HostPortkeeps itsport_indexinterface slot: it boots with its IPv4 and the IPv6 is added afterwards.
v5.1.0 - 2026-06-29¶
Support updating the
flavorof aVirtualMachinein place by resizing the server instead of recreating it.Added
HostAggregateMetadataresource to manage a single key/value metadata item on a Nova host aggregateAdd resizing of flavors while maintaining immutability
Added
availability_zoneattribute toVirtualMachineandHostto allow pinning VMs to a specific Nova availability zone.Added
HostPort.security_groupsfor per-port security groups; empty (default) leaves them unmanaged, non-empty requires port security.VirtualMachineleaves server-level security groups unmanaged when itssecurity_groupsrelation is empty, deferring to per-port groups.Fix
NetworkPortfailing withNotUniqueExceptionwhen networks with the same name exist in different projects, by scoping the network lookup to the port’s project.Add
mac_addressattribute toNetworkPortfor 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
netmodule
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::Imagehandler hang when the newly created image doesn’t enter theactivestatus.
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
PluginExceptionwhenfind_flavorfails 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