diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 3f0fc03c..4a5490f7 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -8,85 +8,85 @@ permissions: contents: read jobs: - build-provider-e2e-images: - name: Build Provider E2E Images - runs-on : [self-hosted, linux, X64, jammy, large] - steps: - - name: Login to GitHub Container Registry - uses: docker/login-action@v3 - with: - # We run into rate limiting issues if we don't authenticate - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - name: Check out repo - uses: actions/checkout@v4 - - name: Install requirements - run: | - sudo apt update - sudo apt install -y make docker-buildx - sudo snap install go --classic --channel=1.22/stable - sudo snap install kubectl --classic --channel=1.30/stable - - name: Build provider images - #run: sudo make docker-build-e2e - run: | - docker pull ghcr.io/canonical/cluster-api-k8s/bootstrap-controller:ci-test - docker tag ghcr.io/canonical/cluster-api-k8s/bootstrap-controller:ci-test ghcr.io/canonical/cluster-api-k8s/bootstrap-controller:dev - docker pull ghcr.io/canonical/cluster-api-k8s/controlplane-controller:ci-test - docker tag ghcr.io/canonical/cluster-api-k8s/controlplane-controller:ci-test ghcr.io/canonical/cluster-api-k8s/controlplane-controller:dev - - name: Save provider image - run: | - sudo docker save -o provider-images.tar ghcr.io/canonical/cluster-api-k8s/controlplane-controller:dev ghcr.io/canonical/cluster-api-k8s/bootstrap-controller:dev - sudo chmod 775 provider-images.tar - - name: Upload artifacts - uses: actions/upload-artifact@v4 - with: - name: e2e-images - path: | - provider-images.tar + # build-provider-e2e-images: + # name: Build Provider E2E Images + # runs-on : [self-hosted, linux, X64, jammy, large] + # steps: + # - name: Login to GitHub Container Registry + # uses: docker/login-action@v3 + # with: + # # We run into rate limiting issues if we don't authenticate + # registry: ghcr.io + # username: ${{ github.actor }} + # password: ${{ secrets.GITHUB_TOKEN }} + # - name: Check out repo + # uses: actions/checkout@v4 + # - name: Install requirements + # run: | + # sudo apt update + # sudo apt install -y make docker-buildx + # sudo snap install go --classic --channel=1.22/stable + # sudo snap install kubectl --classic --channel=1.30/stable + # - name: Build provider images + # #run: sudo make docker-build-e2e + # run: | + # docker pull ghcr.io/canonical/cluster-api-k8s/bootstrap-controller:ci-test + # docker tag ghcr.io/canonical/cluster-api-k8s/bootstrap-controller:ci-test ghcr.io/canonical/cluster-api-k8s/bootstrap-controller:dev + # docker pull ghcr.io/canonical/cluster-api-k8s/controlplane-controller:ci-test + # docker tag ghcr.io/canonical/cluster-api-k8s/controlplane-controller:ci-test ghcr.io/canonical/cluster-api-k8s/controlplane-controller:dev + # - name: Save provider image + # run: | + # sudo docker save -o provider-images.tar ghcr.io/canonical/cluster-api-k8s/controlplane-controller:dev ghcr.io/canonical/cluster-api-k8s/bootstrap-controller:dev + # sudo chmod 775 provider-images.tar + # - name: Upload artifacts + # uses: actions/upload-artifact@v4 + # with: + # name: e2e-images + # path: | + # provider-images.tar - build-k8s-snap-e2e-images: - name: Build K8s Snap E2E Images - if: false - runs-on: [self-hosted, linux, X64, jammy, large] - steps: - - name: Login to GitHub Container Registry - uses: docker/login-action@v3 - with: - # We run into rate limiting issues if we don't authenticate - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - name: Check out repo - uses: actions/checkout@v4 - - name: Install requirements - run: | - sudo apt update - sudo apt install -y make docker-buildx - sudo snap install go --classic --channel=1.22/stable - sudo snap install kubectl --classic --channel=1.30/stable - - name: Build k8s-snap images - working-directory: hack/ - run: | - ./build-e2e-images.sh - - name: Save k8s-snap image - run: | - sudo docker save -o k8s-snap-image-old.tar k8s-snap:dev-old - sudo docker save -o k8s-snap-image-new.tar k8s-snap:dev-new - sudo chmod 775 k8s-snap-image-old.tar - sudo chmod 775 k8s-snap-image-new.tar - - name: Upload artifacts - uses: actions/upload-artifact@v4 - with: - name: e2e-images - path: | - k8s-snap-image-old.tar - k8s-snap-image-new.tar + # build-k8s-snap-e2e-images: + # name: Build K8s Snap E2E Images + # if: false + # runs-on: [self-hosted, linux, X64, jammy, large] + # steps: + # - name: Login to GitHub Container Registry + # uses: docker/login-action@v3 + # with: + # # We run into rate limiting issues if we don't authenticate + # registry: ghcr.io + # username: ${{ github.actor }} + # password: ${{ secrets.GITHUB_TOKEN }} + # - name: Check out repo + # uses: actions/checkout@v4 + # - name: Install requirements + # run: | + # sudo apt update + # sudo apt install -y make docker-buildx + # sudo snap install go --classic --channel=1.22/stable + # sudo snap install kubectl --classic --channel=1.30/stable + # - name: Build k8s-snap images + # working-directory: hack/ + # run: | + # ./build-e2e-images.sh + # - name: Save k8s-snap image + # run: | + # sudo docker save -o k8s-snap-image-old.tar k8s-snap:dev-old + # sudo docker save -o k8s-snap-image-new.tar k8s-snap:dev-new + # sudo chmod 775 k8s-snap-image-old.tar + # sudo chmod 775 k8s-snap-image-new.tar + # - name: Upload artifacts + # uses: actions/upload-artifact@v4 + # with: + # name: e2e-images + # path: | + # k8s-snap-image-old.tar + # k8s-snap-image-new.tar run-e2e-tests: name: Run E2E Tests runs-on: [self-hosted, linux, X64, jammy, xlarge] - needs: [build-provider-e2e-images] + #needs: [build-provider-e2e-images] strategy: max-parallel: 1 # Only one at a time because of AWS resource limitations (like maximum number of elastic ip's) matrix: @@ -111,40 +111,40 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} - name: Check out repo uses: actions/checkout@v4 - - name: Setup tmate session - uses: canonical/action-tmate@main - with: - detached: true - - name: Install requirements - run: | - sudo apt update - sudo snap install go --classic --channel=1.22/stable - sudo snap install kubectl --classic --channel 1.31/stable - sudo apt install make - ./hack/install-aws-nuke.sh - - name: Download artifacts - uses: actions/download-artifact@v4 - with: - name: e2e-images - path: . - - name: Load provider image - run: sudo docker load -i provider-images.tar - - name: Load k8s-snap old image - if: matrix.infra == 'docker' - run: | - sudo docker load -i k8s-snap-image-old.tar - - name: Load k8s-snap new image - if: matrix.infra == 'docker' && matrix.ginkgo_focus == 'Workload cluster upgrade' - run: | - sudo docker load -i k8s-snap-image-new.tar - - name: Create docker network - run: | - sudo docker network create kind --driver=bridge -o com.docker.network.bridge.enable_ip_masquerade=true - - name: Increase inotify watches - run: | - # Prevents https://cluster-api.sigs.k8s.io/user/troubleshooting#cluster-api-with-docker----too-many-open-files - sudo sysctl fs.inotify.max_user_watches=1048576 - sudo sysctl fs.inotify.max_user_instances=8192 + # - name: Setup tmate session + # uses: canonical/action-tmate@main + # with: + # detached: true + # - name: Install requirements + # run: | + # sudo apt update + # sudo snap install go --classic --channel=1.22/stable + # sudo snap install kubectl --classic --channel 1.31/stable + # sudo apt install make + # ./hack/install-aws-nuke.sh + # - name: Download artifacts + # uses: actions/download-artifact@v4 + # with: + # name: e2e-images + # path: . + # - name: Load provider image + # run: sudo docker load -i provider-images.tar + # - name: Load k8s-snap old image + # if: matrix.infra == 'docker' + # run: | + # sudo docker load -i k8s-snap-image-old.tar + # - name: Load k8s-snap new image + # if: matrix.infra == 'docker' && matrix.ginkgo_focus == 'Workload cluster upgrade' + # run: | + # sudo docker load -i k8s-snap-image-new.tar + # - name: Create docker network + # run: | + # sudo docker network create kind --driver=bridge -o com.docker.network.bridge.enable_ip_masquerade=true + # - name: Increase inotify watches + # run: | + # # Prevents https://cluster-api.sigs.k8s.io/user/troubleshooting#cluster-api-with-docker----too-many-open-files + # sudo sysctl fs.inotify.max_user_watches=1048576 + # sudo sysctl fs.inotify.max_user_instances=8192 - name: Install clusterawsadm if: matrix.infra == 'aws' run: | @@ -165,13 +165,15 @@ jobs: - name: Set AWS Credentials as Environment Variables if: matrix.infra == 'aws' run: | - AWS_ACCESS_KEY_ID=${{ steps.creds.outputs.aws-access-key-id }} >> "$GITHUB_ENV" - AWS_SECRET_ACCESS_KEY=${{ steps.creds.outputs.aws-secret-access-key }} >> "$GITHUB_ENV" - AWS_SESSION_TOKEN=${{ steps.creds.outputs.aws-session-token }} >> "$GITHUB_ENV" + #echo "AWS_ACCESS_KEY_ID=${{ steps.creds.outputs.aws-access-key-id }}" >> "$GITHUB_ENV" + #echo "AWS_SECRET_KEY_ID=${{ steps.creds.outputs.aws-secret-access-key }}" >> "$GITHUB_ENV" + #echo "AWS_SESSION_TOKEN=${{ steps.creds.outputs.aws-session-token }}" >> "$GITHUB_ENV" + #echo "AWS_REGION=us-east-2" >> "$GITHUB_ENV" - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY - export AWS_SESSION_TOKEN=$AWS_SESSION_TOKEN + #export AWS_ACCESS_KEY_ID=${{ steps.creds.outputs.aws-access-key-id }} + export AWS_SECRET_KEY_ID="${{ steps.creds.outputs.aws-secret-access-key }}" + echo "AWS_SECRET_KEY_ID=${{ steps.creds.outputs.aws-secret-access-key }}" >> "$GITHUB_ENV" + #export AWS_SESSION_TOKEN=${{ steps.creds.outputs.aws-session-token }} AWS_B64ENCODED_CREDENTIALS=$(clusterawsadm bootstrap credentials encode-as-profile --region us-east-2) echo "AWS_B64ENCODED_CREDENTIALS=$AWS_B64ENCODED_CREDENTIALS" >> "$GITHUB_ENV" @@ -179,8 +181,10 @@ jobs: - name: Run e2e tests if: ${{!(matrix.infra == 'aws' && (matrix.ginkgo_focus == 'KCP remediation' || matrix.ginkgo_focus == 'MachineDeployment remediation'))}} run: | - #sudo -E E2E_INFRA=${{matrix.infra}} GINKGO_FOCUS="${{ matrix.ginkgo_focus }}" SKIP_RESOURCE_CLEANUP=true make test-e2e - sudo -E ./hack/juju-create-aws-instance.sh + sudo snap install juju --classic --channel 2.9/stable + juju bootstrap aws/us-east-2 vimdiesel-aws --force --bootstrap-series jammy --bootstrap-constraints "arch=amd64" --model-default test-mode=true --model-default resource-tags=owner=vimdiesel --model-default automatically-retry-hooks=false --model-default 'logging-config==DEBUG' --model-default image-stream=daily --debug + juju scp -m controller "$DIR"/run-e2e-test.sh 0:/home/ubuntu/run-e2e-test.sh + juju exec --model controller --unit controller/0 -- AWS_B64ENCODED_CREDENTIALS=${AWS_B64ENCODED_CREDENTIALS} /home/ubuntu/run-e2e-test.sh - name: Cleanup AWS account if: false run: | diff --git a/LICENSE b/LICENSE index 261eeb9e..440e09c2 100644 --- a/LICENSE +++ b/LICENSE @@ -1,201 +1,22 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - 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. +The MIT License (MIT) + +Copyright (c) 2016 reBuy reCommerce GmbH +Copyright (c) 2021 Erik Kristensen + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md index 454ae375..8110bbd1 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,90 @@ -# Cluster API Canonical Kubernetes +# aws-nuke -This repository contains bootstrap and control plane providers to deploy Canonical Kubernetes clusters using [Cluster API](https://github.com/kubernetes-sigs/cluster-api/blob/master/README.md). +[![license](https://img.shields.io/github/license/ekristen/aws-nuke.svg)](https://github.com/ekristen/aws-nuke/blob/main/LICENSE) +[![release](https://img.shields.io/github/release/ekristen/aws-nuke.svg)](https://github.com/ekristen/aws-nuke/releases) +[![Go Report Card](https://goreportcard.com/badge/github.com/ekristen/aws-nuke)](https://goreportcard.com/report/github.com/ekristen/aws-nuke) +[![Maintainability](https://api.codeclimate.com/v1/badges/bf05fb12c69f1ea7f257/maintainability)](https://codeclimate.com/github/ekristen/aws-nuke/maintainability) +![GitHub Downloads (all assets, all releases)](https://img.shields.io/github/downloads/ekristen/aws-nuke/total) +![GitHub Downloads (all assets, latest release)](https://img.shields.io/github/downloads/ekristen/aws-nuke/latest/total) -CABPCK (Cluster API bootstrap provider for Canonical Kubernetes) is responsible for generate cloud-init scripts for generate Machines such that they run Kubernetes nodes. This implementation uses [Canonical Kubernetes](https://github.com/canonical/k8s-snap) to deliver Kubernetes. -CACPCK (Cluster API control plane provider for Canonical Kubernetes) is responsible for managing the lifecycle of machines that host the control plane nodes of a Canonical Kubernetes cluster. + +## Overview + +Remove all resources from an AWS account. + +*aws-nuke* is stable, but it is likely that not all AWS resources are covered by it. Be encouraged to add missing +resources and create a Pull Request or to create an [Issue](https://github.com/ekristen/aws-nuke/issues/new). + +## What's New in Version 3 + +Version 3 is a rewrite of this tool using [libnuke](https://github.com/ekristen/libnuke) with a focus on improving a number of the outstanding things +that I couldn't get done with the original project without separating out the core code into a library. See Goals +below for more. + +This is not a comprehensive list, but here are some of the highlights: + +* New Feature: Signed Darwin Binaries for macOS +* New Feature: Published Homebrew Tap (ekristen/tap/aws-nuke@3) +* New Feature: Global Filters +* New Feature: Run Against All Enabled Regions +* New Feature: Explain Account and Explain Config Commands +* Upcoming Feature: Filter Groups (**in progress**) +* Breaking Change: `root` command no longer triggers the run, must use subcommand `run` (alias: `nuke`) +* Breaking Change: CloudFormation Stacks now support a hold and wait for parent deletion process +* Breaking Change: Nested CloudFormation Stacks are now eligible for deletion and no longer omitted +* Completely rewrote the core of the tool as a dedicated library [libnuke](https://github.com/ekristen/libnuke) + * This library has over 95% test coverage which makes iteration and new features easier to implement. +* Semantic Releases with notifications on issues / pull requests +* Context is passed throughout the entire library now, including the listing function and the removal function + * This is in preparation for supporting AWS SDK Go v2 +* New Resources +* Broke away from rebuy-de/aws-nuke project as a fork for reasons outlined in the history section + +### Goals + +- [x] Easier maintainability and bug fixing, see go report and code climate badges above +- [x] Adding additional tests around the core library +- [ ] Adding more tests around specific resource types +- [x] Adding additional resources and tooling to make adding resources easier +- [x] Adding documentation for adding resources and using the tool +- [ ] Consider adding DAG for dependencies between resource types and individual resources +- [ ] Support for AWS SDK Go v2 + +## Documentation + +All documentation is in the [docs/](docs) directory and is built using [Material for Mkdocs](https://squidfunk.github.io/mkdocs-material/). + +It is hosted at [https://ekristen.github.io/aws-nuke/](https://ekristen.github.io/aws-nuke/). + +## History of this Fork + +**Important:** this is a full fork of the original tool written by the folks over at [rebuy-de](https://github.com/rebuy-de). +This fork became necessary after attempting to make contributions and respond to issues to learn that the current +maintainers only have time to work on the project about once a month and while receptive to bringing in other +people to help maintain, made it clear it would take time. Considering the feedback cycle was already weeks on +initial communications, I had to make the hard decision to fork and maintain it. + +### libnuke + +I also needed a version of this tool for Azure and GCP, and initially I just copied and altered the code I needed for +Azure, but I didn't want to have to maintain multiple copies of the same code, so I decided to create +[libnuke](https://github.com/ekristen/libnuke) to abstract all the code that was common between the two tools and write +proper unit tests for it. + +## Attribution, License, and Copyright + +The rewrite of this tool to use [libnuke](https://github.com/ekristen/libnuke) would not have been possible without the +hard work that came before me on the original tool by the team and contributors over at [rebuy-de](https://github.com/rebuy-de) +and their original work on [rebuy-de/aws-nuke](https://github.com/rebuy-de/aws-nuke). + +This tool is licensed under the MIT license. See the [LICENSE](LICENSE) file for more information. The bulk of this +tool was rewritten to use [libnuke](https://github.com/ekristen/libnuke) which was in part originally sourced from +[rebuy-de/aws-nuke](https://github.com/rebuy-de/aws-nuke). + +## Contribute + +You can contribute to *aws-nuke* by forking this repository, making your changes and creating a Pull Request against +this repository. If you are unsure how to solve a problem or have other questions about a contributions, please create +a GitHub issue. + diff --git a/hack/run-e2e-test.sh b/hack/run-e2e-test.sh index fc978fb2..0e4489a1 100755 --- a/hack/run-e2e-test.sh +++ b/hack/run-e2e-test.sh @@ -17,6 +17,11 @@ wget https://github.com/kubernetes-sigs/kind/releases/download/v0.24.0/kind-linu export KIND_EXPERIMENTAL_DOCKER_NETWORK=bridge kind version +docker pull ghcr.io/canonical/cluster-api-k8s/bootstrap-controller:ci-test +docker tag ghcr.io/canonical/cluster-api-k8s/bootstrap-controller:ci-test ghcr.io/canonical/cluster-api-k8s/bootstrap-controller:dev +docker pull ghcr.io/canonical/cluster-api-k8s/controlplane-controller:ci-test +docker tag ghcr.io/canonical/cluster-api-k8s/controlplane-controller:ci-test ghcr.io/canonical/cluster-api-k8s/controlplane-controller:dev + git clone git@github.com:canonical/cluster-api-k8s.git /home/ubuntu/cluster-api-k8s && (cd /home/ubuntu/cluster-api-k8s || exit 1) sudo -E E2E_INFRA=aws GINKGO_FOCUS="Workload cluster creation" SKIP_RESOURCE_CLEANUP=true make test-e2e diff --git a/yaml b/yaml new file mode 100644 index 00000000..976270bb --- /dev/null +++ b/yaml @@ -0,0 +1,11 @@ +Model Controller Cloud/Region Version SLA Timestamp +controller vimdiesel-aws aws/us-east-2 3.5.4 unsupported 20:32:01-04:00 + +App Version Status Scale Charm Channel Rev Exposed Message +controller active 1 juju-controller 3.5/stable 105 no + +Unit Workload Agent Machine Public address Ports Message +controller/0* active idle 0 18.224.64.247 + +Machine State Address Inst id Base AZ Message +0 started 18.224.64.247 i-0880751e552c2b6a1 ubuntu@22.04 us-east-2a running