- Clone the repository.
- Make the desired code change.
- Add a changelog fragment to describe your change.
- Run integration tests locally and ensure they pass.
- Create a PR.
The ansible-test
command expects that the repository is in a directory that matches it's collection,
under a directory ansible_collections
. Clone ensuring that hierarchy:
mkdir -p $TARGET_DIR/ansible_collections/google
git clone <url> $TARGET_DIR/ansible_collections/google/cloud
Then set up your Python virtual environment:
cd $TARGET_DIR/ansible_collections/google/cloud
python3 -m venv venv
. ./venv/bin/activate
pip3 install -r requirements.txt
pip3 install -r requirements-test.txt
pip3 install ansible
- Install
gcloud
following these instructions. - Install the
ansible
package. - Some container runtime is necessary (e.g.
podman
ordocker
). The instructions use podman.
If you are running the integration tests locally the easiest way to
authenticate to GCP is using application default credentials.
Once you have installed gcloud
and performed basic initialization (via gcloud init
) run:
gcloud auth application-default login
A service account may also be used to run the integration tests. You can create one using gcloud
:
gcloud iam service-accounts create ansible-test-account \
--description="For running Anisble integration tests" \
--display-name="Ansible Test Account"
You'll also need to export a key file. Here and below $SERVICE_ACCOUNT_NAME
is the full email address of the service account, in the form
EMAIL@PROJECT_ID.iam.gserviceaccount.com
, e.g., if you used the
account name ansible-test-account
as suggested above and your project
ID is my-test-project
, use [email protected]
.
gcloud iam service-accounts keys create /path/to/cred/file.json \
--iam-account=ansible-test-account@my-test-project.iam.gserviceaccount.com
chmod 0600 /path/to/cred/file.json
Read the best practices for managing service account keys to learn how to keep your service account key and your GCP resources safe.
The integration tests for this module require the use of real GCP credentials, and must provide
ansible-test those values. They can be added by creating the file tests/integration/cloud-config-gcp.ini
.
If you are using personal (i.e., application default) credentials, add:
[default]
gcp_project: $PROJECT_ID
gcp_cred_kind: application
gcp_folder_id: $TEST_FOLDER (to create test projects)
If you are using a service account for credentials, add:
[default]
gcp_project: $PROJECT_ID
gcp_cred_file: /path/to/cred/file.json
gcp_cred_kind: serviceaccount
gcp_folder_id: $TEST_FOLDER (to create test projects)
Some of the setup of the project itself is done outside of the test, and is expected to be configured beforehand.
For convenience, a bootstrap script is provided.
NOTE: running this script will make irreversible changes in your
GCP project (e.g. create an AppEngine project). You can omit
$SERVICE_ACCOUNT_NAME
is you are using application default credentials.
bash ./scripts/bootstrap-project.sh $PROJECT_ID $SERVICE_ACCOUNT_NAME
Run ansible-test integration
. Currently some tests are disabled as test are being verified and added.
If you would like to use podman, you must
install the molecule-plugins[podman]
package in PyPI:
pip install --upgrade molecule-plugins[podman]
Ansible roles are tested via molecule.
module debug --test -s ${ROLE}
Role is the name of the role (e.g. gcloud, gcsfuse).
Add -d podman
if you would like to use the podman driver.
If the linting fails, that is generally due to ansible-lint
, which can be run directly:
ansible-lint
The following enumerates detailed documentation for specific tasks related to the codebase.
- modify the ansible-integration-tests.yaml to the version of ansible-core that you would like to test against.
- (optional) update the version of ansible-core version required in meta/runtime.yaml.