Skip to content

Commit 404384d

Browse files
lb_tests: two-phase amphora runs with guest cleanup between phases
Run isolation-sensitive Amphora LB cases first on a clean cluster, then the remainder, with best-effort e2e/LB cleanup between phases. Truncate converted allowlist/blocklist files so manual reruns cannot accumulate stale regex lines. Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent 2becb76 commit 404384d

6 files changed

Lines changed: 129 additions & 9 deletions

File tree

‎collection/stages/roles/lb_tests/defaults/main.yml‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,6 @@ lb_allowlist_file: 'files/openstack-test-lb-allowlist.yaml'
44
lb_amphora_allowlist_file: "{{ role_path }}/files/openstack-test-lb-amphora-allowlist.yaml"
55
lb_ovn_allowlist_file: "{{ role_path }}/files/openstack-test-lb-ovn-allowlist.yaml"
66
lb_blocklist_file: "{{ role_path }}/files/openstack-test-lb-ingress-blocklist.yaml"
7+
lb_amphora_isolated_allowlist_file: "{{ role_path }}/files/openstack-test-lb-amphora-isolated-allowlist.yaml"
8+
# Two-phase amphora: run isolation-sensitive LB cases first, then the rest.
9+
lb_amphora_two_phase_tests: true
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
---
2+
# Run first on a clean cluster (see lb_tests two-phase amphora flow).
3+
# Order of keys defines serial run order when filter_tests_list applies this allowlist.
4+
".*create a UDP Amphora LoadBalancer when a UDP svc with type:LoadBalancer is created on Openshift":
5+
note: "UDP Amphora basic (before other cases allocate shared LBs)"
6+
".*apply lb-method on TCP Amphora LoadBalancer when a TCP svc with monitors and ETP:Local is created on Openshift":
7+
note: "TCP Amphora lb-method + monitors"
8+
".*apply lb-method on UDP Amphora LoadBalancer when a UDP svc with monitors and ETP:Local is created on Openshift":
9+
note: "UDP Amphora lb-method + monitors"
10+
".*limit service access on an UDP Amphora LoadBalancer when an UDP LoadBalancer svc setting the loadBalancerSourceRanges spec is created on Openshift":
11+
note: "UDP Amphora loadBalancerSourceRanges"
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
---
2+
# Best-effort guest cleanup between LB test phases (max-shared-lb / Octavia slots).
3+
- name: List e2e-test-openstack projects
4+
ansible.builtin.shell: |
5+
set -o pipefail
6+
oc get projects -o name 2>/dev/null | sed 's|project/||' | grep -E '^e2e-test-openstack-' || true
7+
environment:
8+
KUBECONFIG: "{{ kubeconfig }}"
9+
register: lb_cleanup_e2e_projects_cmd
10+
changed_when: false
11+
failed_when: false
12+
13+
- name: List shard IngressControllers
14+
ansible.builtin.shell: |
15+
set -o pipefail
16+
oc get ingresscontroller -n openshift-ingress-operator -o name 2>/dev/null | grep shard- || true
17+
environment:
18+
KUBECONFIG: "{{ kubeconfig }}"
19+
register: lb_cleanup_shard_ics_cmd
20+
changed_when: false
21+
failed_when: false
22+
23+
- name: Delete stale e2e-test-openstack projects (async)
24+
ansible.builtin.command:
25+
argv:
26+
- oc
27+
- delete
28+
- project
29+
- "{{ item }}"
30+
- --wait=false
31+
environment:
32+
KUBECONFIG: "{{ kubeconfig }}"
33+
loop: "{{ lb_cleanup_e2e_projects_cmd.stdout_lines | default([]) }}"
34+
loop_control:
35+
label: "{{ item }}"
36+
register: lb_cleanup_delete_projects
37+
changed_when: lb_cleanup_delete_projects.rc == 0
38+
failed_when: false
39+
when: lb_cleanup_e2e_projects_cmd.stdout_lines | default([]) | length > 0
40+
41+
- name: Delete shard IngressControllers left by ingress LB tests (async)
42+
ansible.builtin.command:
43+
argv:
44+
- oc
45+
- delete
46+
- "{{ item }}"
47+
- --wait=false
48+
environment:
49+
KUBECONFIG: "{{ kubeconfig }}"
50+
loop: "{{ lb_cleanup_shard_ics_cmd.stdout_lines | default([]) }}"
51+
loop_control:
52+
label: "{{ item }}"
53+
register: lb_cleanup_delete_ics
54+
changed_when: lb_cleanup_delete_ics.rc == 0
55+
failed_when: false
56+
when: lb_cleanup_shard_ics_cmd.stdout_lines | default([]) | length > 0
57+
58+
- name: Delete Octavia load balancers in ERROR state
59+
ansible.builtin.shell: |
60+
set -o pipefail
61+
openstack loadbalancer list -f value -c id -c provisioning_status 2>/dev/null | while read -r id st; do
62+
if [ "$st" = "ERROR" ]; then
63+
openstack loadbalancer delete "$id" --wait 2>/dev/null || true
64+
fi
65+
done
66+
environment:
67+
OS_CLOUD: "{{ user_cloud }}"
68+
changed_when: false
69+
failed_when: false

