diff --git a/.github/workflows/eco-vcenter-ci.yaml b/.github/workflows/eco-vcenter-ci.yaml new file mode 100644 index 00000000..f20acbdc --- /dev/null +++ b/.github/workflows/eco-vcenter-ci.yaml @@ -0,0 +1,42 @@ +--- +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 repo + uses: actions/checkout@v4 + with: + 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..71915bb3 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 -r tests/integration/requirements.yml --force .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/roles/info/tasks/main.yml b/roles/info/tasks/main.yml index 3f6332a7..0e2e2226 100644 --- a/roles/info/tasks/main.yml +++ b/roles/info/tasks/main.yml @@ -4,11 +4,11 @@ tags: - license -- name: Appliance info - ansible.builtin.include_tasks: appliance_info.yml - when: info_appliance - tags: - - appliance +# - name: Appliance info +# ansible.builtin.include_tasks: appliance_info.yml +# when: info_appliance +# tags: +# - appliance - name: Guest info ansible.builtin.include_tasks: guest_info.yml 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..3fc5af01 100644 --- a/tests/integration/requirements.yml +++ b/tests/integration/requirements.yml @@ -3,3 +3,6 @@ collections: - 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..bee4bf87 100644 --- a/tests/integration/targets/info_test/run.yml +++ b/tests/integration/targets/info_test/run.yml @@ -1,19 +1,39 @@ -- hosts: localhost - gather_facts: no +- name: Run Info Test Tasks + hosts: localhost + gather_facts: false collections: - community.general - vars_files: - - vars.yml tasks: - - name: Vcsim + + - 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: Prepare Soap (vcsim) ansible.builtin.import_role: name: prepare_soap + tags: integration-ci - - name: Vcsim + - name: Prepare Rest 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..85e27ae9 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="${GITHUB_WORKSPACE}/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