runatlantis / atlantis

Terraform Pull Request Automation
https://www.runatlantis.io
Other
7.53k stars 1.02k forks source link

Support `atlantis destroy` subcommand #941

Open kennethtxytqw opened 4 years ago

kennethtxytqw commented 4 years ago

Wondering if a command atlantis destroy -d <dir> will be useful. It will:

  1. User creates empty MR
  2. User comments atlantis destroy -d <dir>
  3. Atlantis generate destroy plan for <dir> and show it on the MR
  4. User commentsatlantis apply
  5. Atlantis destroys
  6. Atlantis makes a commit to the MR with <dir> deleted and merges the MR

Number 6, might be a little uncomfortable for some people.

jseiser commented 4 years ago

I will say, the removal part of atlantis, is the most cumbersome part of our workflow.

We have things, that can only run from atlantis, so we endup having to create a BS pull request, something like adding a comment to a .tf file, then doing the destroy, then deleting the folders, pushing again, and finally merging.

kennethtxytqw commented 4 years ago

@jseiser That has been what my team and I have been doing too.

nwsparks commented 3 years ago

Having this as an available option would be fairly concerning.

If this was to be implemented I think you would also surely need to implement the ability to blacklist commands on the server side for people who did not want to expose this. It should probably also be defaulted to the blacklist and only available if you explicitly allow it.

Symbianx commented 3 years ago

I think it would be more user friendly creating the PR with the deletion of the directory. Atlantis could then detect it and destroy the project using the directory from the target branch?

kennethtxytqw commented 3 years ago

I like @Symbianx 's suggestion and it seems if implemented as per that suggestion would address the concern @nwsparks has?

lkysow commented 3 years ago

That does seem like a good workflow since you're gonna want to delete the directory anyway. Might be a bit tricky to implement though.

mwarkentin commented 3 years ago

That would be a lovely workflow. We currently plan destroy and apply outside of atlantis, then make the PR.

Silthus commented 1 year ago

I think it would be more user friendly creating the PR with the deletion of the directory. Atlantis could then detect it and destroy the project using the directory from the target branch?

We at our company are currently also struggling with this problem and came to the same conclusion that it would be best for Atlantis to detect deleted folders and run a ... plan -destroy per deleted folder. That would allow mixing changes, additions and deletions in the same pull request.

Would you be open for a contribution to implement the destroy workflow? If so we would draft a suggestion.

nitrocode commented 1 year ago

This is a related issue here https://github.com/runatlantis/atlantis/issues/193

And this is the workaround is here https://github.com/runatlantis/atlantis/issues/193#issuecomment-730614386

tldr here are the options

  1. Use an enabled = true input var or local, set everything to use it, then set it to enabled = false in a PR to do a destroy, then delete the terraform.
  2. Put in a PR (such as a no-op RR), use atlantis plan -- -destroy, get approval, then atlantis apply in order to destroy
nitrocode commented 1 year ago

I do not believe this will be supported via atlantis destroy. Please see the above workarounds to see if it works better for you. We should probably document this on the website.

Closing for now unless the workarounds do not work for people.

SerhiiSokolov commented 1 year ago

I wonder if this issue can be reopened. Workaround does not work when terragrunt with custom workflows, multi-providers and required checks are in place ( Having workflow like below to destroy resources is too complicated

image
jamengual commented 1 year ago

Project is community driven at this point so some of you will have to create a PR to get this feature.

ShankyJS commented 1 week ago

Do we have some high-level design/acceptance criteria for this issue? I want to take a stab at implementing this.