‎collection/stages/roles/lb_tests/tasks/main.yml‎

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
---
22
# include_role(openstack_test) re-templates vars; role_path there is openstack_test, not lb_tests.
3+
- name: Best-effort cleanup before LB tests
4+
ansible.builtin.include_tasks: cleanup_lb_test_leftovers.yml
5+
36
- name: Materialize LB allow/block paths for nested openstack_test role
47
ansible.builtin.set_fact:
58
lb_ingress_blocklist_resolved: "{{ lb_blocklist_file }}"
69
lb_amphora_allowlist_resolved: "{{ lb_amphora_allowlist_file }}"
10+
lb_amphora_isolated_allowlist_resolved: "{{ lb_amphora_isolated_allowlist_file }}"
711
lb_ovn_allowlist_resolved: "{{ lb_ovn_allowlist_file }}"
812

913
- name: Get install-config content to obtain the 1st machineCIDR
@@ -31,16 +35,32 @@
3135
max_shared_lb: "2"
3236
log_directory: "{{ artifacts_dir }}/lb_amphora_sourceip"
3337

34-
- name: Run Openstack-Test on OCP with Amphora LoadBalancer provider and sourceIP lb method
35-
ansible.builtin.include_role:
36-
name: shiftstack.stages.openstack_test
38+
- name: Amphora LB tests — phase 1 (isolation-sensitive cases on clean slate)
39+
when: lb_amphora_two_phase_tests | bool
40+
block:
41+
- name: Run amphora isolated LB openstack-test phase
42+
ansible.builtin.include_tasks: run_amphora_openstack_test.yml
43+
vars:
44+
lb_amphora_openstack_test_results_dir: "{{ artifacts_dir }}/lb_amphora_sourceip_isolated"
45+
lb_amphora_openstack_test_allowlist: "{{ lb_amphora_isolated_allowlist_resolved }}"
46+
lb_amphora_openstack_test_blocklist: "{{ lb_ingress_blocklist_resolved }}"
47+
lb_amphora_openstack_testsuite_name: openstack_tests_lb_amphora_sourceip_isolated
48+
lb_amphora_openstack_reset_result_dir: true
49+
50+
- name: Cleanup guest LB leftovers between amphora phases
51+
ansible.builtin.include_tasks: cleanup_lb_test_leftovers.yml
52+
53+
- name: Amphora LB tests — phase 2 (remaining amphora cases)
54+
ansible.builtin.include_tasks: run_amphora_openstack_test.yml
3755
vars:
38-
openstack_test_results_dir: "{{ artifacts_dir }}/lb_amphora_sourceip"
39-
openstack_tests_allowlist_file: "{{ lb_amphora_allowlist_resolved }}"
40-
openstack_tests_blocklist_file: "{{ lb_ingress_blocklist_resolved }}"
41-
openstack_test_ote_run_serial: true
42-
openstack_testsuite_name: openstack_tests_lb_amphora_sourceip
43-
openstack_reset_result_dir: no # As we want to keep the logs generated in the previous step
56+
lb_amphora_openstack_test_results_dir: "{{ artifacts_dir }}/lb_amphora_sourceip"
57+
lb_amphora_openstack_test_allowlist: "{{ lb_amphora_allowlist_resolved }}"
58+
lb_amphora_openstack_test_blocklist: >-
59+
{{ lb_ingress_blocklist_resolved ~ ',' ~ lb_amphora_isolated_allowlist_resolved
60+
if (lb_amphora_two_phase_tests | bool)
61+
else lb_ingress_blocklist_resolved }}
62+
lb_amphora_openstack_testsuite_name: openstack_tests_lb_amphora_sourceip
63+
lb_amphora_openstack_reset_result_dir: false
4464

4565
- name: Enable OVN provider on cloud-provider-config
4666
ansible.builtin.include_tasks: change_cloud_cm.yml
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
---
2+
# Shared openstack_test invocation for amphora LB (single or two-phase).
3+
- name: Run Openstack-Test on OCP with Amphora LoadBalancer provider and sourceIP lb method
4+
ansible.builtin.include_role:
5+
name: shiftstack.stages.openstack_test
6+
vars:
7+
openstack_test_results_dir: "{{ lb_amphora_openstack_test_results_dir }}"
8+
openstack_tests_allowlist_file: "{{ lb_amphora_openstack_test_allowlist }}"
9+
openstack_tests_blocklist_file: "{{ lb_amphora_openstack_test_blocklist }}"
10+
openstack_test_ote_run_serial: true
11+
openstack_testsuite_name: "{{ lb_amphora_openstack_testsuite_name }}"
12+
openstack_reset_result_dir: "{{ lb_amphora_openstack_reset_result_dir | default(false) }}"

‎collection/tools/roles/tools_openshift_tests/tasks/convert_yaml_tests_file_to_txt.yml‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@
88
yaml_testslist: "{{ yaml_testslist[discovered_openshift_release][discovered_ocp_network_type] }}"
99
when: yaml_format_based_on_ocp_version|default(False)
1010

11+
- name: Remove stale "{{ output_tests_list }}" before rewrite
12+
ansible.builtin.file:
13+
path: "{{ output_tests_list }}"
14+
state: absent
15+
1116
- name: Create the "{{ output_tests_list }}" file
1217
ansible.builtin.file:
1318
path: "{{ output_tests_list }}"

0 commit comments

Comments
 (0)