We follow Ansible Code of Conduct in all our contributions and interactions within this repository. If you are stuck while developing a module, refer to our recommended reads from the Ansible docs.
Whether you are looking for an opportunity to contribute or you found a bug and already know how to solve it, please go to the issue tracker. There you can find feature ideas to implement, reports about bugs to solve, or submit an issue to discuss your idea before implementing it which can help choose a right direction at the beginning of your work and potentially save a lot of time and effort. Also somebody may already have started discussing or working on implementing the same or a similar idea, so you can cooperate to create a better solution together.
Look through currently open pull requests.
You can help by reviewing and testing them, since this collection currently lacks integration tests. Reviews and tests help us estimate the maturity of a pull request and increase the likelihood to merge its contents. Note that reviewing does not only mean code review, but also offering comments on new interfaces added to existing plugins/modules, interfaces of new plugins/modules, improving language (not everyone is a native English speaker), or testing bugfixes and new features!
Also, consider taking up a valuable, reviewed, but abandoned pull request which you could politely ask the original authors to complete yourself.
If you want to test a PR locally, refer to our testing guide for instructions on how do it quickly.
If you find any inconsistencies or places in this document which can be improved, feel free to raise an issue or pull request to fix it.
Wether you found a bug and want to fix it or you want to contribute a new module, please refer to these conventions:
- Try committing your changes with an informative but short commit message.
- Make sure your PR includes a changelog fragment.
- You must not include a fragment for new modules or new plugins. Also you shouldn't include one for docs-only changes.
- Please always include a link to the pull request itself, and if the PR is about an issue, also a link to the issue. Also make sure the fragment ends with a period, and begins with a lower-case letter after
-. (Again, if you don't do this, we'll add suggestions to fix it, so don't worry too much :) )
- Note that we lint and format the code with
ruff. If your change does not match the expectations, CI will fail and your PR will not get merged. Continue reading this guide to find out how to lint and format your code.
You can also read the Ansible community's Quick-start development guide.
Creating new modules and plugins requires a bit more work than other Pull Requests.
-
Please make sure that your new module or plugin is not already part of this collection. If it is already partly adressed, you might want to add the functionality there or discuss refactoring the functions in an issue.
-
Please do not add more than one plugin/module in one PR, unless they are closely releated. That makes it easier for reviewers, and increases the chance that your PR will get merged. If you plan to contribute a group of plugins/modules (say, more than a module and a corresponding
_infomodule), please mention that in the first PR. -
When creating a new module or plugin, please make sure that you follow various guidelines:
- Follow development conventions;
- Follow documentation standards and the Ansible style guide;
- Make sure your modules and plugins are GPL-3.0-or-later licensed (new module_utils can also be BSD-2-clause licensed);
- Make sure that new plugins and modules have unit tests.
We use ruff to maintain a baseline of code readability and quality.
Please check out our ruff configuration to find out which formatting and rules are enforced.
To perform basic testing, you will most likely require the following packages:
antsibull-noxnoxruffansiblepre-commit(optional)
and ideally a container runtime, for example podman or docker.
The repository includes a pre-commit configuration (.pre-commit-config.yaml) which runs basic Ruff checks before each commit. Hooks are not active until you install them. After installing the pre-commit package, run pre-commit install.
If you want to manually run the hooks before making a commit, you can use pre-commit run.
To immediately run all default tests (format, lint), install the dependencies
and run nox. To run all unit/sanity tests, use nox -s ansible-test-units or nox -s ansible-test-sanity.
The following commands show how to lint and format your code with nox:
# Run all configured formatters:
nox -Re formatters
# Lint:
nox -Re codeqa
# If you notice discrepancies between your local formatter and CI, you might
# need to re-generate the virtual environment:
nox -e formattersWhile antsibull-nox and nox enable you to run the whole suite of tests, you may
use ruff format and ruff check immediately within your development environment to perform basic linting and formatting.
Note that while our CI is aware of changed files, your environment may not be. Thus, ruff errors,
which might stem for other files, will not fail the tests of your contribution and can be ignored.
The following commands show how to run ansible-test sanity tests:
# Run basic sanity tests for all files in the collection:
nox -Re ansible-test-sanity-devel
# Run basic sanity tests for the given files and directories:
nox -Re ansible-test-sanity-devel -- plugins/modules/system/pids.py tests/integration/targets/pids/
# Run all other sanity tests for all files in the collection:
nox -RThe following commands show how to run unit tests:
# Run all unit tests:
nox -Re ansible-test-units-devel
# Run all unit tests for one Python version (a lot faster):
nox -Re ansible-test-units-devel -- --python 3.13
# Run a specific unit test for one Python version:
nox -Re ansible-test-units-devel -- --python 3.13 tests/unit/plugins/modules/test_proxmox_kvm.pyMost Proxmox module integration tests require access to a real Proxmox environment and are marked as unsupported in CI. This means they are skipped during automated testing and must be executed manually in a properly configured environment.
Warning: Integration tests may create, modify, or delete resources on your Proxmox environment. It is strongly recommended to use a dedicated test environment.
-
Create your local configuration file:
cp tests/integration/integration_config.yml.template tests/integration/integration_config.yml
-
Adjust the authentication variables to match your Proxmox environment. A minimal example configuration may look like:
proxmox_host: https://your-proxmox:8006 proxmox_user: root@pam proxmox_password: your-password validate_certs: false
Some modules require the
root@pamuser due to permission constraints.
You can run integration tests using ansible-test:
# Run all integration tests
ansible-test integration -v --allow-unsupported
# Run all integration tests using Docker
ansible-test integration --docker -v --allow-unsupported
# Run a specific test target
ansible-test integration proxmox_pool -v --allow-unsupported
# Run a specific test target using Docker
ansible-test integration proxmox_pool --docker -v --allow-unsupportedIf you want to test your new module or bugfix within a playbook, you may do the following:
- Ensure your repository resides, for example, in
exampledir/community/proxmox. - Set up Ansible to find your collection
export ANSIBLE_COLLECTIONS_PATH="$HOME/exampledir". Alternatively, you may edit your ansible.cfg. - Verify, that your modified collection is found:
ansible-galaxy collection list
Now you can use your custom code in playbooks and roles.
And you can use ansible-doc to review your rendered documentation.
Unless you already read it up above, you probably really shoudl check out these links:
- Development:
- Module architecture (also contains the module options).
- Best practises.
- Creating changelog fragments.
- Documentation
- Ansible Module parts and blocks.
- Style Guide, and the subsequent voice style, grammar and spelling.
- Ansible Markup for documentation yaml.