Skip to content

Version Updates

Jake Callahan edited this page Oct 14, 2025 · 4 revisions

Version Update Information

Broker 0.7 Release Notes

Major Features

Paramiko SSH Backend Support

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]

OpenStack Provider

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"

Settings Isolation

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

Minor Changes

Configuration Management Enhancements

The configuration system has been improved with several user-facing changes:

  • Added BROKER_NO_GLOBAL_CONFIG environment variable to disable global configuration file requirements
  • Configuration migrations now properly skip example migration files
  • Added migration support for AnsibleTower's dangling_behavior setting (defaults to "checkin")
  • Improved validation error messages and configuration setup guidance

AnsibleTower Provider Improvements

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_behavior setting: "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

CI/CD Improvements

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)

Container Provider Enhancement

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 Discovery Updates

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.

Helper Function Improvements

  • simple_retry now supports terminal exceptions that should not be retried
  • Added dict_to_table helper for converting dictionaries to rich formatted tables
  • Enhanced dictlist_to_table with optional header display control
  • Improved inventory management with better path handling

Bug Fixes

  • 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

0.5.z -> 0.6.0

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.

broker config cli

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.

broker config view

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

broker config edit

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

broker config init

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

Significant CLI UX Changes

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.

Inventory Fields

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.

0.2.Z -> 0.3.0

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.

Broker Directory Location

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.

Broker Settings

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.

Filtering

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.