Skip to content

Commit

Permalink
remove --everything
Browse files Browse the repository at this point in the history
  • Loading branch information
haitham911 committed Jan 4, 2025
1 parent 8d1292b commit 1acd1d0
Show file tree
Hide file tree
Showing 8 changed files with 22 additions and 30 deletions.
7 changes: 2 additions & 5 deletions internal/exec/help.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,8 @@ func processHelp(
"the commands will use the planfile previously generated by 'atmos terraform plan' command instead of generating a new planfile")
u.PrintMessage(" - 'atmos terraform apply' and 'atmos terraform deploy' commands commands support '--planfile' flag to specify the path " +
"to a planfile. The '--planfile' flag should be used instead of the planfile argument in the native 'terraform apply <planfile>' command")
u.PrintMessage(" - 'atmos terraform clean' command deletes the '.terraform' folder, '.terraform.lock.hcl' lock file, " +
u.PrintMessage(" - 'atmos terraform clean' command delete the Terraform state files and directories for the component and stack., '.terraform.lock.hcl' lock file, " +
"and the previously generated 'planfile', 'varfile', and 'backend.tf.json' file for the specified component and stack. " +
"Use the --everything flag to also delete the Terraform state files and directories for the component. " +
"Note: State files store the local state of your infrastructure and should be handled with care, if not using a remote backend.\n\n" +
"Additional flags:\n" +
" --force Forcefully delete Terraform state files and directories without interaction\n" +
Expand Down Expand Up @@ -70,16 +69,14 @@ func processHelp(
"native arguments and flags for the 'helmfile' commands")
}
} else if componentType == "terraform" && command == "clean" {
u.PrintMessage("\n'atmos terraform clean' command deletes the following folders and files from the component's directory:\n\n" +
u.PrintMessage("\n'atmos terraform clean' command delete all the Terraform state files and directories for all components and stacks . deletes the following folders and files from the component's directory:\n\n" +
" - '.terraform' folder\n" +
" - folder that the 'TF_DATA_DIR' ENV var points to\n" +
" - '.terraform.lock.hcl' file\n" +
" - generated varfile for the component in the stack\n" +
" - generated planfile for the component in the stack\n" +
" - generated 'backend.tf.json' file\n" +
" - 'terraform.tfstate.d' folder (if '--everything' flag is used)\n\n" +
"Usage: atmos terraform clean <component> -s <stack> <flags>\n\n" +
"Use the `--everything` flag to remove all Terraform state files and directories, prompting you for confirmation before proceeding. This is the default behavior.\n\n" +
"Use --force to forcefully delete Terraform state files and directories for the component.\n\n" +
"- If no component is specified, the command will apply to all components and stacks.\n" +
"- If no stack is specified, the command will apply to all stacks for the specified component.\n" +
Expand Down
1 change: 0 additions & 1 deletion internal/exec/terraform.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ const (
outFlag = "-out"
varFileFlag = "-var-file"
skipTerraformLockFileFlag = "--skip-lock-file"
everythingFlag = "--everything"
forceFlag = "--force"
)

Expand Down
9 changes: 4 additions & 5 deletions internal/exec/terraform_clean.go
Original file line number Diff line number Diff line change
Expand Up @@ -346,8 +346,8 @@ func handleTFDataDir(componentPath string, relativePath string, atmosConfig sche
}

}
func initializeFilesToClear(info schema.ConfigAndStacksInfo, atmosConfig schema.AtmosConfiguration, everything bool) []string {
if everything && info.Stack == "" {
func initializeFilesToClear(info schema.ConfigAndStacksInfo, atmosConfig schema.AtmosConfiguration) []string {
if info.ComponentFromArg == "" {
return []string{".terraform", ".terraform.lock.hcl", "*.tfvar.json", "terraform.tfstate.d"}
}
varFile := constructTerraformComponentVarfileName(info)
Expand Down Expand Up @@ -406,8 +406,7 @@ func handleCleanSubCommand(info schema.ConfigAndStacksInfo, componentPath string
}

force := u.SliceContainsString(info.AdditionalArgsAndFlags, forceFlag)
everything := u.SliceContainsString(info.AdditionalArgsAndFlags, everythingFlag)
filesToClear := initializeFilesToClear(info, atmosConfig, everything)
filesToClear := initializeFilesToClear(info, atmosConfig)
folders, err := CollectDirectoryObjects(cleanPath, filesToClear)
if err != nil {
u.LogTrace(atmosConfig, fmt.Errorf("error collecting folders and files: %v", err).Error())
Expand Down Expand Up @@ -455,7 +454,7 @@ func handleCleanSubCommand(info schema.ConfigAndStacksInfo, componentPath string
u.PrintMessage(fmt.Sprintf("Do you want to delete the folder '%s'? ", tfDataDir))
}
var message string
if everything && info.ComponentFromArg == "" {
if info.ComponentFromArg == "" {
message = fmt.Sprintf("This will delete %v local terraform state files affecting all components", total)
} else if info.Component != "" && info.Stack != "" {
message = fmt.Sprintf("This will delete %v local terraform state files for component '%s' in stack '%s'", total, info.Component, info.Stack)
Expand Down
8 changes: 3 additions & 5 deletions internal/exec/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -665,14 +665,12 @@ func processArgsAndFlags(
var additionalArgsAndFlags []string
var globalOptions []string
var indexesToRemove []int
if len(inputArgsAndFlags) > 1 && inputArgsAndFlags[0] == "clean" {
if !u.SliceContainsString(inputArgsAndFlags, everythingFlag) {
inputArgsAndFlags = append(inputArgsAndFlags, everythingFlag)
}
if len(inputArgsAndFlags) == 1 && inputArgsAndFlags[0] == "clean" {
info.SubCommand = inputArgsAndFlags[0]
}

// For commands like `atmos terraform plan`, show the command help
if len(inputArgsAndFlags) == 1 && inputArgsAndFlags[0] != "version" {
if len(inputArgsAndFlags) == 1 && inputArgsAndFlags[0] != "version" && info.SubCommand == "" {
info.SubCommand = inputArgsAndFlags[0]
info.NeedHelp = true
return info, nil
Expand Down
7 changes: 3 additions & 4 deletions website/docs/cli/commands/terraform/terraform-clean.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ Execute the `terraform clean` command like this:
atmos terraform clean <component> -s <stack> [--skip-lock-file] [--everything] [--force]

:::warning
The `--everything` flag is the default behavior and will delete all Terraform-related files including state files, with a confirmation prompt before proceeding. The `--force` flag will bypass confirmation prompts.
The `clean` default behavior and will delete all Terraform-related files including state files, with a confirmation prompt before proceeding. The `--force` flag will bypass confirmation prompts.
Use these flags with extreme caution as they can lead to irreversible data loss.
:::
```
Expand All @@ -36,10 +36,9 @@ Run `atmos terraform clean --help` to see all the available options

```shell
# Delete all Terraform-related files for all components (with confirmation)
atmos terraform clean --everything

atmos terraform clean
# Force delete all Terraform-related files for all components (no confirmation)
atmos terraform clean --everything --force
atmos terraform clean --force
atmos terraform clean top-level-component1 -s tenant1-ue2-dev
atmos terraform clean infra/vpc -s tenant1-ue2-staging
atmos terraform clean infra/vpc -s tenant1-ue2-staging --skip-lock-file
Expand Down
12 changes: 6 additions & 6 deletions website/docs/cli/commands/terraform/usage.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -59,11 +59,11 @@ HCL-based domain-specific language and its interpreter. Atmos works with [OpenTo

- `atmos terraform clean` command deletes the `.terraform` folder, `.terraform.lock.hcl` lock file, and the previously generated `planfile`
and `varfile` for the specified component and stack. Use the `--skip-lock-file` flag to skip deleting the `.terraform.lock.hcl` file.
The `--everything` flag is the default behavior. It deletes all local Terraform state files and directories (including `terraform.tfstate.d/`) for all components and stacks.
It deletes all local Terraform state files and directories (including `terraform.tfstate.d/`) for all components and stacks.
The `--force` flag bypasses the safety confirmation prompt and forces the deletion. Use with caution.

:::warning
The `--everything` flag performs destructive operations that can lead to permanent state loss. Always ensure you have remote state configured in your components before proceeding.
The `clean` performs destructive operations that can lead to permanent state loss. Always ensure you have remote state configured in your components before proceeding.
:::

- `atmos terraform workspace` command first runs `terraform init -reconfigure`, then `terraform workspace select`, and if the workspace was not
Expand Down Expand Up @@ -113,16 +113,16 @@ atmos terraform destroy test/test-component-override -s tenant1-ue2-dev --redire
atmos terraform init test/test-component-override-3 -s tenant1-ue2-dev

# Clean all components (with confirmation)
atmos terraform clean --everything
atmos terraform clean

# Clean a specific component
atmos terraform clean vpc --everything
atmos terraform clean vpc

# Clean a specific component in a stack
atmos terraform clean vpc --stack dev --everything
atmos terraform clean vpc --stack dev

# Clean without confirmation prompt
atmos terraform clean --everything --force
atmos terraform clean --force
atmos terraform clean test/test-component-override-3 -s tenant1-ue2-dev

atmos terraform workspace test/test-component-override-3 -s tenant1-ue2-dev
Expand Down
4 changes: 2 additions & 2 deletions website/src/components/Screengrabs/atmos-terraform--help.html
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@
- 'atmos terraform deploy' command supports '--deploy-run-init=true/false' flag to enable/disable running 'terraform init' before executing the command
- 'atmos terraform apply' and 'atmos terraform deploy' commands support '--from-plan' flag. If the flag is specified, the commands will use the planfile previously generated by 'atmos terraform plan' command instead of generating a new planfile
- 'atmos terraform apply' and 'atmos terraform deploy' commands commands support '--planfile' flag to specify the path to a planfile. The '--planfile' flag should be used instead of the planfile argument in the native 'terraform apply &lt;planfile&gt;' command
- 'atmos terraform clean' command deletes the '.terraform' folder, '.terraform.lock.hcl' lock file, and the previously generated 'planfile', 'varfile' and 'backend.tf.json' file for the specified component and stack. Use --skip-lock-file flag to skip deleting the lock file.
- 'atmos terraform clean' command supports '--everything' flag to delete all the Terraform state files and directories for all components and stacks . Use --force flag to skip the confirmation prompt.
- 'atmos terraform clean' command delete all the Terraform state files and directories for all components and stacks . deletes the '.terraform' folder, '.terraform.lock.hcl' lock file, and the previously generated 'planfile', 'varfile' and 'backend.tf.json' file for the specified component and stack. Use --skip-lock-file flag to skip deleting the lock file.
- 'atmos terraform clean' . Use --force flag to skip the confirmation prompt.
- 'atmos terraform workspace' command first runs 'terraform init -reconfigure', then 'terraform workspace select', and if the workspace was not created before, it then runs 'terraform workspace new'
- 'atmos terraform import' command searches for 'region' in the variables for the specified component and stack, and if it finds it, sets 'AWS_REGION=&lt;region&gt;' ENV var before executing the command
- 'atmos terraform generate backend' command generates a backend config file for an 'atmos' component in a stack
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@


'atmos terraform clean' command deletes the following folders and files from the component's directory:

- delete all the Terraform state files and directories for all components and stacks
- '.terraform' folder
- folder that the 'TF_DATA_DIR' ENV var points to
- '.terraform.lock.hcl' file
Expand All @@ -17,7 +17,7 @@
- generated 'backend.tf.json' file

Usage: atmos terraform clean &lt;component&gt; -s &lt;stack&gt; &lt;flags&gt;
Use '--everything' flag to delete all the files and folders mentioned above. '--force' to delete the files without confirmation.
Use '--force' to delete the files without confirmation.
Use '--skip-lock-file' flag to skip deleting the lock file.

For more details refer to https://atmos.tools/cli/commands/terraform/clean
Expand Down

0 comments on commit 1acd1d0

Please sign in to comment.