All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Log file command for realtime log tailing from nodes via SSH, with clush support for inventory groups and path traversal prevention (#2148)
--modeand--cleanparameters toopenstack stresscommand for rolling/block execution mode and resource cleanup (#2147)
- Cloud credential setup in stress command by integrating cloud helpers used by other OpenStack commands (#2139)
- Known_hosts race condition and command injection in console subprocess calls by using list-form subprocess and
shlex.quote()(#2137) - Host key verification failure for clush console type by adding missing SSH options (#2141)
- Clush group resolver error by moving SSH options from CLI flags to clush.conf (#2142)
- Move pottery import inside stdout/stderr suppression context to suppress "Monkey patched json.dumps()" message (#2136)
- Fix intermittent SSH "Permission denied" errors with concurrent Ansible tasks by using per-task SSH ControlPath directories (#2134)
- NetBox device link in nodes detail view for quick navigation to the device in NetBox (#2124)
- Status report command (
osism report status) with type parameter for querying host status facts via SSH (#2126, #2127) - Support for fast inventory directory (
fast/) as an alternative tohosts.ymlfor faster Ansible inventory parsing (#2128) --afifilter option toreport bgpcommand for filtering by address family (#2133)- Host group support to
console sshcommand, allowing inventory group names with interactive host selection (#2135)
- All hardcoded inventory paths now go through
get_inventory_pathwith resolution order: minified → fast directory → hosts.yml (#2128) - Use lazy imports to reduce CLI startup time from ~11 seconds by deferring heavy library imports to first use (#2130)
- Rename
report statustype fromboottobootstrapand show both True and False status by default (#2131)
ReleaseUnlockedLockerror in reconciler tasks when/run.shexceeds the 60s lock auto-release time (#2129)- Suppress pottery "Monkey patched json.dumps()" message on CLI invocation by deferring import in reconciler (#2132)
- LLDP neighbors report command (
osism report lldp) with per-host neighbor discovery via SSH - BGP sessions report command (
osism report bgp) showing peer state, uptime, and prefix counts
- Use minified inventory (
hosts-minified.yml) for faster host and group resolution when full host variables are not needed - Downgrade metalbox subnet matching log from warning to debug for routed OOB addresses where the fallback path is expected
- Mask secrets in
frr_parameters,netplan_parameters, and inventory hostvar API responses in addition tokernel_append_params
- Fix masking of
ironic_osism_*secrets inkernel_append_paramswhen vault decryption is unavailable by adding regex-based fallback masking by parameter name - Fix host resolution with minified inventory by extracting hosts from group listings when
_meta.hostvarsis empty - Fix LLDP report for single-interface hosts where
lldpctlreturns a dict instead of a list
- Tag handling for L2VPN EVPN BGP neighbor address family, allowing enablement via
bgp-af-l2vpn-evpntag on local interfaces - Report memory command (
osism report memory) to query physical memory and product UUID for all hosts in the Ansible inventory - Configurable operator user via
OSISM_OPERATOR_USERenvironment variable, replacing hardcoded "dragon" username - Configurable FRR dummy interface via
OSISM_FRR_DUMMY_INTERFACEenvironment variable validate scscommand for running SCS IaaS conformity tests against OpenStack clouds- Support for ironic_parameters from NetBox Config Context during node sync, with Ansible Vault decryption
--dry-runflag forosism sync ironiccommand to preview changes without modifying Ironic baremetal nodes, with secret masking and prettified JSON outputosism vault checkcommand to verify the full vault password chain: keyfile existence, Fernet key validity, Redis storage, password decryption, and optional secrets.yml test- FRR parameter appending to kernel_append_params for supported IPA types during ironic node sync
- Baremetal node detail page with ports listing and new API endpoint
GET /v1/baremetal/nodes/{node_uuid}/ports - Device role from NetBox to baremetal nodes list and detail views
- Redfish address from driver_info to baremetal node detail page
- High-value Ironic fields (conductor, fault, maintenance_reason, description, owner, lessee, traits, allocation_uuid, provision_updated_at) to baremetal node views
- IPv6 support (
osism-ipa-ipv6) for yrzn001 IPA type kernel parameters osism-ipa-metalboxkernel parameter for yrzn001 IPA type with subnet-based metalbox lookup- Fallback metalbox lookup via NETBOX_FILTER_CONDUCTOR_IRONIC filters when subnet matching fails
--skip-kernel-paramoption forosism sync ironicto exclude specific kernel append parameters by name--extra-kernel-paramoption forosism sync ironicto add extra kernel append parameters as key=value pairs- Kernel append params, netplan parameters, and FRR parameters display in frontend node detail view with secret masking
- Boot device set to cdrom before deploy, clean, and burn-in operations to ensure virtual media boot
- Persistence of kernel_append_params in driver_info for automated cleaning after undeploy
- Restoration of instance_info from extra before clean and burn-in commands
- Ansible Vault decryption support for frr_parameters custom field
- Power off nodes during Ironic sync to ensure a defined power state for all newly synced nodes
- Primary IPv4/IPv6 addresses in node detail view, lazy-loaded from NetBox
- Node detail view lookup by name in addition to UUID, with selection list for duplicate names
- Node properties display in the Parameters section of the detail view
- Copy-to-clipboard buttons on node detail view fields
- Metalbox
hosts_additional_entriesto the deploy playbook for baremetal deployments - New API endpoints for lazy-loading NetBox data (
GET /v1/baremetal/nodes/{node_name}/netbox,POST /v1/baremetal/nodes/netbox) --netboxCLI flag forbaremetal listcommand to optionally include NetBox device roles
- Automatic node cleaning is now enabled per node after reaching available state during ironic sync
- Generic recursive Jinja2 rendering for ironic_osism_* secrets in node attributes, replacing hard-coded per-field rendering of remote_board_* fields
- Derive AS number from hostname for yrzn001 IPA type instead of reading from frr_parameters
- Extend secret masking to keys starting with ironic_osism_* and support string-level masking of embedded secret values
- Sync flavors.yaml with osism/openstack-flavor-manager, adding SCS-4V-16-100s flavor and fixing hw_rng:allowed casing
- Renamed IPA kernel parameters from
osism_as/osism_ipv4toosism-ipa-as/osism-ipa-ipv4scheme - Prioritize
frr_local_asfrom config context over hostname-derived AS number for yrzn001 - Restrict cdrom boot device override to Supermicro nodes only during deploy, burn-in, and clean operations
- Lazy-load NetBox data (device role, primary IPs) to eliminate N+1 HTTP requests on baremetal node listing
- Simplify dashboard to show only Total Nodes and Active Nodes tiles with centered layout
- Listing of SONiC devices by moving device retrieval to a conductor task where
NETBOX_FILTER_CONDUCTOR_SONICis available - Typo in netbox command output messages ("comming" → "coming")
- Missing f-string prefix for operator_user interpolation in check mount command
- Wrong key name
kernel_append_parametersinstead ofkernel_append_paramsin FRR parameter appending - Strip whitespace from decrypted secrets used as template variables in kernel_append_params
- YAML line wrapping breaking long strings (e.g. SSH keys) in deployment playbooks by setting
width=float("inf") - Trailing whitespace in decrypted Vault values in frr_parameters
- Remove
frr_parametersandnetplan_parametersfromlocal_context_datadefaults to prevent duplicate encrypted values in generated playbooks - Use correct task (
baremetal_node_set_power_state) when switching off Ironic nodes during sync - Copy-to-clipboard fallback for non-HTTPS connections using
document.execCommand
- @eslint/eslintrc 3.3.3 → 3.3.4
- @tailwindcss/postcss 4.2.0 → 4.2.1
- @tanstack/react-query 5.90.20 → 5.90.21
- @types/node 24.10.9 → 24.12.0
- @types/react 19.2.10 → 19.2.14
- autoprefixer 10.4.23 → 10.4.27
- axios 1.13.4 → 1.13.6
- boto3 1.38.0 → 1.42.63
- cliff 4.13.1 → 4.13.2
- community.docker 5.0.5 → 5.0.6
- eslint 9 → 10.0.3
- fastapi 0.128.0 → 0.135.1
- keystoneauth1 5.13.0 → 5.13.1
- lucide-react 0.563.0 → 0.577.0
- netbox-manager 0.20260129.0 → 0.20260211.0
- openstack-flavor-manager 0.20260127.0 → 0.20260227.0
- openstack-image-manager 0.20260128.0 → 0.20260227.0
- openstacksdk 4.9.0 → 4.10.0
- postcss 8.5.6 → 8.5.8
- setuptools 80.10.2 → 82.0.1
- sqlmodel 0.0.31 → 0.0.37
- sushy 5.9.0 → 5.10.0
- tabulate 0.9.0 → 0.10.0
- tailwind-merge 3.4.0 → 3.5.0
- tailwindcss 4.1.18 → 4.2.1
- uv 0.9.27 → 0.10.8
- uvicorn 0.40.0 → 0.41.0
list-exchangesanddelete-exchangescommands for therabbitmq3to4migration tool to manage RabbitMQ exchanges during migration
- Improved live streaming of Ansible playbook output by disabling output buffering (
PYTHONUNBUFFERED=1andstdbuf -oL)
- pynetbox 7.6.0 → 7.6.1
--cloudparameter to all compute and baremetal manage commands (default:admin)
- Migrate compute and baremetal commands to use dynamic credential handling via
setup_cloud_environment()instead ofget_cloud_connection() - OpenStack CLI commands now load passwords dynamically from secrets.yml using the
os_password_<cloud>pattern instead of relying solely on secure.yml - Credential loading falls back to /etc/openstack/secure.yml for backward compatibility when no password is found in secrets.yml
- OpenStack connection creation uses new
get_openstack_connectionhelper with proper authentication error handling - Empty secure.yml is created in /tmp when using secrets.yml to prevent SDK from reading stale credentials
- Credential loading log messages reduced from INFO to DEBUG level
- Unused
get_cloud_connectionandget_cloud_projecthelper functions
- Vault decrypt command for decrypting Ansible Vault encrypted files in-place
osism check mountcommand to detect bind mount staleness by comparing container view with a fresh mountosism check inodecommand for quick inode display of specific files in/opt/configuration--softoption toosism baremetal power offfor graceful ACPI power-off- Inventory API endpoints to query Ansible inventory data (
/v1/inventory/hosts,/v1/inventory/hosts/{host}/hostvars,/v1/inventory/hosts/{host}/factsand single-item variants) - Inventory search API endpoint (
/v1/inventory/search) with regex support for searching variables and facts across multiple hosts - Frontend inventory page with host selection panel, tabbed view for hostvars and facts, search/filter functionality, and copy-to-clipboard support
- Global search panel in inventory frontend with regex-based search across all hosts
- Initial log message before Celery task creation in apply command
- BGP_GLOBALS_AF l2vpn_evpn configuration (advertise-all-vni, advertise-svi-ip, dad-enabled) for SONIC
- BGP_GLOBALS configuration for VRFs in SONIC, copying settings from default VRF
- VRF RD (Route Distinguisher) support for SONIC interface VRF assignment when VRF name doesn't match 'vrf' pattern
- VRF support for BGP_NEIGHBOR and BGP_NEIGHBOR_AF with VRF name prefix in SONIC configuration
- Automatic VLAN creation for VRFs with Route Distinguisher (RD) in SONIC configuration
- VXLAN tunnel configuration (VXLAN_TUNNEL, VXLAN_EVPN_NVO, VXLAN_TUNNEL_MAP) for VRFs with VNI in SONIC
- L2VPN_EVPN address family to BGP_NEIGHBOR_AF for default VRF switch-to-switch connections in SONIC
- BGP_GLOBALS_AF entries with route-distinguisher and route-targets for VRFs with VNI in SONIC
- BGP_GLOBALS_ROUTE_ADVERTISE for L2VPN_EVPN address family in SONIC
- ROUTE_REDISTRIBUTE for connected route redistribution into BGP for VRFs with VNI in SONIC
- SONiC port config file for Accton-AS4630-54TE switch
- Inventory file path from
/ansible/inventory/hosts.ymlto/inventory/hosts.yml - Improved inventory frontend with type badges, alternating row backgrounds, and card layout
- Extended VRF detection to support flexible naming conventions (numeric RD or numeric VRF name) in SONIC
- Restricted l2vpn_evpn BGP configuration to switch-to-switch connections only in SONIC
- Removed unnecessary scope/family parameters from SONIC INTERFACE configuration
- Netbox dump showing wrong host when device not found by validating exact hostname match
- NetBox device query filter using correct
statusparameter instead ofstatefor ironic and sonic conductors - NetBox device query functions now properly raise exceptions instead of returning empty lists on configuration errors
- OpenStack connection error where
connvariable was not assigned whenMissingRequiredOptionsexception was raised inget_openstack_connection() - Added existence check for inventory file with proper 503 error response
- @eslint/eslintrc 3.3.1 → 3.3.3
- @eslint/js 9.39.0 → 9.39.2
- @tanstack/react-query 5.85.5 → 5.90.20
- @types/node 22.18.0 → ^24.0.0
- @types/react 19.2.9 → 19.2.10
- ansible.utils 6.0.0 → 6.0.1
- autoprefixer 10.4.21 → 10.4.23
- axios 1.12.2 → 1.13.4
- celery 5.6.0 → 5.6.2
- cliff 4.12.0 → 4.13.1
- community.docker 5.0.3 → 5.0.5
- eslint 9.39.0 → 9.39.2
- eslint-config-next 15.5.0 → 16.1.6
- fastapi 0.124.0 → 0.128.0
- ghcr.io/astral-sh/uv 0.9.15 → 0.9.27
- gitpython 3.1.45 → 3.1.46
- greenlet 3.3.0 → 3.3.1
- huey 2.5.4 → 2.6.0
- jmespath 1.0.1 → 1.1.0
- keystoneauth1 5.12.0 → 5.13.0
- kombu 5.6.1 → 5.6.2
- lightningcss 1.30.1 → 1.30.2
- lucide-react 0.542.0 → 0.563.0
- netbox-manager 0.20251120.0 → 0.20260123.0
- netbox.netbox 3.21.0 → 3.22.0
- next 15.5.0 → 16.1.6
- node 22 → 24 (container base image)
- openstack-flavor-manager 0.20251128.0 → 0.20260127.0
- openstack-image-manager 0.20251201.0 → 0.20260128.0
- openstacksdk 4.8.0 → 4.9.0
- packaging 25.0 → 26.0
- pycparser 2.23 → 3.0
- pynetbox 7.5.0 → 7.6.0
- react 19.1.1 → 19.2.4
- react-dom 19.1.1 → 19.2.4
- setuptools 80.9.0 → 80.10.2
- sqlalchemy 2.0.45 → 2.0.46
- sqlmodel 0.0.27 → 0.0.31
- tailwind-merge 3.3.1 → 3.4.0
- tailwindcss 4.1.12 → 4.1.18
- typescript 5.9.2 → 5.9.3
- uvicorn 0.38.0 → 0.40.0
- wcwidth 0.2.14 → 0.3.1
- websockets 15.0.1 → 16.0
- Add
--stuck-retry 1to all openstack-image-manager calls to reduce temporary issues with the Hetzner Objectstore by automatically retrying stuck image downloads
- fastapi 0.123.0 → 0.124.8
manage server cleancommand for cleaning up problematic servers (stuck in BUILD status for more than 2 hours or in ERROR status)manage loadbalancer listcommand to list loadbalancers with PENDING_CREATE, PENDING_UPDATE, ERROR provisioning status or ERROR operating statusmanage loadbalancer resetcommand to reset loadbalancers stuck in PENDING_UPDATE or ERROR status and trigger failovermanage loadbalancer deletecommand to delete loadbalancers stuck in PENDING_CREATE statusmanage amphora restorecommand to restore amphorae in ERROR state by triggering failovermanage amphora rotatecommand to rotate amphorae older than 30 days by triggering loadbalancer failovermanage volume repaircommand to repair volumes stuck in DETACHING, CREATING, ERROR_DELETING, or DELETING states- Magnum and Manila queue patterns to RabbitMQ 3 to 4 migration command (magnum-conductor, manila-data, manila-scheduler, manila-share)
--cloudparameter tomanage server list,manage server clean,manage server migrate, andmanage volume listcommands for consistent OpenStack connection handling- Initial CHANGELOG.md with history of notable changes
- Manage commands now use
setup_cloud_environment()andcleanup_cloud_environment()for OpenStack connections, ensuring proper cloud configuration with secure credential handling from vault - SONiC port speed override now distinguishes between explicitly set NetBox speeds (always takes precedence) and derived speeds from port type (only used if port config has no speed)
- NetBox speed values are now properly converted from kbps to Mbps for SONiC configuration
- Migration check command now dynamically discovers all vhosts from queue data instead of hardcoding "/" and "/openstack"
- SONiC port speed override when explicitly set in NetBox was being ignored when port config file had a speed configured
- Queue count display in migrate check showing incorrect counts when queues existed in vhosts other than "/" and "/openstack"
- Changelog generation script moved to osism/release repository
- celery 5.5.3 → 5.6.0
- community.docker 5.0.2 → 5.0.3
- fastapi 0.122.0 → 0.123.8
- ghcr.io/astral-sh/uv 0.9.13 → 0.9.15
- kombu 5.5.4 → 5.6.1
- openstack-image-manager 0.20251128.0 → 0.20251201.0
- New
osism migrate rabbitmq3to4command to assist with RabbitMQ 3 to 4 migration, including subcommands for listing, deleting classic queues, checking migration status, and preparing the openstack vhost with quorum queue defaults - New
osism status databasecommand to check MariaDB Galera Cluster status with extended metrics including flow control, transaction statistics, cluster member info, and general MariaDB metrics - New
osism status messagingcommand to check RabbitMQ Cluster status across all nodes with optional hostname filtering - Support for
event.samplequeue pattern in ceilometer for the migrate command
- Moved
validate databaseandvalidate messagingcommands tostatus databaseandstatus messagingrespectively - Extended
status messagingcommand to check all RabbitMQ nodes instead of only the first one - Listener queues now use RabbitMQ's configured default queue type instead of forcing classic queues, enabling compatibility with quorum queues in RabbitMQ 4
- Renamed generic queue pattern key to "notifications" in migrate command for clarity
- Refactored RabbitMQ connection code into shared
osism/utils/rabbitmq.pymodule
- Improved migration detection in
migrate rabbitmq3to4 checkwith vhost-specific queue counting for more accurate status reporting
- Sync versions command now correctly uses openstack_version from SBOM instead of CLI argument default value
- New
osism sync versions [kolla]command for synchronizing Kolla version information from SBOM container images to the configuration repository - Support for
--releaseparameter to sync Kolla versions from a specific OSISM release by fetching version data from the release repository - Configurable URLs for the release repository (
--release-repository-url) and SBOM image base path (--sbom-image-base) - Dry-run mode (
--dry-run) for previewing version synchronization without writing files - Skopeo dependency added to container image for extracting SBOM data without requiring Docker
- Improved SBOM image path detection to properly handle release versions by stripping 'v' prefix from version tags and detecting date patterns (YYYYMMDD) in version strings
- fastapi 0.121.3 → 0.122.0
- ghcr.io/astral-sh/uv 0.9.11 → 0.9.13
- openstack-flavor-manager 0.20251101.0 → 0.20251128.0
- openstack-image-manager 0.20251109.0 → 0.20251128.0
- openstacksdk 4.7.1 → 4.8.0
- sushy 5.8.0 → 5.9.0
- Periodic exchange discovery to connect to new exchanges dynamically in the listener service
- Background thread checks for new exchanges every 60 seconds
- Consumer restarts automatically when new exchanges are found
- Discovery stops automatically once all configured exchanges are available
- RabbitMQ 4 compatibility by using passive exchange declarations
- Listener now waits for OpenStack services to create exchanges instead of creating them itself
- Prevents PRECONDITION_FAILED errors when listener starts before other services
- Removed legacy fallback that could create exchanges with wrong properties
- Reverted Redis/Celery reliability improvements that were introduced to prevent task loss, restoring previous simpler configuration
- Shared session management for NetBox connections to prevent file descriptor exhaustion
- Robust exception handling for NetBox tasks with timeout resilience (handles ConnectTimeout, Timeout, ConnectionError, RequestException)
- Redis/Celery reliability improvements with configurable options:
- Visibility timeout (12h) to prevent task redelivery while running
- Task acknowledgement after completion with requeue on worker crash
- Broker heartbeat for faster connection problem detection
- Exponential backoff retry for Redis client
- Configurable task time limits (24h hard, 23h soft)
- New environment variables: CELERY_VISIBILITY_TIMEOUT, CELERY_BROKER_HEARTBEAT, CELERY_TASK_TIME_LIMIT, CELERY_TASK_SOFT_TIME_LIMIT, CELERY_BROKER_POOL_LIMIT, CELERY_REDIS_MAX_CONNECTIONS, REDIS_SOCKET_TIMEOUT, REDIS_SOCKET_CONNECT_TIMEOUT, REDIS_HEALTH_CHECK_INTERVAL
- NetBox sync lock error handling now returns success/failure status and reports failed devices at sync completion
- Worker prefetch multiplier set to 1 to prevent task hoarding
- File descriptor exhaustion in NetBox connections by implementing NetBoxSessionManager with connection pooling
- TypeError in sync_ironic caused by missing request_id parameter in push_task_output calls
- Format strings missing f-prefix in lock acquisition error messages
- task_track_started configuration from tuple (True,) to boolean True
- cliff 4.11.0 → 4.12.0
- fastapi 0.121.1 → 0.121.3
- netbox-manager 0.20251029.0 → 0.20251120.0
- sushy 5.7.1 → 5.8.0
--checkparameter forsync netboxcommand to test connectivity to all configured NetBox instances--listparameter forsync netboxcommand to display all configured NetBox instances- API connectivity checks for
sync netboxandsync ironiccommands with early exit on failure - Two-stage connectivity check for NetBox (reachability then authentication)
- Progress logging during NetBox connectivity checks
- Optional
NETBOX_NAMEandNETBOX_SITEmetadata fields for secondary NetBox instances - Redis-based semaphore for limiting concurrent NetBox connections (configurable via
NETBOX_MAX_CONNECTIONS) - Timeout support for NetBox API connections
- Renamed
--netbox-filterparameter to--filterwith support for filtering by name, site, or URL - Renamed
--force-updateparameter to--forceforsync ironiccommand - NetBox filter now applies to both primary and secondary instances before connectivity checks
- Improved error handling for NetBox state changes with unified locking and increased timeouts
- Convert Ironic power state
Noneton/afor clearer user feedback
- Race conditions in NetBox state changes with unified lock keys per device
- Missing imports and
TimeoutHTTPAdapterclass definition for NetBox connections
- community.docker 4.8.2 → 5.0.2
- New
sync netboxcommand to synchronize Ironic node states to NetBox with optional URL filtering via--netbox-filterparameter ensure_known_hosts_file()utility function inosism/utils/ssh.pyto automatically create/share/known_hostsfile if missing
- Split
sync ironiccommand into two separate commands:sync ironic(NetBox → Ironic) andsync netbox(Ironic → NetBox) - Renamed
netbox showcommand tonetbox dump - Limit Ansible Vault decryption to Custom Fields only in sync ironic instead of all node attributes
- Missing
/share/known_hostsinitialization in SSH commands causing failures in new installations - Strip whitespace from NETBOX_TOKEN to prevent authentication issues
--flush-cacheparameter from inventory reconciler sync command
- ghcr.io/astral-sh/uv 0.9.7 → 0.9.11
- New
baremetal cleancommand to erase storage devices on baremetal nodes - New
baremetal providecommand to move nodes from manageable to available state --allparameter forbaremetal cleancommand with--yes-i-really-really-mean-itsafety confirmation--allparameter forbaremetal providecommand to process all manageable nodes- Device Role column to
baremetal listcommand output, fetched from NetBox
--ironicparameter tobaremetal dumpcommand to show actual deployment state from Ironic instead of NetBox, enabling comparison between planned and deployed configurations
- Updated gardenlinux from 1877.6 to 1877.7
- Moved redfish dependency from Containerfile to project requirements
- openstack-image-manager v0.20251020.0 → v0.20251109.0
- redfish 3.3.3 → 3.3.4 (now in project requirements)
- cachetools 6.2.1 → 6.2.2
- certifi 2025.10.5 → 2025.11.12
- prettytable 3.16.0 → 3.17.0
- pynacl 1.6.0 → 1.6.1
- pytest 9.0.0 → 9.0.1
- New
osism netbox showcommand for displaying device information from NetBox with support for custom field parameters and field filtering - Device Role column to
sonic listcommand output for better visibility into switch roles - VRF support to SONiC configuration generator including VRF table extraction and interface/port channel assignments
sonic dumpcommand to output NetBox config context as JSON for a specified SONiC switchbaremetal dumpcommand to output deployment playbook for a given baremetal node- BGP configuration for VLAN interfaces with FHRP (First Hop Redundancy Protocol) support
- Detection of untagged VLAN members to route BGP peering over VLAN interfaces instead of physical interfaces
- Refactored Collections definitions in
osism/data/enums.pyto use Role class instead of nested lists for improved readability and maintainability - Provision state in
sonic listnow reads from NetBox custom field instead of deriving from device status - Updated supported Garden Linux version from 1877.2 to 1877.6
- Physical interfaces that are untagged VLAN members are now excluded from BGP_NEIGHBOR and BGP_NEIGHBOR_AF configurations
- SONiC 400G to 4x100G breakout detection for SONiC format interfaces (Ethernet0, Ethernet2, Ethernet4, Ethernet6)
- jc 1.25.5 → 1.25.6
- Cloudpod flavors to the manage flavors command
- Automatic
kolla_action_stop_ignore_missing=truefor kolla-ansible stop actions
- community.docker 4.8.1 → 4.8.2
- fastapi 0.119.1 → 0.120.4
- huey 2.5.3 → 2.5.4
- netbox-manager 0.20250915.0 → 0.20251029.0
- openstack-flavor-manager 0.20251021.0 → 0.20251101.0
- uv 0.9.4 → 0.9.7
- eslint 9.34.0 → 9.39.0
- Support for custom CONFIG DB VERSION override via
config_versioninsonic_parameterscustom field
- Port speed is now used as fallback for
valid_speedswhen not configured in port config - Optimized SONIC configuration generation performance by eliminating N+1 query problems and implementing bulk fetching strategies
- Further optimized SONIC configuration generation with global caches for metalbox devices and VIP addresses
- Validation of 6th column in port config to prevent non-numeric values (like autoneg on/off) from being incorrectly parsed as valid_speeds
- AS4625-54T port detection now correctly extracts port numbers from alias format
Eth1(Port1)using the existing_extract_port_number_from_alias()helper function instead of an inline regex that failed on non-standard alias formats
- Configurable Celery worker concurrency via
OSISM_CELERY_CONCURRENCYenvironment variable with intelligent default based on CPU count (min of cpu_count, 4) - Support for 400G to 4x100G breakout ports with 8 lanes in SONiC configuration
- Support for unencrypted secrets.yml files as development mode fallback
sync ceph-keyscommand for synchronizing Ceph keys--create-application-credential/--nocreate-application-credentialparameter to project create command- Cloudpod flavor definitions
- Use new object storage URL (
nbg1.your-objectstorage.com/osism) for Cluster API, Gardener, Gardenlinux, and Octavia image management - Use
registry.osism.cloudcache for container base image - Sync ironic maintenance state unconditionally with all netboxes during ironic sync to prevent inconsistencies
- ansible-runner 2.4.1 → 2.4.2
- fastapi 0.118.0 → 0.119.1
- ghcr.io/astral-sh/uv 0.8.23 → 0.9.4
- hiredis 3.2.1 → 3.3.0
- openstack-flavor-manager 0.20250918.0 → 0.20251021.0
- openstack-image-manager 0.20250912.0 → 0.20251020.0
- sqlmodel 0.0.25 → 0.0.27
- uvicorn 0.37.0 → 0.38.0
- Cloudpod collections (cloudpod-infrastructure, cloudpod-openstack, cloudpod-ceph) for deployment orchestration
--show-treeparameter to the apply command to display execution tree for collections without additional output- Command to manage special ClusterAPI Gardener images (
manage image clusterapi gardener) --userand--user-domainparameters to server list command to filter servers by user- Additional ID columns (User ID, Domain, Project ID) to server list command output based on filter flags
- OpenStack stress testing command (
openstack stress) - Project management commands (
manage project createandmanage project sync)
- Octavia deployment now waits for Nova deployment to complete
- Updated supported ClusterAPI Kubernetes images from 1.31, 1.32, 1.33 to 1.32, 1.33, 1.34
- Removed duplicate designate entry from cloudpod-openstack collection
- ansible-core 2.19.2 → 2.19.3
- community.docker 4.8.0 → 4.8.1
- ghcr.io/astral-sh/uv 0.8.22 → 0.8.23
- Arguments field to ansible execution tracking for capturing ansible-playbook command-line arguments in execution log records
- Host extraction from Ansible output using regex pattern matching for complete audit trail
- Ansible execution logging now includes command-line arguments passed to ansible-playbook
- Host list in execution records is now populated from actual Ansible output instead of empty placeholder
- community.docker 4.7.0 → 4.8.0
- Track all Ansible play executions in
/share/ansible-execution-history.jsonwith timestamp, runtime version, hosts, and result status
- axios 1.11.0 → 1.12.2
- fastapi 0.116.2 → 0.118.0
- ghcr.io/astral-sh/uv 0.8.18 → 0.8.22
- paramiko 3.5.1 → 4.0.0
- pyyaml 6.0.2 → 6.0.3
- uvicorn 0.35.0 → 0.37.0
- Add os_purpose to image template metadata
- fastapi 0.116.1 → 0.116.2
- ghcr.io/astral-sh/uv 0.8.17 → 0.8.18
- netbox-manager 0.20250825.0 → 0.20250915.0
- openstack-flavor-manager 0.20250912.0 → 0.20250918.0
- sqlmodel 0.0.24 → 0.0.25
- Accton-AS9726-32D to list of supported SONiC HWSKUs
- Ubuntu CAPI image management now supports current, past and future Ubuntu LTS versions (regex pattern updated to match all even-numbered Ubuntu versions)
- actions/setup-python v5 → v6
- ansible-core 2.19.1 → 2.19.2
- deepdiff 8.6.0 → 8.6.1
- ghcr.io/astral-sh/uv 0.8.13 → 0.8.17
- openstack-flavor-manager 0.20250827.0 → 0.20250912.0
- openstack-image-manager 0.20250827.0 → 0.20250912.0
- openstacksdk 4.7.0 → 4.7.1
- redfish 3.3.1 → 3.3.3
- Pagination to nodes page with 10 items per page, Previous/Next navigation, smart page number display with ellipsis, and auto-reset to page 1 when filters change
- Missing
check_task_lock_and_exitfunction in conductor utils that caused AttributeError inosism.tasks.conductor.sync_ironictask
- lucide-react 0.541.0 → 0.542.0
- Cloud profile password support to image manager with automatic loading from encrypted secrets.yml
- Garden Linux image management command (
osism manage image gardenlinux) - Local flavor definitions file with SCS mandatory flavors
- Task lock/unlock functionality to prevent new task execution with
osism lock,osism unlock, andosism lock statuscommands - Redis-based task locking mechanism with metadata storage (user, timestamp, reason)
- Lock checks at all main Celery task entry points and worker startup
- Command-level lock checks for immediate user feedback when tasks are locked
- Cloud authentication now uses file-based approach with temporary secure.yml instead of environment variables
- Extracted cloud configuration logic into reusable helper functions for OpenStack tasks
- Applied cloud authentication to flavor_manager task
- Default flavor definitions changed from 'scs' to 'local'
- Default lock user changed from current system user to "dragon"
- Added *.swp to .gitignore
- Password values are now properly converted to strings in cloud authentication
- Garden Linux image build date handling uses actual dates instead of null placeholder
- Removed leftover ignore_env parameter from ImageOctavia command
- openstack-image-manager 0.20250508.0 → 0.20250827.0
- openstack-flavor-manager 0.20250413.0 → 0.20250827.0
- prompt-toolkit 3.0.51 → 3.0.52
- @types/react 19.1.11 → 19.1.12
- @types/react-dom 19.1.7 → 19.1.8
- Migrate Renovate config from
fileMatchtomanagerFilePatterns
- Alignment in the baremetal nodes table in the frontend
- ansible-core 2.19.0 → 2.19.1
- ara 1.7.2 → 1.7.3
- netbox-manager 0.20250823.0 → 0.20250825.0
- @types/node 22.17.2 → 22.18.0
I'll now create the merged changelog entry based on the batch provided:
- Name-based sorting with reversible direction (A-Z/Z-A) for the nodes list in frontend
- Created_at and updated_at timestamp display in baremetal nodes list
- Improved baremetal nodes layout using CSS Grid for consistent column alignment
- Moved Power and Provision status badges to header row (right-aligned)
- Removed resource class field from node information display
- Baremetal node IDs now correctly use attribute access for OpenStack SDK Resource objects instead of dict access
- Real-time Events tab with Redis-based event streaming for Baremetal events
- WebSocket endpoint
/v1/events/openstackfor real-time streaming of all OpenStack events - WebSocket connection manager with support for event filtering by service type, event type, and resource name
- WebSocket connection with custom useWebSocket hook for event streaming
- RabbitMQ listener support for multiple OpenStack services (Nova, Neutron, Cinder, Glance, Keystone, Ironic)
- Real-time event broadcasting from RabbitMQ notifications to WebSocket clients
- Redis-based event bridge for cross-container communication
- Event filtering by event types and node names
- UI components for events: EventsList, EventsFilters, ConnectionStatus
- Event pause/resume, auto-reconnection, and live event counters
- TypeScript types for OpenStack and Baremetal events
- WebSocket CORS headers and Redis pub/sub integration
- Maintenance state filter (All/Active/Maintenance) to baremetal nodes page
- Health check endpoint at
/api/healthfor frontend service - Runtime configuration endpoint at
/api/configfor dynamic environment variable reading
- Default API URL for frontend changed from
http://localhost:8000tohttp://api:8000 - Frontend API URL environment variable renamed from
NEXT_PUBLIC_API_URLtoNEXT_PUBLIC_OSISM_API_URL - Frontend now supports runtime API URL configuration via
/api/configendpoint - Node.js base image updated from v18 to v22 in frontend Containerfile
- PostCSS configuration updated to use
@tailwindcss/postcssplugin (preparation for Tailwind CSS 4)
- Made
uuidandmaintenancefields optional in BaremetalNode model to handle incomplete data - Improved null safety in node search filtering logic to prevent client-side errors
- Recent Nodes section from frontend landing page
- @tailwindcss/postcss 4.1.12 (new)
- @tanstack/react-query 5.84.2 → 5.85.5
- @types/node 20.19.10 → 22.17.2
- @types/react 19.1.9 → 19.1.11
- date-fns 4.1.0 (new)
- eslint 9.33.0 → 9.34.0
- eslint-config-next 15.4.6 → 15.5.0
- lucide-react 0.539.0 → 0.541.0
- next 15.4.6 → 15.5.0
- tailwindcss 3.4.17 → 4.0.0
- websockets 15.0.1 (new)
- IPv4 address support for SONiC switch port configuration with automatic address assignment from NetBox
manage baremetal burnincommand to trigger burn-in of baremetal nodes with CPU, memory, and disk stress testsbaremetal burninalias command for conveniencemanage baremetal maintenance setandmanage baremetal maintenance unsetcommands- Support for "clean failed" state in Ironic sync to recover nodes from failed burn-in
- 4x10G breakout mode for SONiC interface configuration
/v1/baremetal/nodesAPI endpoint returning all Ironic-managed baremetal nodes- Transfer role IPv4 interfaces included in BGP neighbor configuration with dual-stack support
- Next.js frontend application with dashboard, nodes, and services pages, including API integration and Docker configuration
- SONiC IPv4 interface configuration now uses proper scope and family parameters instead of admin_status
- Output of
openstack.baremetal_node_listtask returns full node objects instead of formatted dict - BGP detection excludes interfaces with direct IPv4 addresses (non-transfer role)
- BGP neighbor configuration sets v6only=false for transfer role IPv4 interfaces
- Skip ipv6_unicast BGP configuration for transfer role IPv4 interfaces
- Reverted support for multiple IPv4 addresses per interface in NetBox integration, returning to single IPv4 address behavior
- Generated SONiC configuration now includes VERSION database entry and base interface entries
- NETBOX_TOKEN is now always converted to string type to prevent type errors
- Port speed detection for 4x25G breakout mode (was incorrectly checking for 50000 instead of 25000)
- cliff 4.10.0 → 4.11.0
- community.docker 4.6.2 → 4.7.0
- keystoneauth1 5.11.1 → 5.12.0
- netbox-manager 0.20250803.0 → 0.20250823.0
- react 19.1.0 → 19.1.1
- react-dom 19.1.0 → 19.1.1
- sushy 5.7.0 → 5.7.1
- uv 0.8.4 → 0.8.13
osism baremetal deploycommand for deploying baremetal infrastructureosism baremetal listcommand for listing baremetal nodesosism baremetal pingcommand for connectivity testingosism baremetal undeploycommand for removing baremetal deploymentsosism sonic listcommand to display SONiC switches with name, OOB IP, primary IP, HWSKU, version, and provision state
- Centralize SSH known_hosts file management to
/share/known_hostsacross compose, console, container, log, and sonic commands - Filter out underscore-prefixed keys in SONiC device configuration context
- Use psql table format for
sonic listcommand output
- Remove duplicate SSH known_hosts cleanup log messages
- ssh-keygen availability check that failed with exit code 1 due to
ssh-keygen --helpreturning non-zero
- netbox-manager 0.20250622.1 → 0.20250803.0
- SONiC ZTP (Zero Touch Provisioning) command for status check, enable, and disable operations
- SONiC reboot command for remotely rebooting switches
- SONiC factory reset command using ONIE uninstall mode with safety confirmation
- SONiC show command for executing arbitrary show commands on switches
- SONiC console command for interactive SSH access to switches
- SONiC backup command for configuration backup without modifications
- SONiC load command to load configuration without service restart
- SONiC reload command to load configuration with service restart
- Unified Metalbox IP lookup for DNS and NTP server configuration in SONiC
- DNS_NAMESERVER configuration support for SONiC switches
- Automatic provision_state update to 'ztp' in NetBox after SONiC factory reset
- Refactor sonic command to dedicated module (
osism.commands.sonic) - Refactor sonic commands into separate
loadandreloadsubcommands for better clarity - Renamed
manage soniccommands tosonic(e.g.,osism manage sonic backup→osism sonic backup) - Renamed API endpoint
/v1/switchesto/v1/sonic - ZTP command now uses positional action argument (
status,enable,disable) instead of--enable/--disableflags - ZTP status check now uses
show ztp statusinstead ofsudo config ztp status - Show command parameter is now optional to display available commands when omitted
- Centralize Redlock creation with output suppression via new
utils.create_redlock()method - Improve pottery logger output suppression in
create_redlockby setting logger level to CRITICAL - Suppressed paramiko logging messages in sonic commands
- cryptography 45.0.4 → 45.0.5
- fastapi 0.115.14 → 0.116.0
- ghcr.io/astral-sh/uv 0.7.17 → 0.7.19
- transitions 0.9.2 → 0.9.3
- Redfish management command
osism manage redfish listsupporting EthernetInterfaces, NetworkAdapters, and NetworkDeviceFunctions resource types - Configurable Redfish connection timeout via
REDFISH_TIMEOUTenvironment variable - Script
redfishMockupCreate.pyfor creating Redfish mockups from live systems --formatparameter toosism manage redfish listcommand supporting table (default) and JSON output formats--columnparameter toosism manage redfish listcommand for dynamic column selection in both table and JSON output- Integrated NetBox local_context_data as default variables in baremetal playbook generation
- Added osism.commons.operator role to baremetal bootstrap playbook
- Refactored
sync_ironicby extracting node attributes preparation into separate_prepare_node_attributesmethod - Improved error handling in conductor configuration when resolving image and network IDs
- Simplified Redfish EthernetInterfaces output by removing unused fields (full_duplex, auto_neg, vlan, vlans, state)
- Removed status column from redfish list output for network adapters and device functions
- Refactored redfish column filtering with centralized column mapping management
- Skip UUID resolution for image URLs in conductor configuration, allowing external HTTP image sources for Ironic deployments
- Improved error handling in
_get_network_device_functionsfor NetworkAdapter processing - Removed redundant instance_info restore during baremetal undeploy
- ghcr.io/astral-sh/uv 0.7.16 → 0.7.17
- redfish 3.3.1 (new)
- validators 0.35.0 (new)
- Refactored API endpoints with proper error handling, HTTP exception handling, Pydantic Field descriptions, and OpenAPI documentation
- Extracted device search logic into reusable
find_device_by_identifierfunction in API - Added structured logging configuration with proper logger hierarchy for API server
- Configured CORS middleware with specific allowed methods and headers
- Moved
playbooks.pyandenums.pyfromosism.coretoosism.datapackage
- Fixed TypeError in
switches_ztp_completeby converting RecordSet to list before indexing
- Removed unused
osism/actionsmodule - Removed unused
osism/pluginsmodule - Removed
osism/corepackage (moved contents toosism/data)
- uvicorn 0.34.3 → 0.35.0
- ghcr.io/astral-sh/uv 0.7.15 → 0.7.16
- New
manage soniccommand for SONiC switch configuration management via SSH - Support for Eth(Port) alias format in SONiC port alias mapping (e.g., Eth1(Port1) → Ethernet0)
- Accton-AS4625-54T to supported SONiC HWSKUs list
- POST
/v1/switches/{identifier}/ztp/completeendpoint for SONiC ZTP completion with provision state update - Global NTP parameters configuration for SONiC switches
- Device-specific NTP server assignment for SONiC switches based on OOB network connection
- Breakout owner and port metadata fields to SONiC breakout port configurations
--flush-cacheparameter toosism sync inventorycommand to force cache flush during synchronization
- API endpoints now include
/v1prefix (e.g.,/meters/sink→/v1/meters/sink) - SONiC interface to alias conversion now uses port config for accurate alias generation
- Replace HWSKU with serial number as identifier in
/v1/switches/{identifier}/ztp/completeendpoint for simpler device lookup - Remove loopback BGP neighbors from SONiC configuration generation to prevent routing issues
- SONiC port channel peer type detection for single device configurations now correctly identifies internal peers
- SONiC spine group detection for single device config generation now considers all spine/superspine devices
- Baremetal ports are now always created during Ironic sync, not only for PXE boot interfaces
- netmiko dependency (no longer needed)
- ghcr.io/astral-sh/uv 0.7.13 → 0.7.15
- netbox-manager 0.20250621.0 → 0.20250622.1
- paramiko 3.5.0 → 3.5.1
- fastapi 0.115.13 → 0.115.14
- Save instance_info on baremetal undeploy to preserve deployment parameters
- Maintenance mode detection to baremetal deploy command
manage dnsmasqcommand to apply dnsmasq role in infrastructure environmentmanage ironicandmanage soniccommand aliases for sync operations- Device-specific sync support to SONiC sync command (
osism sync sonic <device>) --diff/--no-diffparameter to SONiC sync command to show configuration differences- First-time configuration hints to SONiC sync output when no previous config exists
- Real-time device progress output to SONiC sync command
- Diff checking to SONiC configuration export functions with detailed logging
- Configuration diff saved to NetBox device journal when changes are detected
- Hostname symlinks when exporting SONiC configurations with serial number identifiers
- Configurable identifier (hostname or serial number) for SONiC ZTP export file naming via SONIC_EXPORT_IDENTIFIER setting
- Accton-AS5835-54X port configuration for SONiC
- Optional valid_speeds column support for SONiC port configuration files
- Management interfaces (mgmtTenGigE) to Accton-AS7326-56X and Accton-AS7726-32X port configs
- Management interfaces (tenGigE33/34) to Accton-AS9716-32D port config
- ZTP mode configuration (inband/out-of-band, IPv4/IPv6) to default SONiC config
- TELEMETRY gnmi section to default SONiC config
- MGMT_PORT eth0 configuration to default SONiC config
- ROUTE_REDISTRIBUTE configuration for connected routes to BGP
- Superspine device role to supported SONiC device roles
- Group-based AS calculation for interconnected spine/superspine switches using BFS algorithm
- Port channel (LAG) support to SONiC configuration generation with PORTCHANNEL, PORTCHANNEL_INTERFACE, and PORTCHANNEL_MEMBER sections
- InterfaceCache class with thread-local storage for device interfaces in SONiC configuration
- Device-specific port configuration mapping for interface name conversion
- Global caching for NTP servers and port configurations to reduce API calls
- Comprehensive breakout port detection and handling with device-specific logic
- Cache management functions for clearing caches during sync operations
- New
connections.pymodule with centralized connection detection helpers for SONiC - Port Channel device support to SONiC peer type detection
- Refactor SONiC conductor module into modular subdirectory structure with separate files for constants, device helpers, interface conversion, BGP, config generation, exporting, and sync operations
- SONiC configuration storage from config context to device local context in NetBox
- Configuration files are now only written when content has actually changed
- Refactored SONiC connection detection to use NetBox's connected_endpoints API instead of legacy cable-based detection
- SONiC export identifier default changed from hostname to serial-number
- BGP neighbors are now configured on port channel interfaces instead of individual member interfaces
- Set BGP peer_type to internal for neighbors with matching AS numbers (enables automatic iBGP vs eBGP detection)
- Set BGP
always_compare_medto true in base SONiC configuration - Add
intf_naming_mode: standardto SONiC device metadata configuration - Add
default_config_profileandfrr_mgmt_framework_configto DEVICE_METADATA - BGP max_ebgp_paths and max_ibgp_paths increased from 1 to 2 in default SONiC config
- Added ibgp_equal_cluster_length setting to BGP address families
- SONiC port channel fast_rate setting from "false" to "true" for improved LACP convergence
- Sorted and reorganized keys in
files/sonic/config_db.json - Moved static DEVICE_METADATA to
files/sonic/config_db.json - Updated Accton-AS5835-54T port config with valid_speeds column and corrected index values
- Updated Accton-AS7326-56X port config with valid_speeds column, 0-based indexing, and corrected alias naming
- Updated Accton-AS7726-32X port config with valid_speeds column
- Updated Accton-AS9716-32D port config with valid_speeds and fec columns
- SONiC database version configuration (VERSIONS.DATABASE) from generated config
- REQUIRED_CONFIG_SECTIONS constant from SONiC conductor (sections are now handled dynamically)
- deepdiff (new dependency for configuration comparison)
- fastapi 0.115.12 → 0.115.13
- netbox-manager 0.20250529.1 → 0.20250621.0
- New
sync soniccommand for SONiC configuration preparation - SONiC port configuration files for Edgecore switches:
- Accton-AS5835-54T (48x10G + 6x100G ports)
- Accton-AS7326-56X (48x25G + 8x100G ports)
- Accton-AS7726-32X (32x100G ports)
- Accton-AS9716-32D (32x400G ports)
get_port_configmethod for parsing SONiC HWSKU configuration files- Task output streaming to ironic sync command with
--task-timeoutoption - SONiC device filtering based on NETBOX_FILTER_CONDUCTOR_SONIC, device roles, 'managed-by-osism' tag, and HWSKU configuration
- SONiC config.json generation with DEVICE_METADATA, PORT, LOOPBACK, and FEATURE sections
- Helper functions for device metadata extraction (platform, hostname, MAC address)
- SONiC version support with DEFAULT_SONIC_VERSION constant and VERSIONS section
- NetBox config context storage for generated SONiC configurations
- Dynamic admin_status based on interface cable connections in NetBox
- Management interface (eth0) configuration with OOB IP address
- Comprehensive VLAN configuration support including VLAN, VLAN_MEMBER, and VLAN_INTERFACE sections
- Support for tagged/untagged VLANs and VLAN interfaces (SVIs) with multiple IP addresses
- Loopback interface configuration generation from NetBox virtual interfaces with IPv4/IPv6 support
- NetBox to SONiC interface name conversion with speed-based port multipliers
- Breakout port support with automatic detection and BREAKOUT_CFG/BREAKOUT_PORTS generation
- Base configuration template support using /etc/sonic/config_db.json
- IPv6 link-local only mode configuration for connected non-management interfaces
- BGP configuration support:
- BGP_GLOBALS with router_id from device primary IP
- Automatic local ASN calculation from IPv4 addresses
- BGP_GLOBALS_AF_NETWORK for Loopback0 devices
- BGP_NEIGHBOR for connected interfaces with external peer type
- Dual BGP neighbor configuration with interface-based and IP-based entries
- Address family configuration for IPv4 and IPv6 unicast
- Port type to speed mapping covering RJ45, optical, CX4, and virtual types (100Mbps to 400Gbps)
- Default port parameters (adv_speeds, autoneg, link_training, unreliable_los)
- NTP_SERVER configuration from manager and metalbox devices
- SONiC configuration export to local files with configurable directory, prefix, and suffix
- Bootstrap playbook generation for baremetal node config drives
- Refactored task output streaming into helper functions in
osism.utils(fetch_task_output,push_task_output,finish_task_output) - Standardized "NetBox" capitalization in comments and logging messages
- Refactored SONiC functionality into dedicated sonic.py module
- PORT entries in SONiC configuration are now naturally sorted
- Extracted get_device_oob_ip() to shared netbox.py module
- Renamed
NETBOX_FILTER_CONDUCTORtoNETBOX_FILTER_CONDUCTOR_IRONICfor clarity - Renamed
get_nb_device_query_list()toget_nb_device_query_list_ironic()for consistency - SONiC configuration generation now preserves existing config_db.json sections
- Management-only interfaces are now excluded from connected interface detection
- SONiC port aliases now use correct NetBox-style notation based on port speed and breakout status
- Use device.role instead of device.device_role for NetBox API compatibility
- DEFAULT_SONIC_ROLES names corrected to match NetBox slug format
- NetBox oob_ip usage to handle direct CIDR notation return value from pynetbox
- community.docker 4.6.0 → 4.6.1
- ghcr.io/astral-sh/uv 0.7.11 → 0.7.13
- keystoneauth1 5.11.0 → 5.11.1
- kubernetes 32.0.1 → 33.1.0
- cdrkit added to container image for config drive generation
- Validate docker version command for checking Docker versions across nodes
- STDIN support for vault password set command, enabling piping passwords directly (e.g.,
echo password | osism vault password set) - Templating support for Ironic driver passwords from NetBox secrets using
remote_board_password - Templating support for Ironic driver usernames from NetBox secrets using
remote_board_username - Resolution of
image_sourcenames to UUIDs in conductor config, following the same pattern as deploy_kernel and deploy_ramdisk
- Refactored conductor.py into smaller focused modules (config.py, netbox.py, ironic.py, utils.py) for better maintainability
- BREAKING: Baremetal deploy/undeploy commands now use positional arguments instead of
--nameparameter (e.g.,osism baremetal deploy <node>instead ofosism baremetal deploy --name <node>) - Image name to UUID conversion in conductor config now skips values that are already valid UUIDs, reducing unnecessary API calls
- AttributeError when NetBox device secrets field is None
- deep_decrypt now properly handles None values and list/array structures
- ghcr.io/astral-sh/uv 0.7.9 → 0.7.11
- openstacksdk 4.5.0 → 4.6.0
- Reduce the reconciler sync timeout to 300 seconds
- Allow to change task timeout via OSISM_TASK_TIMEOUT environment variable
- Suppress "Registering Redlock" log messages during Ansible task locking
- celery 5.5.2 → 5.5.3
- kombu 5.5.3 → 5.5.4
- uvicorn 0.34.2 → 0.34.3
- ghcr.io/astral-sh/uv 0.7.8 → 0.7.9
- Command to list baremetal nodes (
manage baremetal list) - Command to deploy baremetal nodes (
manage baremetal deploy) - Command to undeploy baremetal nodes (
manage baremetal undeploy) - Metadata (netplan_parameters, frr_parameters) to baremetal node sync from NetBox
- NetBox task to get addresses by device and interface
- NetBox manage command now uses the netbox-manager's new 'run' subcommand
- Typo in baremetal deploy/undeploy confirmation messages
- netbox-manager 0.20250525.0 → 0.20250529.1
- setuptools 80.8.0 → 80.9.0
- Cold migration support for
osism manage compute migratecommand, automatically migrating instances in SHUTOFF state with automatic resize confirmation - New
--no-cold-migrationparameter to skip cold migration and preserve previous behavior - New
osism manage compute migration listcommand to list and filter migrations by host, server, user, project, status, type, and date range - New
sync netboxcommand (placeholder for future implementation)
- Renamed internal task
sync_netbox_with_ironictosync_ironicfor clarity - Renamed
NETBOX_FILTER_LISTtoNETBOX_FILTER_CONDUCTORfor configuration clarity - Updated warning in
--no-waitparameter description to note that cold migrated instance resizes will not be confirmed - Improved migration status messages to show migration type (live/cold)
- Add Redis locks to prevent duplicate periodic task registration when multiple workers start up
- Make periodic inventory reconciler configurable (set
INVENTORY_RECONCILER_SCHEDULE = 0to disable) - Make periodic ansible facts gathering configurable (set
GATHER_FACTS_SCHEDULE = 0to disable) - Add missing type annotations to LogConfig in API module
- Cleanup ansible requirements, removing unused collections
- pydantic from direct requirements (now pulled in as transitive dependency)
- ansible-core 2.18.5 → 2.18.6
- cliff 4.9.1 → 4.10.0
- cloud.common 4.0.0 → 4.1.0
- community.general 10.6.0 → 10.7.0
- ghcr.io/astral-sh/uv 0.7.6 → 0.7.8
- hiredis 3.1.1 → 3.2.1
- keystoneauth1 5.10.0 → 5.11.0
- kubernetes.core 5.2.0 → 5.3.0
- netbox-manager 0.20250508.0 → 0.20250525.0
- pydantic 1.10.22 → 2.11.4
- pynetbox 7.4.1 → 7.5.0
- setuptools 80.4.0 → 80.8.0
- sqlalchemy 2.0.40 → 2.0.41
- sushy 5.5.0 → 5.6.0
- uv 0.7.3 → 0.7.8
- New
netboxcommand as an nbcli wrapper with support for info, search, filter, and shell console types - Added
nbclito requirements for NetBox CLI support
- Renamed environment variable
OSISM_CONDUCTOR_NETBOX_FILTER_LISTtoNETBOX_FILTER_LISTfor conductor configuration - Renamed
netbox pingcommand toget versions netbox - Renamed logger name from
mycoolapptoosismin API logging configuration - Improved task logging by adding descriptive labels to task IDs for better traceability
- Added support for
NETBOX_URLas alternative environment variable forNETBOX_API - Use container image cache (
registry.osism.tech/dockerhub/python) as base image - Allow override of ironic parameters in NetBox using custom field
ironic_parameterswith recursive merge and vault decryption support - Updated supported Cluster API Kubernetes images to versions 1.31, 1.32, and 1.33 (removed 1.30)
- Refactored conductor tasks to use dedicated functions (
get_configuration()andget_nb_device_query_list()) instead of initializing in worker process init - Increased Redlock auto-release time from 60 to 600 seconds and acquire timeout from 20 to 120 seconds for Ironic sync
- Fixed handling of NETBOX_FILTER_LIST environment variable by moving query list generation to a dedicated function
- Fixed null pointer exception when device.oob_ip is None during Ironic sync
- Removed
netbox synccommand - Removed
sync_inventory_with_netboxreconciler task - Removed
nornirandnornir-ansiblefrom requirements (never integrated) - Removed usage of deprecated NetBox custom fields
oob_type,oob_address, andoob_port
- community.grafana 2.1.0 → 2.2.0
- deepdiff 8.4.2 → 8.5.0
- hiredis 3.1.0 → 3.1.1
- jc 1.25.4 → 1.25.5
- netbox-manager v0.20250314.0 → 0.20250508.0
- openstack-image-manager 0.20250423.0 → 0.20250508.0
- python 3.13.2 → 3.13.3
- setuptools 80.3.1 → 80.4.0
- uv 0.7.2 → 0.7.3
- Netbox/Ironic sync no longer creates Nova flavors for baremetal nodes since Nova is not used for baremetal provisioning
- celery 5.5.1 → 5.5.2
- community.crypto 2.26.0 → 2.26.1
- community.docker 4.5.2 → 4.6.0
- ghcr.io/astral-sh/uv 0.6.16 → 0.7.2
- setuptools 79.0.1 → 80.3.1
- Configuration parameter for a list of NetBox filters to define subsets of devices for Ironic synchronization
- Option to list all volumes of a specific project or domain
- Option to list all servers of a specific project or domain
- Support for updating multiple NetBox instances via
NETBOX_SECONDARIESenvironment variable
- Always use a cloud profile when managing the Octavia image
- NetBox API initialization is no longer performed on startup events, using a centralized connection helper instead
- ansible-core 2.18.4 → 2.18.5
- ansible.netcommon 7.2.0 → 8.0.0
- ansible.utils 5.1.2 → 6.0.0
- celery 5.5.0 → 5.5.1
- community.general 10.5.0 → 10.6.0
- ghcr.io/astral-sh/uv 0.6.12 → 0.6.16
- kombu 5.5.2 → 5.5.3
- openstack-flavor-manager 0.20250314.0 → 0.20250413.0
- openstack-image-manager 0.20250407.0 → 0.20250423.0
- openstacksdk 4.4.0 → 4.5.0
- prompt-toolkit 3.0.50 → 3.0.51
- pydantic 1.10.21 → 1.10.22
- setuptools 78.1.0 → 79.0.1
- uvicorn 0.34.0 → 0.34.2
- Add openstack-core collection for streamlined OpenStack deployment
- Add CAPI 1.32 image support
- Revise the Netbox Ironic integration with new synchronization approach and simplified state management
- Run letsencrypt after the loadbalancer in deployment sequence
- Allow power state to be None during removal of nodes from ironic
- Remove
redfish_portfrom netbox/ironic sync as the redfish driver does not have this attribute
- Remove CAPI 1.29 image support
- Remove
manage_device.pyandmanage_interface.pyaction modules (functionality moved to tasks)
- celery 5.4.0 → 5.5.0
- ghcr.io/astral-sh/uv 0.6.11 → 0.6.12
- kubernetes.core 5.1.0 → 5.2.0
- openstack-image-manager 0.20250314.0 → 0.20250407.0
- Stress validation playbook to osism-ansible environment
- Switch container base image from Debian slim to Alpine
- Refactor to use centralized netbox, redis, and openstack connections from utils module
- Remove netbox image build and SBOM push from build playbook
- Fix tini entrypoint path for Alpine image (
/sbin/tiniinstead of/usr/bin/tini)
- ansible.netcommon 7.1.0 → 7.2.0
- kombu 5.5.1 → 5.5.2
- pytest-testinfra 10.1.1 → 10.2.2
- uv 0.6.10 → 0.6.11
--parallelparameter to netbox manage command for parallel file processing--deleteparameter tomanage imagescommand for deleting images--no-waitparameter to image and flavor management commands
- Refactored image and flavor manager to use Celery tasks instead of subprocess calls
- Switched container build from pip to uv package manager
- Upgraded Python version from 3.12 to 3.13
- Simplified Containerfile by removing multi-stage build
--limitparameter in netbox manage command now works correctly- Removed unnecessary kombu workaround (fix included in kombu 5.5)
- Old
netboxcommand (deprecatednetbox:Runclass)
- ansible-core 2.18.3 → 2.18.4
- ansible-runner 2.4.0 → 2.4.1
- community.docker 4.5.1 → 4.5.2
- community.general 10.4.0 → 10.5.0
- community.mysql 3.12.0 → 3.13.0
- deepdiff 8.3.0 → 8.4.2
- fastapi 0.115.11 → 0.115.12
- huey 2.5.2 → 2.5.3
- kombu 5.5.0 → 5.5.1
- pottery 3.0.0 → 3.0.1
- setuptools 76.0.0 → 78.1.0
- uv 0.6.9 → 0.6.10
- Integration with netbox-manager for NetBox device and configuration management
- Replace NetBox subcommands with netbox-manager package
- NetBox import script (
files/import/main.py) - NetBox action modules (check_configuration, deploy_configuration, diff_configuration, generate_configuration)
- NetBox CLI subcommands (manage, generate, deploy, diff, check, reconcile, import, sync, disable, enable, init, connect)
- osism-netbox Docker image stage from Containerfile
- kombu 5.4.2 → 5.5.0
- openstack-flavor-manager 0.20241216.0 → 0.20250314.0
- openstack-image-manager 0.20241216.0 → 0.20250314.0
- openstacksdk 4.2.0 → 4.4.0
- REST API endpoint for baremetal notifications at
/notifications/baremetalto allow sending baremetal notifications to another osism manager OSISM_API_URLsetting for configuring remote notification forwardingBaremetalEventsclass for handling baremetal notification events with structured handler lookup
- Refactored notification handling in listener service to use reusable
BaremetalEventsclass instead of inline event handling - Notifications can now be forwarded to a remote OSISM API with retry logic (up to 3 attempts with exponential backoff)
- ansible-core 2.18.2 → 2.18.3
- cliff 4.8.0 → 4.9.1
- community.crypto 2.24.0 → 2.26.0
- community.docker 4.3.1 → 4.5.1
- community.general 10.3.0 → 10.4.0
- deepdiff 8.2.0 → 8.3.0
- fastapi 0.115.7 → 0.115.11
- jinja2 3.1.5 → 3.1.6
- keystoneauth1 5.9.1 → 5.10.0
- kubernetes 32.0.0 → 32.0.1
- netbox.netbox 3.20.0 → 3.21.0
- pip 25.0 → 25.0.1
- setuptools 75.8.0 → 76.0.0
- sqlmodel 0.0.22 → 0.0.24
- sushy 5.4.0 → 5.5.0
- Use dtrack.osism.tech instead of osism.dtrack.regio.digital for Dependency-Track server
- ansible-core 2.18.1 → 2.18.2
- clustershell 1.9.2 → 1.9.3
- community.crypto 2.22.3 → 2.24.0
- community.docker 4.2.0 → 4.3.1
- community.general 10.1.0 → 10.3.0
- community.mysql 3.11.0 → 3.12.0
- containers.podman 1.16.2 → 1.16.3
- deepdiff 8.1.1 → 8.2.0
- dtrack-auditor 1.4.0 → 1.5.0
- fastapi 0.115.6 → 0.115.7
- gitpython 3.1.43 → 3.1.44
- jinja2 3.1.4 → 3.1.5
- kubernetes 31.0.0 → 32.0.0
- kubernetes.core 5.0.0 → 5.1.0
- nornir 3.4.1 → 3.5.0
- openstack.cloud 2.3.1 → 2.4.1
- pip 24.3.1 → 25.0
- prompt-toolkit 3.0.48 → 3.0.50
- pydantic 1.10.19 → 1.10.21
- setuptools 75.6.0 → 75.8.0
- sushy 5.3.0 → 5.4.0
- netbox-manager dependency due to incompatible Ansible version requirements across container images
- Wait for PyPI script now correctly handles grep exit code and version prefix stripping
- netbox-manager to requirements for NetBox management functionality
- PyPI version check now uses curl and jq instead of pip for faster and more reliable package availability verification
- community.rabbitmq 1.3.0 → 1.4.0
- openstack.cloud 2.3.0 → 2.3.1