Skip to content

Commit

Permalink
add vmware.vmware upstream CI
Browse files Browse the repository at this point in the history
  • Loading branch information
shellymiron committed Jul 1, 2024
1 parent 54ac50e commit ae38e7e
Show file tree
Hide file tree
Showing 19 changed files with 230 additions and 27 deletions.
46 changes: 46 additions & 0 deletions .github/workflows/eco-vcenter-ci.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
---
name: Ansible Eco vCenter Integration Test
on:
pull_request_target:
types: [opened, synchronize]
push:
branches:
- main
- 'release-\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:
ref: ${{ github.event.pull_request.head.sha }}
path: ansible_collections/vmware/vmware

- name: Generate integration config
working-directory: ansible_collections/vmware/vmware/tests/integration
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
run: |
python3 -m venv .venv
source .venv/bin/activate
make eco-vcenter-ci
working-directory: ansible_collections/vmware/vmware
env:
ANSIBLE_COLLECTIONS_PATH: "${{ github.workspace }}"
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,9 @@ coverage.xml
.hypothesis/
.pytest_cache/

# Integration tests
tests/integration/integration_config.yml

# Translations
*.mo
*.pot
Expand Down
37 changes: 36 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,5 +1,40 @@
# Define ANSI escape codes for colors
GREEN=\033[0;32m
RED=\033[0;31m
NC=\033[0m # No Color

.PHONY: units
units:
ansible-test units --docker --python 3.12

integration:
.PHONY: prepare_symlinks
prepare_symlinks:
ansible-playbook tools/prepare_symlinks.yml

.PHONY: integration
integration: prepare_symlinks
ansible-test integration --no-temp-workdir

.PHONY: eco-vcenter-ci
eco-vcenter-ci: prepare_symlinks
@[ -f /tmp/failed-tests.txt ] && rm /tmp/failed-tests.txt || true; \
@failed=0; \
total=0; \
echo "===============" >> /tmp/failed-tests.txt; \
echo "Tests Summary" >> /tmp/failed-tests.txt; \
echo "===============" >> /tmp/failed-tests.txt; \
for dir in $(shell ansible-test integration --list-target --no-temp-workdir | grep 'vmware_'); do \
echo "Running integration test for $$dir"; \
total=$$((total + 1)); \
if ansible-test integration --no-temp-workdir $$dir; then \
echo -e "Test: $$dir ${GREEN}Passed${NC}" | tee -a /tmp/failed-tests.txt; \
else \
echo -e "Test: $$dir ${RED}Failed${NC}" | tee -a /tmp/failed-tests.txt; \
failed=$$((failed + 1)); \
fi; \
done; \
if [ $$failed -gt 0 ]; then \
echo "$$failed test(s) failed out of $$total." >> /tmp/failed-tests.txt; \
cat /tmp/failed-tests.txt; \
exit 1; \
fi
14 changes: 14 additions & 0 deletions tests/integration/generate_integration_config.sh
Original file line number Diff line number Diff line change
@@ -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"
5 changes: 5 additions & 0 deletions tests/integration/integration_config.yml.tpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
vcenter_hostname: ${VCENTER_HOSTNAME}
vcenter_username: ${VCENTER_USERNAME}
vcenter_password: ${VCENTER_PASSWORD}
ansible_tags: eco-vcenter-ci
11 changes: 10 additions & 1 deletion tests/integration/targets/init.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
#!/usr/bin/env bash
# shellcheck disable=SC2155,SC2086

BASE_DIR=$(dirname "${BASH_SOURCE[0]}")
export DEFAULT_COLLECTIONS_PATH="$ANSIBLE_COLLECTIONS_PATH/ansible_collections"

# Check if the variable is already set (e.g., in CI)
if [ -z "$ANSIBLE_COLLECTIONS_PATH" ]; then
# If not, use base collections path
ANSIBLE_COLLECTIONS_PATH="$DEFAULT_COLLECTIONS_PATH"
fi

echo "ANSIBLE_COLLECTIONS_PATH: $ANSIBLE_COLLECTIONS_PATH"
BASE_DIR=$(dirname "$(realpath "${BASH_SOURCE[0]}")")
export ANSIBLE_ROLES_PATH=${BASE_DIR}
17 changes: 17 additions & 0 deletions tests/integration/targets/runme.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#!/usr/bin/env bash
source ../init.sh

# Generates a string starting with 'test-' followed by 4 random lowercase characters
TINY_PREFIX="test-$(uuidgen | tr -d '-' | cut -c1-4 | tr '[:upper:]' '[:lower:]')"

# Extract the ansible_tags from integration_config.yml
ANSIBLE_TAGS=$(awk '/ansible_tags/ {print $2}' ../../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" --extra-vars "tiny_prefix=$TINY_PREFIX"
else
echo "ANSIBLE_TAGS is not set for Eco vCenter. Running on simulator."
exec ansible-playbook run.yml --tags integration-ci
fi
18 changes: 16 additions & 2 deletions tests/integration/targets/vmware_appliance_info/run.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,27 @@
gather_facts: no
collections:
- community.general
vars_files:
- vars.yml

tasks:

- name: Import eco-vcenter credentials
ansible.builtin.include_vars:
file: ../../integration_config.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_rest
tags: integration-ci

- name: Import vmware_appliance_info role
ansible.builtin.import_role:
name: vmware_appliance_info
tags:
- integration-ci
- eco-vcenter-ci
3 changes: 0 additions & 3 deletions tests/integration/targets/vmware_appliance_info/runme.sh

This file was deleted.

17 changes: 15 additions & 2 deletions tests/integration/targets/vmware_content_template/run.yml
Original file line number Diff line number Diff line change
@@ -1,12 +1,25 @@
- hosts: localhost
gather_facts: no
vars_files:
- vars.yml

tasks:
- name: Import eco-vcenter credentials
ansible.builtin.include_vars:
file: ../../integration_config.yml
tags: eco-vcenter-ci

- name: Import simulator vars
ansible.builtin.include_vars:
file: vars.yml
tags: integration-ci

- name: Prepare rest
ansible.builtin.import_role:
name: prepare_rest
tags: integration-ci

- name: Import vmware_content_template role
ansible.builtin.import_role:
name: vmware_content_template
tags:
- integration-ci
- eco-vcenter-ci
3 changes: 0 additions & 3 deletions tests/integration/targets/vmware_content_template/runme.sh

This file was deleted.

19 changes: 17 additions & 2 deletions tests/integration/targets/vmware_guest_info/run.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,32 @@
gather_facts: no
collections:
- community.general
vars_files:
- vars.yml

tasks:

- name: Import eco-vcenter credentials
ansible.builtin.include_vars:
file: ../../integration_config.yml
tags: eco-vcenter-ci

- name: Import simulator vars
ansible.builtin.include_vars:
file: vars.yml
tags: integration-ci

- name: Rest
ansible.builtin.import_role:
name: prepare_rest
tags: integration-ci

- name: Vcsim
ansible.builtin.import_role:
name: prepare_vcsim
tags: integration-ci

- name: Import vmware_guest_info role
ansible.builtin.import_role:
name: vmware_guest_info
tags:
- integration-ci
- eco-vcenter-ci
3 changes: 0 additions & 3 deletions tests/integration/targets/vmware_guest_info/runme.sh

This file was deleted.

2 changes: 2 additions & 0 deletions tests/integration/targets/vmware_guest_info/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
---
# note: this test will fail due to the below known bug:
# https://issues.redhat.com/browse/ACA-1650
- name: Gather guest info
vmware.vmware.guest_info:
validate_certs: false
Expand Down
17 changes: 15 additions & 2 deletions tests/integration/targets/vmware_license_info/run.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,26 @@
gather_facts: no
collections:
- community.general
vars_files:
- vars.yml

tasks:
- name: Import eco-vcenter credentials
ansible.builtin.include_vars:
file: ../../integration_config.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_vcsim
tags: integration-ci

- name: Import vmware_license_info role
ansible.builtin.import_role:
name: vmware_license_info
tags:
- integration-ci
- eco-vcenter-ci
3 changes: 0 additions & 3 deletions tests/integration/targets/vmware_license_info/runme.sh

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,26 @@
gather_facts: no
collections:
- community.general
vars_files:
- vars.yml
tasks:

- name: Import eco-vcenter credentials
ansible.builtin.include_vars:
file: ../../integration_config.yml
tags: eco-vcenter-ci

- name: Import simulator vars
ansible.builtin.include_vars:
file: vars.yml
tags: integration-ci

- name: Rest
ansible.builtin.import_role:
name: prepare_rest
tags: integration-ci

- name: VM list group by clusters
ansible.builtin.import_role:
name: vmware_vm_list_group_by_clusters_info
tags:
- integration-ci
- eco-vcenter-ci

This file was deleted.

19 changes: 19 additions & 0 deletions tools/prepare_symlinks.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
- name: Create symlink to the runme.sh script in specific target directories
hosts: localhost
tasks:
- name: Find all target directories with specific prefix
ansible.builtin.find:
paths: ../tests/integration/targets
recurse: false
file_type: directory
register: target_dirs

- name: Create symlink and set executable permission in each target directory with prefix 'vmware_'
ansible.builtin.file:
src: "{{ playbook_dir }}/../tests/integration/targets/runme.sh"
dest: "{{ item.path }}/runme.sh"
state: link
mode: '0755'
force: true
loop: "{{ target_dirs.files }}"
when: item.path | basename | regex_search('^vmware_')

0 comments on commit ae38e7e

Please sign in to comment.