Skip to main content

The infrastructure middleman.

Project description

Broker update_broker_image

The infrastrucure middleman


Broker is a tool designed to provide a common interface between one or many services that provision virtual machines. It is an abstraction layer that allows you to ignore (most) of the implementation details and just get what you need.


dnf install cmake
cd <broker root directory>
pip install .   or   pip install broker
cp broker_settings.yaml.example broker_settings.yaml

Then edit the broker_settings.yaml file

Broker can also be ran outside of its base directory. In order to do so, specify the directory broker's files are in with the BROKER_DIRECTORY envronment variable. BROKER_DIRECTORY=/home/jake/Programming/broker/ broker inventory


The broker_settings.yaml file is used, through DynaConf, to set configuration values for broker's interaction with its 'providers'.

DynaConf integration provides support for setting environment variables to override any settings from the yaml file.

An environment variable override would take the form of: DYNACONF_AnsibleTower__base_url="". Note the use of double underscores to model nested maps in yaml.

For the AnsibleTower provider, authentication can be achieved either through setting a username and password, or through a token (Personal Access Token in Tower).

A username can still be provided when using a token to authenticate. This user will be used for inventory sync (examples below). This may be helpful for AnsibleTower administrators who would like to use their own token to authenticate, but want to set a different user in configuration for checking inventory.


Checking out a VM

broker checkout --workflow "workflow-name" --workflow-arg1 something --workflow-arg2 else

You can pass in any arbitrary arguments you want. Broker can also checkout multiple VMs at once by specifying a count.

broker checkout --nick rhel7 --count 3


Broker allows you to define configurable nicknames for checking out vms. Just add yours to setting.yaml and call with the --nick option

broker checkout --nick rhel7

Duplicating a VM

Broker offers another shortcut for checking out a VM with the same recipe as one already checked out by Broker. This is via the duplicate command.

broker duplicate
broker duplicate 0
broker duplicate 1 3
broker duplicate 0 --count 2

Listing your VMs

Broker maintains a local inventory of the VMs you've checked out. You can see these with the inventory command.

broker inventory

To sync your inventory from a supported provider, use the --sync option.

broker inventory --sync AnsibleTower

To sync inventory for a specific user, use the following syntax with --sync.

broker inventory --sync AnsibleTower:<username>

Extending your VM lease time

Providers supporting extending a VM's lease time make that functionality available through the extend subcommand.

broker extend 0
broker extend hostname
broker extend vmname
broker extend --all

Checking in VMs

You can also return a VM to its provider with the checkin command. You may use either the local id (broker inventory), the hostname, or "all" to checkin everything.

broker checkin
broker checkin 0
broker checkin 1 3
broker checkin --all

Gaining information about Broker's providers

Broker's providers command allows you to gather information about what providers are avaiable as well as each providers actions. Additionally, you can find out information about different arguments for a provider's action with this command.

broker providers --help
broker providers AnsibleTower --help
broker providers AnsibleTower --workflows
broker providers AnsibleTower --workflow remove-vm

Run arbitrary actions

If a provider action doesn't result in a host creation/removal, Broker allows you to execute that action as well. There are a few output options available as well.

broker execute --help
broker execute --workflow my-awesome-workflow --additional-arg True
broker execute -o raw --workflow my-awesome-workflow --additional-arg True
broker execute -o raw --workflow my-awesome-workflow --additional-arg True --artifacts last

Run Broker in the background

Certain Broker actions can be run in the background, these currently are: checkout, checkin, duplicate, and execute. When running a command in this mode, it will spin up a new Broker process and no longer log to stderr. To check progress, you can still follow broker's log file. Note that background mode will interfere with output options for execute since it won't be able to print to stdout. Those should kept in log mode.

broker checkout --background --nick rhel7
broker checkin -b --all
broker duplicate -b 0
broker execute -b --workflow my-awesome-workflow --artifacts

Filter hosts for Broker actions

Actions that Broker can take against hosts (checkin, duplicate, extend) can take in a filter argument. This filter will decide which hosts the actions are applied to. A filter by itself will not select hosts for these actions, you will still need to specify which hosts to act against, or use --all when available. From there, the filter decides which of those hosts make it through to be acted upon.

Broker's filters are based on what is stored in its local inventory file. Therefore, only properties in that file are filter-able. Nested properties are annotated with a . notation. For example, a top-level property hostname can be accessed by itself. However, a nested property of _broker_args called version would be accessed by _broker_args.version.

