diff --git a/.github/workflows/eco-vcenter-ci.yaml b/.github/workflows/eco-vcenter-ci.yaml new file mode 100644 index 00000000..31e251c8 --- /dev/null +++ b/.github/workflows/eco-vcenter-ci.yaml @@ -0,0 +1,44 @@ +--- +name: Ansible Eco vCenter Integration Test +on: + pull_request: + branches: + - '**' + push: + branches: + - main + - 'release-\d.\d\d' + +permissions: + contents: read +jobs: + ansible_integration_test: + runs-on: ["self-hosted", linux, X64] + steps: + - name: Update pip, git + if: runner.os == 'Linux' && startsWith(runner.name, 'ubuntu') + run: | + set -euxo pipefail + sudo apt-get update + sudo apt-get install podman + + - name: Checkout code + uses: actions/checkout@v4 + with: + ref: ${{ github.event.pull_request.head.ref || github.ref }} + path: ansible_collections/cloud/vmware_ops + + - name: Generate integration config + working-directory: ansible_collections/cloud/vmware_ops/scripts + run: | + chmod +x generate_integration_config.sh + ./generate_integration_config.sh + env: + VCENTER_HOSTNAME: ${{ secrets.VCENTER_HOSTNAME }} + VCENTER_USERNAME: ${{ secrets.VCENTER_USERNAME }} + VCENTER_PASSWORD: ${{ secrets.VCENTER_PASSWORD }} + + - name: Run integration tests + working-directory: ansible_collections/cloud/vmware_ops + run: | + make eco-vcenter-ci diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 41747416..dc24b910 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,6 +1,6 @@ --- name: Ansible Integration Test -on: # yamllint disable-line rule:truthy +on: # yamllint disable-line rule:truthy pull_request: merge_group: branches: @@ -27,5 +27,7 @@ jobs: - name: Run run: | + python3 -m venv .venv + source .venv/bin/activate make integration working-directory: ansible_collections/cloud/vmware_ops diff --git a/CODEOWNERS b/CODEOWNERS index 5af144e0..e87c2524 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -1,3 +1,11 @@ -* @bardielle -* @machacekondra -* @mikemorency +# Default code owners for all files and directories +* @bardielle @machacekondra @mikemorency + +# Integration tests permissions +/tests/integration/ @shellymiron @elsapassaro + +# Specific workflow file permissions +.github/workflows/eco-vcenter-ci.yaml @shellymiron @elsapassaro + +# Scripts directory permissions +/scripts/ @shellymiron @elsapassaro diff --git a/Makefile b/Makefile index b59593d3..66576d77 100644 --- a/Makefile +++ b/Makefile @@ -7,12 +7,16 @@ install-python-packages: .PHONY: install-ansible-collections install-ansible-collections: - ansible-galaxy collection install -r tests/integration/requirements.yml + ansible-galaxy collection install --upgrade -r tests/integration/requirements.yml .PHONY: integration integration: install-python-packages install-ansible-collections ansible-test integration --no-temp-workdir +.PHONY: eco-vcenter-ci +eco-vcenter-ci: install-python-packages install-ansible-collections + ansible-test integration --no-temp-workdir info_test + .PHONY: ee-clean ee-clean: rm -rf context/ diff --git a/scripts/generate_integration_config.sh b/scripts/generate_integration_config.sh new file mode 100755 index 00000000..5605416e --- /dev/null +++ b/scripts/generate_integration_config.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash +# shellcheck disable=SC2155,SC2086 + +# Resolve the script's directory reliably +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &> /dev/null && pwd)" +cd "$SCRIPT_DIR" || exit 1 + +# Truncate the output file +truncate -s 0 integration_config.yml + +# Read the template and substitute environment variables +while read -r line; do + eval 'echo "'"$line"'"' >> integration_config.yml +done < "integration_config.yml.tpl" diff --git a/scripts/integration_config.yml.tpl b/scripts/integration_config.yml.tpl new file mode 100644 index 00000000..502230cb --- /dev/null +++ b/scripts/integration_config.yml.tpl @@ -0,0 +1,5 @@ +--- +vcenter_hostname: ${VCENTER_HOSTNAME} +vcenter_username: ${VCENTER_USERNAME} +vcenter_password: ${VCENTER_PASSWORD} +ansible_tags: eco-vcenter-ci diff --git a/tests/integration/requirements.txt b/tests/integration/requirements.txt index 3efc8ddf..59c398a1 100644 --- a/tests/integration/requirements.txt +++ b/tests/integration/requirements.txt @@ -3,3 +3,4 @@ pyVmomi>=6.7 podman requests pycdlib +git+https://github.com/vmware/vsphere-automation-sdk-python.git diff --git a/tests/integration/requirements.yml b/tests/integration/requirements.yml index a75d3883..754865f9 100644 --- a/tests/integration/requirements.yml +++ b/tests/integration/requirements.yml @@ -1,5 +1,11 @@ collections: + - name: community.general + - name: ansible.posix - name: community.vmware + version: ">=4.4.0" - name: vmware.vmware_rest - name: vmware.vmware - name: containers.podman + - name: https://github.com/redhat-cop/cloud.vmware_ops.git + type: git + version: main diff --git a/tests/integration/targets/info_test/run.yml b/tests/integration/targets/info_test/run.yml index ae03d4b3..4add4971 100644 --- a/tests/integration/targets/info_test/run.yml +++ b/tests/integration/targets/info_test/run.yml @@ -1,19 +1,37 @@ -- hosts: localhost - gather_facts: no - collections: - - community.general - vars_files: - - vars.yml +- name: Run Info Test Tasks + hosts: localhost + gather_facts: false tasks: + + - name: Import eco-vcenter credentials + ansible.builtin.include_vars: + file: ../../../../scripts/integration_config.yml + tags: eco-vcenter-ci + + - name: Import vars for testing on eco-vcenter env + ansible.builtin.include_vars: + file: ../vars/main.yml + tags: eco-vcenter-ci + + - name: Import simulator vars + ansible.builtin.include_vars: + file: vars.yml + tags: integration-ci + - name: Vcsim ansible.builtin.import_role: name: prepare_soap + tags: integration-ci - name: Vcsim ansible.builtin.import_role: name: prepare_rest + tags: integration-ci - name: Import info role ansible.builtin.import_role: name: info_test + tags: + - eco-vcenter-ci + - integration-ci diff --git a/tests/integration/targets/info_test/runme.sh b/tests/integration/targets/info_test/runme.sh index a4c36631..df332d3d 100755 --- a/tests/integration/targets/info_test/runme.sh +++ b/tests/integration/targets/info_test/runme.sh @@ -1,3 +1,14 @@ #!/usr/bin/env bash source ../init.sh -exec ansible-playbook run.yml + +# Extract the ansible_tags from integration_config.yml +ANSIBLE_TAGS=$(awk '/ansible_tags/ {print $2}' ../../../../scripts/integration_config.yml) + +# Check if the ANSIBLE_TAGS variable is set +if [[ -n "$ANSIBLE_TAGS" ]]; then + echo "ANSIBLE_TAGS is set to: $ANSIBLE_TAGS" + exec ansible-playbook run.yml --tags "$ANSIBLE_TAGS" +else + echo "ANSIBLE_TAGS is not set for Eco vCenter. Running on simulator." + exec ansible-playbook run.yml --tags integration-ci +fi diff --git a/tests/integration/targets/info_test/vars/main.yml b/tests/integration/targets/info_test/vars/main.yml new file mode 100644 index 00000000..97ad64a7 --- /dev/null +++ b/tests/integration/targets/info_test/vars/main.yml @@ -0,0 +1,13 @@ +info_hostname: "{{ vcenter_hostname }}" +info_username: "{{ vcenter_username }}" +info_password: "{{ vcenter_password }}" +info_validate_certs: false +info_appliance_file: "/tmp/info_appliance_file" +info_license_file: "/tmp/info_license_file" +info_storage_file: "/tmp/info_storage_file" +info_guest_file: "/tmp/guest_info_file" +info_license: true +info_storage: true +info_cluster: true +info_guest: true +info_appliance: true diff --git a/tests/integration/targets/init.sh b/tests/integration/targets/init.sh index cd18c79e..26bb4dad 100644 --- a/tests/integration/targets/init.sh +++ b/tests/integration/targets/init.sh @@ -1,5 +1,12 @@ #!/usr/bin/env bash # shellcheck disable=SC2155,SC2086 -BASE_DIR=$(dirname "${BASH_SOURCE[0]}") -export ANSIBLE_ROLES_PATH=${BASE_DIR} +export VALIDATED_COLLECTIONS_PATH="/home/kni/actions-runner/eco-vcenter/cloud.vmware_ops/cloud.vmware_ops/ansible_collections" +export ALL_COLLECTIONS_PATH="$HOME/.ansible/collections/ansible_collections" + +# Export the collections path +export ANSIBLE_COLLECTIONS_PATH=${VALIDATED_COLLECTIONS_PATH}:${ALL_COLLECTIONS_PATH} + +echo "ANSIBLE_COLLECTIONS_PATH: $ANSIBLE_COLLECTIONS_PATH" +BASE_DIR=$(dirname "$(realpath "${BASH_SOURCE[0]}")") +export ANSIBLE_ROLES_PATH=${BASE_DIR}:${ANSIBLE_COLLECTIONS_PATH} diff --git a/tests/integration/targets/prepare_rest/tasks/main.yml b/tests/integration/targets/prepare_rest/tasks/main.yml index 3ed1cc91..c40b5fdb 100644 --- a/tests/integration/targets/prepare_rest/tasks/main.yml +++ b/tests/integration/targets/prepare_rest/tasks/main.yml @@ -4,6 +4,7 @@ name: - requests - aiohttp + - git+https://github.com/vmware/vsphere-automation-sdk-python.git - name: Run rest containers.podman.podman_container: diff --git a/tests/integration/targets/prepare_soap/tasks/main.yml b/tests/integration/targets/prepare_soap/tasks/main.yml index 35d51d6c..aad073a0 100644 --- a/tests/integration/targets/prepare_soap/tasks/main.yml +++ b/tests/integration/targets/prepare_soap/tasks/main.yml @@ -4,11 +4,11 @@ name: - requests - pyVmomi + - git+https://github.com/vmware/vsphere-automation-sdk-python.git - name: Run soap vcSim containers.podman.podman_container: name: vmwaresoap - image: docker.io/vmware/vcsim:latest state: started recreate: yes