|
65 | 65 | - preferred_models is iterable |
66 | 66 | - preferred_models is not mapping |
67 | 67 | - preferred_models | length > 0 |
68 | | - - preferred_models | unique | length < (preferred_models | length) |
| 68 | + - preferred_models | map('upper') | unique | length < (preferred_models | length) |
69 | 69 | ansible.builtin.debug: |
70 | 70 | 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. |
73 | 73 | 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 -%} |
76 | 77 | {%- set _ = duplicates.append(item) -%} |
77 | 78 | {%- endif -%} |
78 | 79 | {%- endfor -%} |
|
116 | 117 | status_code: 200 |
117 | 118 | register: login_result |
118 | 119 | rescue: |
119 | | - - name: Provide a clear error message for login failure |
| 120 | + - name: Provide a clear error message for authentication failure |
120 | 121 | ansible.builtin.fail: |
121 | 122 | msg: >- |
122 | 123 | Login failed for user '{{ quads_username }}'. |
123 | 124 | 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 |
126 | 127 | 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') }} |
128 | 131 | 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 |
129 | 140 |
|
130 | 141 | - name: Set token fact from login response |
131 | 142 | ansible.builtin.set_fact: |
|
326 | 337 | status_code: 200 |
327 | 338 | register: existing_assignment_details |
328 | 339 |
|
| 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 | + |
329 | 352 | - name: Update assignment description if it already exists |
330 | 353 | when: assignment_creation_result.status == 403 |
331 | 354 | ansible.builtin.uri: |
|
0 commit comments