Filters take the form "(property)(condition)(value)". Filters have several possible conditions:

  • < means "in" or that the filter value exists within the actual value
  • = means "equals"
  • { means "starts with"
  • } means "ends with"

Furthermore, putting a ! before the condition inverts the filter. So != means "not equals" and !< means "not in".

Example filters:

--filter 'hostname<test' The string test should exist somewhere in the hostname value --filter '_broker_args.template{deploy-sat' The template should start with the string "deploy-sat"

You can also chain multiple filters together by separating them with a comma. These are additive AND filters where each filter condition must match.

--filter 'name<test,_broker_args.provider!=RHEV' The host's name should have test in it and the provider should not equal RHEV.

Note: Due to shell expansion, it is recommended to wrap a filter in single quotes.


0.1.8 (2021-01-21)

  • Quick fix for AnsibleTower provider

0.1.7 (2021-01-15)

  • Added the ability for broker to execute and query AnsibleTower job templates

0.1.6 (2020-12-08)

  • Broker now poulates missing field values based on returned results from AnsibleTower
  • AnsibleTower's artifacts strategy has been changed from merge to latest by default

0.1.5 (2020-10-31)

  • Added a list-templates ability for AnsibleTower provider
  • Added GNU license
  • minor fixes
  • removed Michael

0.1.4 (2020-10-12)

  • --version flag added to main broker command
  • minor fixes

0.1.3 (2020-09-24)

  • HISTORY file format changed from rst to md
  • TestProvider now picklable, enabling mp test to run again

0.1.2 (2020-09-17)

  • nick-help command changed to providers
  • providers command is now dynamically populated
  • Fixes for logging
  • Now more resilient to running outside of broker's directory

0.1.1 (2020-09-02)

  • Settings values now have validation and some defaults
  • Filters are Introduced
  • VMBroker can now reconstruct hosts from the local inventory
  • Other miscellaneous enhancements and fixes

0.1.0 (2020-08-08)

  • VMBroker now has the ability to multiprocess checkouts
  • Other miscellaneous enhancements and fixes

0.0.12 (2020-07-31)

  • Added ability to extend vm lease time
  • Changed --artifacts to now accept merge or last
  • Misc small changes

0.0.11 (2020-07-02)

  • Added background mode to broker's cli
  • Added log-level silent

0.0.10 (2020-06-29)

  • Updated broker to be compatible with dynaconf 3.0.0
  • Added the ability to specify a BROKER_DIRECTORY envrionment variable
  • Changed settings.yaml to broker_settings.yaml

0.0.9 (2020-06-19)

  • Added inventory sync functionality to broker
  • Added the ability to query actions from providers using nick-help
  • Misc enhancements and tweaks including improving inventory host removal

0.0.8 (2020-06-03)

  • Added execute functionality to broker
  • Added more functionality to VMBroker subclass to handle execute
  • Slightly changed AnsibleTower provider to allow for arbitrary workflow execution

0.0.7 (2020-05-29)

  • Added session class
  • Added session functionality to Host class
  • Updated VMBroker context manager
  • Added ssh2-python dependency (requires cmake)
  • New host settings added to settings.yaml.example

0.0.6 (2020-05-27)

  • Added nick-help subcommand
  • Added new helper method for presenting complex data structures
  • Changed --debug to --log-level allowing for greater log control
  • Improved in-code documentation

0.0.5 (2020-05-14)

  • Added initial tests
  • Added travis integration
  • Added a helper method for tests
  • Minor fixes and tweaks

0.0.4 (2020-05-08)

  • Refactored location and process of checkin/checkout
  • Added a Test Provider ahead of adding tests

0.0.3 (2020-04-30)

  • Introduced duplicate command Note that this will not work with old inventory format

0.0.2 (2020-04-30)

  • Updated awxkit version
  • Removed provider from host information

0.0.1 (2020-04-28)

  • Initial commit
  • Added basic featureset

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for broker, version 0.1.8
Filename, size File type Python version Upload date Hashes
Filename, size broker-0.1.8-py2.py3-none-any.whl (35.1 kB) File type Wheel Python version py2.py3 Upload date Hashes View
Filename, size broker-0.1.8.tar.gz (23.8 kB) File type Source Python version None Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page