## Description
<!-- **Please link some issue here describing what you are trying to achieve.**
In case there is no issue present for your PR, please consider creating one.
At least please give us some description what you are trying to achieve and why your change is needed. -->
relates to #1234
## Checklist
- [ ] Issue was linked above
- [ ] Code format was applied: `make fmt`
- [ ] Examples were added / adjusted (see `examples/` directory)
- [x] Docs are up-to-date: `make generate-docs` (will be checked by CI)
- [ ] Unit tests got implemented or updated
- [ ] Acceptance tests got implemented or updated (see e.g. [here](f5f99d1709/stackit/internal/services/dns/dns_acc_test.go))
- [x] Unit tests are passing: `make test` (will be checked by CI)
- [x] No linter issues: `make lint` (will be checked by CI)
Co-authored-by: Marcel S. Henselin <marcel.henselin@stackit.cloud>
Reviewed-on: #97
204 lines
7.7 KiB
YAML
204 lines
7.7 KiB
YAML
name: CleanUp Project Resources
|
|
description: "Acceptance Testing CleanUp"
|
|
|
|
inputs:
|
|
project_id:
|
|
description: "STACKIT project ID for tests"
|
|
required: true
|
|
|
|
region:
|
|
description: "STACKIT region for tests"
|
|
default: 'eu01'
|
|
required: true
|
|
|
|
tf_resource_prefix:
|
|
description: "prefix in resource names"
|
|
default: 'tf-acc-'
|
|
required: true
|
|
|
|
service_account_json_content:
|
|
description: "STACKIT service account JSON file contents"
|
|
required: true
|
|
default: ''
|
|
|
|
service_account_json_content_b64:
|
|
description: "STACKIT service account JSON file contents"
|
|
required: true
|
|
default: ''
|
|
|
|
list_only:
|
|
description: "only list resources, DO NOT delete"
|
|
required: true
|
|
default: 'true'
|
|
|
|
log_level:
|
|
description: "Log Level"
|
|
required: true
|
|
default: 'warning'
|
|
|
|
outputs:
|
|
cli-version:
|
|
description: "stackit cli version"
|
|
value: ${{ steps.stackit_version.outputs.version }}
|
|
|
|
pre_count:
|
|
description: "number of resources found"
|
|
value: ${{ steps.retrieve_pre.outputs.count }}
|
|
|
|
post_count:
|
|
description: "number of resources found"
|
|
value: ${{ steps.retrieve_post.outputs.count }}
|
|
|
|
runs:
|
|
using: "composite"
|
|
steps:
|
|
- name: Install needed tools
|
|
shell: bash
|
|
run: |
|
|
echo "::group::apt install"
|
|
set -e
|
|
apt-get -y -qq update >apt_update.log 2>apt_update_err.log
|
|
if [ $? -ne 0 ]; then
|
|
cat apt_update.log apt_update_err.log
|
|
fi
|
|
apt-get -y -qq install curl gnupg jq >apt_get.log 2>apt_get_err.log
|
|
if [ $? -ne 0 ]; then
|
|
cat apt_get.log apt_get_err.log
|
|
fi
|
|
echo "::endgroup::"
|
|
|
|
echo "::group::apt add source"
|
|
curl https://packages.stackit.cloud/keys/key.gpg | gpg --dearmor -o /usr/share/keyrings/stackit.gpg
|
|
echo "deb [signed-by=/usr/share/keyrings/stackit.gpg] https://packages.stackit.cloud/apt/cli stackit main" | tee -a /etc/apt/sources.list.d/stackit.list
|
|
echo "::endgroup::"
|
|
|
|
echo "::group::apt install stackit cli"
|
|
apt-get -y -qq update >apt_update.log 2>apt_update_err.log
|
|
if [ $? -ne 0 ]; then
|
|
cat apt_update.log apt_update_err.log
|
|
fi
|
|
apt-get -y -qq install stackit >apt_get.log 2>apt_get_err.log
|
|
if [ $? -ne 0 ]; then
|
|
cat apt_get.log apt_get_err.log
|
|
fi
|
|
echo "::endgroup::"
|
|
|
|
- name: Check stackit cli version
|
|
id: stackit_version
|
|
run: |
|
|
set -e
|
|
VERSION=$(stackit --version | grep "Version:" | cut -d " " -f 2)
|
|
echo "stackit cli version: ${VERSION}"
|
|
echo "version=${VERSION}" >> $GITHUB_OUTPUT
|
|
shell: bash
|
|
|
|
- name: Creating service_account file from json input
|
|
if: inputs.service_account_json_content != ''
|
|
shell: bash
|
|
run: |
|
|
echo "::group::create service account file"
|
|
set -e
|
|
set -o pipefail
|
|
|
|
echo "${{ inputs.service_account_json_content }}" > .svc_acc.json
|
|
echo "::endgroup::"
|
|
|
|
- name: Creating service_account file from base64 json input
|
|
if: inputs.service_account_json_content_b64 != ''
|
|
shell: bash
|
|
run: |
|
|
echo "::group::create service account file"
|
|
set -e
|
|
set -o pipefail
|
|
|
|
echo "${{ inputs.service_account_json_content_b64 }}" | base64 -d > .svc_acc.json
|
|
echo "::endgroup::"
|
|
|
|
- name: Check service account file exists
|
|
shell: bash
|
|
run: |
|
|
set -e
|
|
if [[ ! -s .svc_acc.json ]]; then
|
|
echo "ERROR: service account file missing or empty"
|
|
exit 1
|
|
fi
|
|
|
|
- name: Retrieve resources before
|
|
id: retrieve_pre
|
|
run: |
|
|
echo "::group::retrieve resources"
|
|
set -e
|
|
echo "authenticating api"
|
|
STACKIT_SERVICE_ACCOUNT_KEY_PATH="${PWD}/.svc_acc.json"
|
|
export STACKIT_SERVICE_ACCOUNT_KEY_PATH
|
|
stackit auth activate-service-account --service-account-key-path .svc_acc.json
|
|
|
|
echo "SQL Server Flex resources:"
|
|
sql_res=$(stackit --verbosity ${{ inputs.log_level }} --project-id "${{ inputs.project_id }}" beta sqlserverflex instance list --output-format json | jq -r '.[] | select(.name | startswith("${{ inputs.tf_resource_prefix }}"))')
|
|
sql_count=$(echo "$sql_res" | jq -r '.id' | wc -l)
|
|
|
|
echo "PostgreSQL Flex resources:"
|
|
pg_res=$(stackit --verbosity ${{ inputs.log_level }} --project-id "${{ inputs.project_id }}" postgresflex instance list --output-format json | jq -r '.[] | select(.name | startswith("${{ inputs.tf_resource_prefix }}"))')
|
|
pg_count=$(echo "$pg_res" | jq -r '.id' | wc -l)
|
|
|
|
echo "Number of resources found: ${sql_count} SQL Server Flex, ${pg_count} PostgreSQL Flex"
|
|
echo "count=$(( ${pg_count} + ${sql_count} ))" >> $GITHUB_OUTPUT
|
|
echo "::endgroup::"
|
|
shell: bash
|
|
|
|
- name: Delete SQL Server Flex resources
|
|
if: ${{ inputs.list_only != 'true' }}
|
|
run: |
|
|
echo "::group::delete SQL Server Flex resources"
|
|
set -e
|
|
stackit --verbosity ${{ inputs.log_level }} auth activate-service-account --service-account-key-path .svc_acc.json
|
|
for s in $(stackit --verbosity ${{ inputs.log_level }} --project-id ${{ inputs.project_id }} beta sqlserverflex instance list --output-format json | jq -r '.[] | select(.name | startswith("${{ inputs.tf_resource_prefix }}")) | .id'); do stackit --verbosity ${{ inputs.log_level }} -y --project-id ${{ inputs.project_id }} beta sqlserverflex instance delete $s; done
|
|
echo "::endgroup::"
|
|
shell: bash
|
|
|
|
- name: Skip Delete SQL Server Flex resources
|
|
if: ${{ inputs.list_only == 'true' }}
|
|
run: |
|
|
set -e
|
|
echo "Skip deleting: list only mode"
|
|
shell: bash
|
|
|
|
- name: Delete PostgreSQL Flex resources
|
|
if: ${{ inputs.list_only != 'true' }}
|
|
run: |
|
|
echo "::group::delete PostgreSQL Flex resources"
|
|
set -e
|
|
stackit auth activate-service-account --service-account-key-path .svc_acc.json
|
|
for s in $(stackit --verbosity ${{ inputs.log_level }} --project-id ${{ inputs.project_id }} postgresflex instance list --output-format json | jq -r '.[] | select(.name | startswith("${{ inputs.tf_resource_prefix }}")) | .id'); do stackit --verbosity ${{ inputs.log_level }} -y --project-id ${{ inputs.project_id }} postgresflex instance delete "$s" --force; done
|
|
echo "::endgroup::"
|
|
shell: bash
|
|
|
|
- name: Skip Delete PostgreSQL Flex resources
|
|
if: ${{ inputs.list_only == 'true' }}
|
|
run: |
|
|
set -e
|
|
echo "Skip deleting: list only mode"
|
|
shell: bash
|
|
|
|
- name: Retrieve resources after
|
|
id: retrieve_post
|
|
run: |
|
|
echo "::group::retrieve resources"
|
|
set -e
|
|
echo "authenticating api"
|
|
STACKIT_SERVICE_ACCOUNT_KEY_PATH="${PWD}/.svc_acc.json"
|
|
export STACKIT_SERVICE_ACCOUNT_KEY_PATH
|
|
stackit auth activate-service-account --service-account-key-path .svc_acc.json
|
|
|
|
echo "SQL Server Flex resources:"
|
|
sql_res=$(stackit --verbosity ${{ inputs.log_level }} --project-id "${{ inputs.project_id }}" beta sqlserverflex instance list --output-format json | jq -r '.[] | select(.name | startswith("${{ inputs.tf_resource_prefix }}"))')
|
|
sql_count=$(echo "$sql_res" | jq -r '.id' | wc -l)
|
|
|
|
echo "PostgreSQL Flex resources:"
|
|
pg_res=$(stackit --verbosity ${{ inputs.log_level }} --project-id "${{ inputs.project_id }}" postgresflex instance list --output-format json | jq -r '.[] | select(.name | startswith("${{ inputs.tf_resource_prefix }}"))')
|
|
pg_count=$(echo "$pg_res" | jq -r '.id' | wc -l)
|
|
|
|
echo "Number of resources found: ${sql_count} SQL Server Flex, ${pg_count} PostgreSQL Flex"
|
|
echo "count=$(( ${pg_count} + ${sql_count} ))" >> $GITHUB_OUTPUT
|
|
echo "::endgroup::"
|
|
shell: bash
|