From 06ddc0628d08728dcf148ad12cc4b914473abc5a Mon Sep 17 00:00:00 2001 From: Jean-Christophe Fillion-Robin Date: Tue, 1 Oct 2024 00:52:43 -0400 Subject: [PATCH] fix: Update to MorphoCloud/MorphoCloudWorkflow@50aef03 List of MorphoCloudWorkflow changes: ``` $ git shortlog b303508..50aef03 --no-merges Jean-Christophe Fillion-Robin (2): feat: Rename command from "/delete" to "/delete_instance" feat: Add support for /delete_volume command ``` See https://github.com/MorphoCloud/MorphoCloudWorkflow/compare/b303508...50aef03 --- .github/actions/delete-volume/action.yml | 138 +++++++++++++++++++++++ .github/workflows/delete-volume.yml | 34 ++++++ issue-commands.md | 3 +- 3 files changed, 174 insertions(+), 1 deletion(-) create mode 100644 .github/actions/delete-volume/action.yml create mode 100644 .github/workflows/delete-volume.yml diff --git a/.github/actions/delete-volume/action.yml b/.github/actions/delete-volume/action.yml new file mode 100644 index 00000000..9562bbe7 --- /dev/null +++ b/.github/actions/delete-volume/action.yml @@ -0,0 +1,138 @@ +name: "Delete Volume" +description: "Delete Volume" +inputs: + os_cloud: + description: + "Name of the OpenStack cloud allocation to select openstack auth settings + defined in '.config/openstack/clouds.yaml'" + required: true + issue_number: + description: "Issue number" + required: true + instance_name_prefix: + description: "Instance name prefix" + required: true + volume_name_suffix: + description: "Volume name suffix" + required: true +runs: + using: "composite" + steps: + - name: Define volume name + id: define_volume_name + uses: ./.github/actions/define-volume-name + with: + issue_number: ${{ inputs.issue_number }} + suffix: ${{ vars.VOLUME_NAME_SUFFIX }} + + - name: Check volume exists + id: check_volume + uses: ./.github/actions/check-volume-exists + with: + os_cloud: ${{ inputs.os_cloud }} + volume_name: ${{ steps.define_volume_name.outputs.volume_name }} + + - name: comment (volume does not exist) + if: ${{ steps.check_volume.outputs.exists == 'false' }} + uses: peter-evans/create-or-update-comment@v4.0.0 + with: + issue-number: ${{ github.event.issue.number }} + body: | + ### Command Results ❌ + + `/delete_volume` command failed because **${{ steps.define_volume_name.outputs.volume_name }}** volume does not exist. + + - name: Define instance name + id: define + uses: ./.github/actions/define-instance-name + with: + prefix: ${{ inputs.instance_name_prefix }} + issue_number: ${{ inputs.issue_number }} + + - name: Check instance exists + id: check_instance + uses: ./.github/actions/check-instance-exists + with: + os_cloud: ${{ inputs.os_cloud }} + instance_name: ${{ steps.define.outputs.instance_name }} + + - name: Detach Volume + if: ${{ steps.check_instance.outputs.exists == 'true' }} + id: detach_volume + shell: bash + run: | + source ~/venv/bin/activate + + volume_id=$(openstack volume list -f json | \ + jq \ + --arg volume_name "$VOLUME_NAME" \ + -c '.[] | select(.Name == $volume_name)' | \ + jq -r '.ID' | tail -1) + echo "volume_id [$volume_id]" + + instance_id=$(openstack server list -f json | \ + jq \ + --arg instance_name "$INSTANCE_NAME" \ + -c '.[] | select(.Name == $instance_name)' | \ + jq -r '.ID' | tail -1) + echo "instance_id [$instance_id]" + + openstack server remove volume \ + $instance_id \ + $volume_id + env: + OS_CLOUD: ${{ vars.MORPHOCLOUD_OS_CLOUD }} + INSTANCE_NAME: ${{ steps.define.outputs.instance_name }} + VOLUME_NAME: ${{ steps.define_volume_name.outputs.volume_name }} + + - name: comment (failed to detach volume) + if: ${{ steps.detach_volume.outcome == 'failure' && failure() }} + uses: peter-evans/create-or-update-comment@v4.0.0 + with: + issue-number: ${{ github.event.issue.number }} + body: | + ### Command Results ❌ + + Failed to detach volume **${{ steps.define_volume_name.outputs.volume_name }}** + from instance **${{ steps.define_volume_name.outputs.volume_name }}**. + + See details at https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }} + + - name: Delete Volume + id: delete_volume + shell: bash + run: | + source ~/venv/bin/activate + + volume_id=$(openstack volume list -f json | \ + jq \ + --arg volume_name "$VOLUME_NAME" \ + -c '.[] | select(.Name == $volume_name)' | \ + jq -r '.ID' | tail -1) + echo "volume_id [$volume_id]" + + openstack volume delete $volume_id + env: + OS_CLOUD: ${{ vars.MORPHOCLOUD_OS_CLOUD }} + VOLUME_NAME: ${{ steps.define_volume_name.outputs.volume_name }} + + - name: comment (failed to delete volume) + if: ${{ steps.delete_volume.outcome == 'failure' && failure() }} + uses: peter-evans/create-or-update-comment@v4.0.0 + with: + issue-number: ${{ github.event.issue.number }} + body: | + ### Command Results ❌ + + Failed to delete volume **${{ steps.define_volume_name.outputs.volume_name }}**. + + See details at https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }} + + - name: command results comment (success) + uses: peter-evans/create-or-update-comment@v4.0.0 + with: + issue-number: ${{ inputs.issue_number }} + body: | + ### Command Results ✅ + + Volume **${{ steps.define_volume_name.outputs.volume_name }}** successfully deleted. diff --git a/.github/workflows/delete-volume.yml b/.github/workflows/delete-volume.yml new file mode 100644 index 00000000..11a98069 --- /dev/null +++ b/.github/workflows/delete-volume.yml @@ -0,0 +1,34 @@ +name: Delete Volume + +on: + issue_comment: + types: [created] + +jobs: + create: + runs-on: self-hosted + if: + ${{ !github.event.issue.pull_request && ( + contains(github.event.comment.body, '/delete_volume') ) }} + steps: + - name: delete_volume command + id: delete_volume_command + uses: github/command@v1.2.0 + with: + command: "/delete_volume" + reaction: "rocket" + allowed_contexts: "issue" + permissions: "write,maintain,admin" + allowlist: "${{ vars.MORPHOCLOUD_GITHUB_ADMINS }}" + + - uses: actions/checkout@v4 + + - name: Delete volume + id: delete_volume + if: ${{ steps.delete_volume_command.outputs.continue == 'true' }} + uses: ./.github/actions/delete-volume + with: + os_cloud: ${{ vars.MORPHOCLOUD_OS_CLOUD }} + issue_number: ${{ github.event.issue.number }} + instance_name_prefix: ${{ vars.INSTANCE_NAME_PREFIX }} + volume_name_suffix: ${{ vars.VOLUME_NAME_SUFFIX }} diff --git a/issue-commands.md b/issue-commands.md index 81a65784..32fdd07f 100644 --- a/issue-commands.md +++ b/issue-commands.md @@ -10,5 +10,6 @@ may be entered per comment._ | `/encode_email` | Update issue description obfuscating email. | Issue creator, Admin | | `/decode_email` | Update issue description deobfuscating email. | Issue creator, Admin | | `/email` | Send email to _Issue creator_ with connection URL. | Issue creator, Admin | -| `/create` | Create the instance. | Admin | +| `/create` | Create the instance and associated volume. | Admin | | `/delete_instance` | Delete the instance. | Admin | +| `/delete_volume` | Delete the volume. | Admin |