-
Notifications
You must be signed in to change notification settings - Fork 47
Version Updates
Broker now includes a native Paramiko backend as an alternative SSH connection method. This new backend provides robust SSH connectivity with support for multiple key types (RSA, DSS, ECDSA, Ed25519), SSH agent authentication, and automatic host key management. The Paramiko backend can be selected by setting the BROKER_SSH_BACKEND environment variable to paramiko.
Key capabilities:
- Support for password and key-based authentication
- SSH agent integration for passwordless connections
- Automatic host key acceptance and management
- Interactive shell support with PTY
- File transfer via SCP and SFTP
- Remote file copying between hosts
Install with: uv install broker[paramiko] or pip install broker[paramiko]
Broker now supports OpenStack as a provider for provisioning and managing virtual machines. The OpenStack provider integrates with the OpenStack SDK to offer flexible VM lifecycle management with support for templates, multiple authentication methods, and resource discovery.
Key features:
- Multiple authentication methods: clouds.yaml configuration, application credentials, or username/password
- Template-based VM provisioning for repeatable deployments
- Resource discovery for images, flavors, and networks
- Automatic IP address detection for both floating and fixed IPs
- Configurable timeouts and default parameters
Install with: uv install broker[openstack] or pip install broker[openstack]
Configuration example:
OpenStack:
auth_url: "https://openstack.example.com:5000/v3"
username: "your-username"
password: "your-password"
project_name: "your-project"
default_image: "RHEL-9.5"
default_flavor: "m1.large"
default_network: "provider-network"
templates:
rhel9:
image: "RHEL-9.5"
flavor: "m1.large"
network: "provider-network"
key_name: "my-keypair"Broker now supports passing isolated settings objects to provider instances instead of relying solely on global settings. This change enables better testing practices and allows for multiple Broker instances with different configurations to coexist in the same process. The global settings behavior remains the default, ensuring backward compatibility.
This enhancement affects the internal architecture and is particularly useful for:
- Running parallel Broker operations with different configurations
- Testing scenarios requiring isolated environments
- Library usage where multiple callers need independent settings
The configuration system has been improved with several user-facing changes:
- Added
BROKER_NO_GLOBAL_CONFIGenvironment variable to disable global configuration file requirements - Configuration migrations now properly skip example migration files
- Added migration support for AnsibleTower's
dangling_behaviorsetting (defaults to "checkin") - Improved validation error messages and configuration setup guidance
The AnsibleTower provider includes several enhancements:
-
Dangling Host Handling: Automatic detection and management of hosts left behind by failed workflows. Configure behavior with the
dangling_behaviorsetting: "checkin" (default), "store", or "prompt" - Rich Output Formatting: Provider help commands now display information in formatted tables for better readability
- Lazy Import: awxkit is now imported only when the AnsibleTower provider is first used, reducing startup time and avoiding unnecessary dependencies
- AAP 2.5+ Support: Improved detection and configuration for Ansible Automation Platform 2.5 and later versions
- Flavor Discovery: Added support for listing available VM flavors through the provider help system
The GitHub Actions workflows have been reorganized for better efficiency:
- Split the CodeQL workflow into separate code quality and security analysis jobs
- Implemented conditional test execution based on changed files to reduce CI runtime
- Added service container support for SSH backend testing
- Updated the release workflow to use uv's native build and publish commands
- Added dedicated testing for each SSH backend (hussh, paramiko, ssh2-python)
The create_container method now accepts a net_name parameter directly, allowing for more flexible network configuration without modifying global settings. Network configuration can be specified per-container or through provider-level defaults.
Provider visibility is now determined by checking if the provider is configured in settings rather than relying on a hidden attribute. This provides more intuitive behavior where unconfigured providers are automatically excluded from CLI help output. Providers with configurations present will be shown regardless of their implementation.
-
simple_retrynow supports terminal exceptions that should not be retried - Added
dict_to_tablehelper for converting dictionaries to rich formatted tables - Enhanced
dictlist_to_tablewith optional header display control - Improved inventory management with better path handling
- Fixed an issue in the ssh2-python backend where file stat operations could fail due to improper Path object handling
- Corrected container wait condition from "excited" to "exited" in
run_wait_container - Fixed typo in convert_pseudonamespaces function documentation ("PsuedoNamespace" → "PseudoNamespace")
- Improved error handling for missing awxkit installation with clearer installation instructions
The largest update to this version was the introduction of the broker config sub-command group.
Other major changes are related to the CLI user experience.
In order to make it easier for users to view, edit, and share their configuration, we added this new sub-command group. You can find the full details of the new functionality on its dedicated page. However, here is how to use the core functionality.
Simply just print out the config when no config chunk is passed in
broker config view
When a config chunk is passed in, print out just that chunk
broker config view Container
broker config view Container.instances.remote
Backup when actions are taken? When no chunk is passed in, edit the entire config file
broker config edit
When passed a valid config chunk, edit that chunk
broker config edit AnsibleTower
broker config view Container.instances.remote
Allow users a more explicit way to get their settings
broker config init
# can also just init one chunk
broker config init Container
# can also choose the source file
broker config init Container --from /path/to/settings.yaml
broker config init --from https://raw.githubuser.../file.yaml
The most visually distinct change in this release is the increased use of rich to render output from broker inventory commands.
Additionally, you'll see a major visual difference in help output thanks to rich-click.
With these changes in mind, we've moved the old inventory view to broker inventory --list and broker inventory now returns a more detailed table view.
The inventory_fields setting in Broker's configuration file allows you to customize the fields and values presented by the broker inventory command. This can be useful for tailoring the inventory output to your specific needs.
The inventory_fields setting is a dictionary where each key represents a column name in the inventory table, and each value specifies the corresponding field(s) from the inventory data. You can use multiple values separated by a pipe (|) to provide fallback options, or combine multiple values with a space to concatenate them. Check out your settings file for an example.
This change includes a mix of major user-facing changes and large framework-level changes. For this page, we will only point out the user-facing changes.
In previous versions, unless you had a BROKER_DIRECTORY environment variable set, Broker would attempt to run from the directory you were in.
Starting in 0.3.0, Broker's default directory will now be ~/.broker/. Broker will still honor the BROKER_DIRECTORY environment variable when set.
To simplify the initial configuration process, Broker will now download its example settings file from GitHub and place it in the Broker directory locally. CLI users will be prompted for permission and brought directly into an editor. Other users are considered "non-interactive" and will not be prompted.
Additionally, the inventory_file setting can be removed from settings files for those that still have it. Broker will now always use inventory.yaml in the base Broker directory.
Broker's filtering system had a complete rewrite for this release. While the concepts stayed the same, the syntax is now Python-based. For a complete breakdown of the new syntax, with examples, check the wiki reference.