| # Copyright (c) 2022 VEXXHOST, Inc. |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); you may |
| # not use this file except in compliance with the License. You may obtain |
| # a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| # License for the specific language governing permissions and limitations |
| # under the License. |
| |
| - name: Terminate project |
| hosts: controllers |
| become: true |
| gather_facts: false |
| vars_prompt: |
| - name: project_id |
| prompt: "Project name" |
| private: false |
| pre_tasks: |
| - name: Ensure that `ospurge` is installed |
| run_once: true |
| ansible.builtin.pip: |
| # https://review.opendev.org/c/x/ospurge/+/872665 |
| name: git+https://opendev.org/x/ospurge.git@fef70ecd8b51694d28a16d56fe95139043d972c1#egg=ospurge |
| state: present |
| tasks: |
| - name: Get list of regions with compute service |
| changed_when: false |
| run_once: true |
| ansible.builtin.shell: | |
| set -o posix |
| source /etc/profile.d/atmosphere.sh |
| openstack endpoint list \ |
| --service compute \ |
| --interface public \ |
| --column Region \ |
| --format value |
| args: |
| executable: /bin/bash |
| environment: |
| OS_CLOUD: atmosphere |
| register: _regions |
| |
| - name: Run a dry run of ospurge |
| run_once: true |
| ansible.builtin.command: |
| ospurge \ |
| --admin-role-name member \ |
| --verbose \ |
| --purge-project {{ project_id }} \ |
| --dry-run |
| environment: |
| OS_AUTH_URL: "https://{{ openstack_helm_endpoints_keystone_api_host }}" |
| OS_USERNAME: "admin-{{ openstack_helm_endpoints_region_name }}" |
| OS_PASSWORD: "{{ openstack_helm_endpoints_keystone_admin_password }}" |
| OS_PROJECT_NAME: admin |
| OS_USER_DOMAIN_NAME: Default |
| OS_PROJECT_DOMAIN_NAME: Default |
| OS_REGION_NAME: "{{ item }}" |
| loop: "{{ _regions.stdout_lines }}" |
| async: 60 |
| poll: 0 |
| register: _ospurge_dryrun |
| |
| - name: Wait for the async task to finish |
| run_once: true |
| ansible.builtin.async_status: |
| jid: "{{ item.ansible_job_id }}" |
| loop: "{{ _ospurge_dryrun.results }}" |
| register: job_result |
| until: job_result.finished |
| retries: 60 |
| delay: 1 |
| |
| - name: Confirm purge, press enter to continue |
| ansible.builtin.pause: |
| prompt: |- |
| {% for region in job_result.results %} |
| {{ region.item.item }}: |
| {{ region.stderr }} |
| |
| {% endfor %} |
| Press enter to continue or CTRL+C to cancel |
| |
| - name: Run ospurge |
| run_once: true |
| ansible.builtin.command: |
| ospurge \ |
| --admin-role-name member \ |
| --verbose \ |
| --purge-project {{ project_id }} \ |
| environment: |
| OS_AUTH_URL: "https://{{ openstack_helm_endpoints_keystone_api_host }}" |
| OS_USERNAME: "admin-{{ openstack_helm_endpoints_region_name }}" |
| OS_PASSWORD: "{{ openstack_helm_endpoints_keystone_admin_password }}" |
| OS_PROJECT_NAME: admin |
| OS_USER_DOMAIN_NAME: Default |
| OS_PROJECT_DOMAIN_NAME: Default |
| OS_REGION_NAME: "{{ item }}" |
| loop: "{{ _regions.stdout_lines }}" |
| async: 600 |
| poll: 0 |
| register: _ospurge |
| |
| - name: Wait for the async task to finish |
| run_once: true |
| ansible.builtin.async_status: |
| jid: "{{ item.ansible_job_id }}" |
| loop: "{{ _ospurge.results }}" |
| loop_control: |
| label: "{{ item.item }}" |
| register: job_result |
| until: job_result.finished |
| retries: 600 |
| delay: 1 |
| |
| - name: Print ospurge output |
| run_once: true |
| ansible.builtin.debug: |
| msg: "{{ item.stderr_lines }}" |
| loop: "{{ job_result.results }}" |
| loop_control: |
| label: "{{ item.item.item }}" |
| |
| - name: Delete the OpenStack project |
| run_once: true |
| openstack.cloud.project: |
| name: "{{ project_id }}" |
| state: absent |