Refactor way tests info are passed from sed to file with lookup

The idea is to avoid modifying test targets from the workflow to prevent
ansible-test to think every tests needs to be run.
This commit is contained in:
Laurent Indermuehle 2023-01-05 19:04:51 +01:00
commit 98ce2af28c
No known key found for this signature in database
GPG key ID: 93FA944C9F34DD09
7 changed files with 35 additions and 22 deletions

View file

@ -15,9 +15,6 @@ on:
- cron: '0 6 * * *' - cron: '0 6 * * *'
env:
config_file: "tests/integration/targets/setup_controller/defaults/main.yml"
jobs: jobs:
# sanity: # sanity:
# name: "Sanity (Ansible: ${{ matrix.ansible }})" # name: "Sanity (Ansible: ${{ matrix.ansible }})"
@ -128,9 +125,9 @@ jobs:
ansible-core-version: ${{ matrix.ansible }} ansible-core-version: ${{ matrix.ansible }}
pre-test-cmd: >- pre-test-cmd: >-
>&2 echo Setting db_engine_version to ${{ matrix.db_engine_version }}...; >&2 echo Setting db_engine_version to ${{ matrix.db_engine_version }}...;
sed -i 's/^db_engine_version:.*/db_engine_version: [${{ matrix.db_engine_version }}]/' ${{ env.config_file }} echo ${{ matrix.db_engine_version }} > tests/integration/db_engine_version
>&2 echo Setting Connector version to ${{ matrix.connector }}...; >&2 echo Setting Connector version to ${{ matrix.connector }}...;
sed -i 's/^python_packages:.*/python_packages: [${{ matrix.connector }}]/' ${{ env.config_file }} echo ${{ matrix.connector }} > tests/integration/connector
target-python-version: ${{ matrix.python }} target-python-version: ${{ matrix.python }}
testing-type: integration testing-type: integration

View file

@ -1,5 +1,7 @@
.PHONY: test-integration .PHONY: test-integration
test-integration: test-integration:
echo "mysql:8.0.22" > tests/integration/db_engine_version
echo "pymysql==0.9.3" > tests/integration/connector
podman run \ podman run \
--detach \ --detach \
--name primary \ --name primary \
@ -32,7 +34,9 @@ test-integration:
--volume ./tests/integration/targets/setup_mysql/replica2/:/etc/mysql/conf.d/ \ --volume ./tests/integration/targets/setup_mysql/replica2/:/etc/mysql/conf.d/ \
mysql:8.0.22 mysql:8.0.22
while ! podman healthcheck run primary && [[ "$$SECONDS" -lt 120 ]]; do sleep 1; done while ! podman healthcheck run primary && [[ "$$SECONDS" -lt 120 ]]; do sleep 1; done
-set -x; ansible-test integration -v --color --coverage --retry-on-error --continue-on-error --diff --docker --docker-network podman --python 3.8; set +x -set -x; ansible-test integration -v --color --coverage --retry-on-error --continue-on-error --diff --docker --docker-network podman --python 3.8; set +x
rm tests/integration/db_engine_version
rm tests/integration/connector
podman stop --time 0 --ignore primary podman stop --time 0 --ignore primary
podman stop --time 0 --ignore replica1 podman stop --time 0 --ignore replica1
podman stop --time 0 --ignore replica2 podman stop --time 0 --ignore replica2

View file

@ -1,4 +1,2 @@
--- ---
home_dir: "{{ playbook_dir }}/root" home_dir: "{{ playbook_dir }}/root"
db_engine_version: mysql:8.0.22
python_packages: [pymysql == 0.9.3]

View file

@ -0,0 +1,5 @@
---
- name: "{{ role_name }} | Connector | Install python packages"
ansible.builtin.pip:
name: "{{ connector_name }}"

View file

@ -11,11 +11,6 @@
environment: environment:
DEBIAN_FRONTEND: noninteractive DEBIAN_FRONTEND: noninteractive
- name: "{{ role_name }} | install | install python packages"
ansible.builtin.pip:
name: "{{ python_packages }}"
register: connector
- name: "{{ role_name }} | install | Ensure fake root folder" - name: "{{ role_name }} | install | Ensure fake root folder"
ansible.builtin.file: ansible.builtin.file:
path: "{{ playbook_dir }}/root" path: "{{ playbook_dir }}/root"

View file

@ -11,3 +11,7 @@
- name: Set variables - name: Set variables
ansible.builtin.import_tasks: ansible.builtin.import_tasks:
file: setvars.yml file: setvars.yml
- name: Install MySQL connector
ansible.builtin.import_tasks:
file: connector.yml

View file

@ -1,20 +1,29 @@
--- ---
- name: "{{ role_name }} | setvars | Extract Podman/Docker Network Gateway" - name: "{{ role_name }} | Setvars | Extract Podman/Docker Network Gateway"
ansible.builtin.shell: ansible.builtin.shell:
cmd: ip route|grep default|awk '{print $3}' cmd: ip route|grep default|awk '{print $3}'
register: ip_route_output register: ip_route_output
- name: "{{ role_name }} | setvars | Set Fact" - name: "{{ role_name }} | Setvars | Set Fact"
ansible.builtin.set_fact: ansible.builtin.set_fact:
connector_name: "{{ connector.name.0 }}"
gateway_addr: "{{ ip_route_output.stdout }}" gateway_addr: "{{ ip_route_output.stdout }}"
db_engine: "{{ db_engine_version | split(':') | first }}" connector_name: >
db_version: "{{ db_engine_version | split(':') | last }}" {{ lookup(
'file',
'/root/ansible_collections/community/mysql/tests/integration/connector'
) }}
db_engine_version: >
{{ lookup(
'file',
'/root/ansible_collections/community/mysql/tests/integration/db_engine_version'
) }}"
- name: "{{ role_name }} | setvars | Set Fact using above facts" - name: "{{ role_name }} | Setvars | Set Fact using above facts"
ansible.builtin.set_fact: ansible.builtin.set_fact:
connector_ver: "{{ connector_name.split('=')[2].strip() }}" connector_ver: "{{ connector_name.split('=')[2].strip() }}"
db_engine: "{{ db_engine_version | split(':') | first }}"
db_version: "{{ db_engine_version | split(':') | last }}"
mysql_command: >- mysql_command: >-
mysql mysql
-h{{ gateway_addr }} -h{{ gateway_addr }}
@ -29,9 +38,10 @@
-p{{ mysql_password }} -p{{ mysql_password }}
--protocol=tcp --protocol=tcp
- name: "{{ role_name }} | setvars | Debug connector info" - name: "{{ role_name }} | Setvars | Output test informations"
ansible.builtin.debug: ansible.builtin.debug:
msg: > msg: >
Connector name: {{ connector_name }}, Connector name: {{ connector_name }},
Connector version: {{ connector_ver }} Connector version: {{ connector_ver }},
db_engine: {{ db_engine }} db_engine: {{ db_engine }},
db_version: {{ db_version }}