Skip to content

Commit 80d027c

Browse files
committed
fix: several other edge cases.
* Fix empty array crash when assignment creation returns 403 with no existing assignments * Fix network error handling for DNS failures, timeouts, and connection issues * Fix case-insensitive duplicate detection for preferred_models * Remove duplicate "xe8640" from quads_config.yml (case-insensitive duplicate of "XE8640")
1 parent ffc21ec commit 80d027c

2 files changed

Lines changed: 32 additions & 10 deletions

File tree

quads_config.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ preferred_models:
2828
- "r720xd"
2929
- "7425"
3030
- "7525"
31-
- "xe8640"
3231
- "xe9680"
3332
- "r960"
3433
- "r7425"

quads_self_schedule.yml

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -65,14 +65,15 @@
6565
- preferred_models is iterable
6666
- preferred_models is not mapping
6767
- preferred_models | length > 0
68-
- preferred_models | unique | length < (preferred_models | length)
68+
- preferred_models | map('upper') | unique | length < (preferred_models | length)
6969
ansible.builtin.debug:
7070
msg: >-
71-
WARNING: Duplicate models detected in preferred_models list.
72-
This will cause redundant API calls.
71+
WARNING: Duplicate models detected in preferred_models list (case-insensitive).
72+
This will cause redundant API calls since models are converted to uppercase.
7373
Duplicates: {%- set duplicates = [] -%}
74-
{%- for item in preferred_models | unique -%}
75-
{%- if preferred_models.count(item) > 1 -%}
74+
{%- set upper_models = preferred_models | map('upper') | list -%}
75+
{%- for item in upper_models | unique -%}
76+
{%- if upper_models.count(item) > 1 -%}
7677
{%- set _ = duplicates.append(item) -%}
7778
{%- endif -%}
7879
{%- endfor -%}
@@ -116,16 +117,26 @@
116117
status_code: 200
117118
register: login_result
118119
rescue:
119-
- name: Provide a clear error message for login failure
120+
- name: Provide a clear error message for authentication failure
120121
ansible.builtin.fail:
121122
msg: >-
122123
Login failed for user '{{ quads_username }}'.
123124
Please verify the username and password in your quads_config.yml file are correct (401 Unauthorized).
124-
when: login_result.status == 401
125-
- name: Fail with the original error for other issues
125+
when: login_result.status is defined and login_result.status == 401
126+
- name: Provide error message for HTTP errors
126127
ansible.builtin.fail:
127-
msg: "An unexpected error occurred during login: {{ login_result }}"
128+
msg: >-
129+
Login failed with HTTP status {{ login_result.status }}.
130+
Error: {{ login_result.msg | default('Unknown error') }}
128131
when: login_result.status is defined and login_result.status != 401
132+
- name: Provide error message for network/connectivity issues
133+
ansible.builtin.fail:
134+
msg: >-
135+
Login failed - could not reach QUADS server at {{ base_api_url }}/login/
136+
Error: {{ login_result.msg | default('Connection failed') }}
137+
This may be a network connectivity issue, DNS failure, or the server may be down.
138+
Please verify the quads_api_server setting in quads_config.yml is correct.
139+
when: login_result.status is not defined
129140

130141
- name: Set token fact from login response
131142
ansible.builtin.set_fact:
@@ -326,6 +337,18 @@
326337
status_code: 200
327338
register: existing_assignment_details
328339

340+
- name: Verify existing assignment was found
341+
when: assignment_creation_result.status == 403
342+
ansible.builtin.assert:
343+
that:
344+
- existing_assignment_details.json is defined
345+
- existing_assignment_details.json | length > 0
346+
fail_msg: >-
347+
Assignment creation was forbidden (403), but no existing active assignment was found.
348+
This may indicate a permissions issue or server misconfiguration.
349+
Please contact your QUADS administrator.
350+
changed_when: false
351+
329352
- name: Update assignment description if it already exists
330353
when: assignment_creation_result.status == 403
331354
ansible.builtin.uri:

0 commit comments

Comments
 (0)