From f26d3a571bbeda2e82a5c29edae58f4810802984 Mon Sep 17 00:00:00 2001 From: Lena Garber <114949949+lgarber-akamai@users.noreply.github.com> Date: Mon, 25 Nov 2024 09:34:34 -0500 Subject: [PATCH 1/2] Use linode_api4 API error handling logic; remove format_api_error(...) helper (#624) * Use linode_api4 API error handling logic; remove format_api_error(...) helper * Pin docs Python version --- .github/workflows/docs.yml | 2 +- Makefile | 2 +- plugins/module_utils/linode_common.py | 3 +-- plugins/module_utils/linode_helper.py | 7 ------ requirements.txt | 2 +- .../targets/api_error/tasks/main.yaml | 24 +++++++++++++++++++ 6 files changed, 28 insertions(+), 12 deletions(-) create mode 100644 tests/integration/targets/api_error/tasks/main.yaml diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index f99fc390..9f264800 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -66,7 +66,7 @@ jobs: - name: setup python 3 uses: actions/setup-python@v5 with: - python-version: '3.x' + python-version: '3.10' - name: install dependencies run: make deps diff --git a/Makefile b/Makefile index a5d6dcf2..60e3a4c3 100644 --- a/Makefile +++ b/Makefile @@ -27,7 +27,7 @@ install: build ansible-galaxy collection install *.tar.gz --force -p $(COLLECTIONS_PATH) deps: - pip install -r requirements.txt -r requirements-dev.txt --upgrade + pip install -r requirements.txt -r requirements-dev.txt --force lint: pylint plugins diff --git a/plugins/module_utils/linode_common.py b/plugins/module_utils/linode_common.py index b05dfc95..d5f35f3a 100644 --- a/plugins/module_utils/linode_common.py +++ b/plugins/module_utils/linode_common.py @@ -7,7 +7,6 @@ import polling from ansible_collections.linode.cloud.plugins.module_utils.linode_helper import ( - format_api_error, format_generic_error, ) @@ -159,7 +158,7 @@ def __init__( res = self.exec_module(**self.module.params) except ApiError as err: # We don't want to return a stack trace for an API error - self.fail(msg=format_api_error(err)) + self.fail(msg=f"Error from Linode API: {str(err)}") except polling.TimeoutException as err: self.fail( msg="failed to wait for condition: timeout period expired" diff --git a/plugins/module_utils/linode_helper.py b/plugins/module_utils/linode_helper.py index f2d69ed4..0429881b 100644 --- a/plugins/module_utils/linode_helper.py +++ b/plugins/module_utils/linode_helper.py @@ -5,7 +5,6 @@ import linode_api4 import polling from linode_api4 import ( - ApiError, LinodeClient, LKENodePool, LKENodePoolNode, @@ -329,12 +328,6 @@ def get_all_paginated( return result -def format_api_error(err: ApiError) -> str: - """Formats an API error into a readable string""" - - return f"Error from Linode API: [{err.status}] {';'.join(err.errors)}" - - def format_generic_error(err: Exception) -> str: """Formats a generic error into a readable string""" diff --git a/requirements.txt b/requirements.txt index d1030e00..3490bb5b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ -linode-api4>=5.22.0 +linode-api4>=5.24.0 polling==0.3.2 ansible-specdoc>=0.0.15 diff --git a/tests/integration/targets/api_error/tasks/main.yaml b/tests/integration/targets/api_error/tasks/main.yaml new file mode 100644 index 00000000..afeb74b7 --- /dev/null +++ b/tests/integration/targets/api_error/tasks/main.yaml @@ -0,0 +1,24 @@ +- name: api_error + block: + - name: Attempt to create an instance with validation errors + linode.cloud.instance: + region: fake-region + type: g6-fake-plan + state: present + register: failing_request + failed_when: '"msg" not in failing_request' + + - name: Ensure the error message is formatted as expected + assert: + that: + - failing_request.changed == False + - 'failing_request.msg.startswith("Error from Linode API: POST /v4beta/linode/instances: [400]")' + - '"type: A valid plan type by that ID was not found" in failing_request.msg' + - '"region: region is not valid" in failing_request.msg' + + environment: + LINODE_UA_PREFIX: '{{ ua_prefix }}' + LINODE_API_TOKEN: '{{ api_token }}' + LINODE_API_URL: '{{ api_url }}' + LINODE_API_VERSION: '{{ api_version }}' + LINODE_CA: '{{ ca_file or "" }}' From 3b07f45e98fcb19cbd565595018512f4b5016466 Mon Sep 17 00:00:00 2001 From: Lena Garber <114949949+lgarber-akamai@users.noreply.github.com> Date: Mon, 25 Nov 2024 13:54:20 -0500 Subject: [PATCH 2/2] Pin Python version in docs YAML (#625) --- .github/workflows/docs.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 9f264800..754d0506 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -2,6 +2,9 @@ name: Run Documentation Validation on: pull_request +env: + DEFAULT_PYTHON_VERSION: "3.10" + jobs: test-templated-docs: runs-on: ubuntu-latest @@ -66,7 +69,7 @@ jobs: - name: setup python 3 uses: actions/setup-python@v5 with: - python-version: '3.10' + python-version: ${{ env.DEFAULT_PYTHON_VERSION }} - name: install dependencies run: make deps