Feel free to open issues and/or pull requests with additional features or improvements! For general questions about contributing to hvac that don’t fit in the scope of a GitHub issue, and for any folks are interested in becoming a maintainer of hvac, please feel free to join our gitter chat room for discussions at:

Typical Development Environment SetupΒΆ

virtualenv hvac-env
source hvac-env/bin/activate

git clone
cd hvac
pip install -e .


Integration tests will automatically start a Vault server in the background. Just make sure the latest vault binary is available in your PATH.

  1. Install Vault or execute tests/scripts/ Note: by default this script installs the OSS version of Vault. An enterprise trial version of the Vault binary is available for testing (but has an explicitly limited runtime). To run integration test cases requiring enterprise Vault, you can invoke the installation script with: <desired version> 'enterprise'

  2. Install requirements

cd hvac
pip install -r requirements.txt
  1. Run tests: make test

Updating RequirementsΒΆ

This project uses pip-tool’s pip-compile utility to manage its various requirements. Any given requirements file can be manually updated by following the pip-compile comments at the top of the file. Alternatively, the update-all-requirements Makefile target can be used to update requirements across the board (this has a dependency on docker being available).


Adding New Documentation FilesΒΆ

When adding documentation for an entirely new feature / class, it often makes sense to place the documentation in a new .rst file. After drafting the new file, be sure to add the file as an entry to at least one table of contents directive (e.g., toctree) to ensure it gets rendered and published on As an example, the process for adding a new documentation file for a secrets engine related to Active Directory could involve:

  1. Add a new file to docs/usage/secrets_engines with a name along the lines of active_directory.rst.

  2. Update the toctree directive within docs/usage/secrets_engines/index.rst to add a line for active_directory

  3. Verify the new file is being included and rendered as expected by running make html from the docs/ subdirectory. You can then view the rendered HTML documentation, in a browser or otherwise, by opening docs/_build/html/index.html.

Testing DocsΒΆ

cd docs/
pip install -r requirements.txt
make doctest


Example code or general guides for methods in this module can be added under docs/usage. Any newly added or updated method in this module will ideally have a corresponding addition to these examples. New usage sections should also be added to the table of contents tracked in docs/usage.rst.

Backwards Compatibility Breaking ChangesΒΆ

Due to the close connection between this module and HashiCorp Vault versions, breaking changes are sometimes required. This can also occur as part of code refactoring to enable improvements in the module generally. In these cases:

  • A deprecation notice should be displayed to callers of the module until the minor revision +2. E.g., a notice added in version 0.6.2 could see the marked method / functionality removed in version 0.8.0.

  • Breaking changes should be called out in the for the affected version.

Creating / Publishing ReleasesΒΆ

  • [ ] Checkout the develop branch:

    git checkout develop
    git pull
  • [ ] Update the version number using bumpversion. Releases typically just use the β€œpatch” bumpversion option; but β€œminor” and β€œmajor” are available as needed. This will also add an appropriate git commit for the new version.

    bumpversion --no-tag {patch|minor|major}
  • [ ] Pull up the current draft hvac release and use the release-drafter generated release body to update Then commit the changes:

    git commit -m "Changelog updates for v$(grep -oP '(?<=current_version = ).*' .bumpversion.cfg)"
  • [ ] Git push the updated develop branch (git push) and open a PR to rebase merge the develop branch into main:…develop. Ensure the PR has the β€œrelease” label applied and then merge it.

  • [ ] Publish the draft release on GitHub: Ensure the tag is set to the release name (e.g., vX.X.X) and the target is the main branch. NOTE: release-drafter sets the release name by default. If performing a minor or major update, these values will need to be manually updated before publishing the draft release subsequently.