From d316ea08c54864a32aa7b4090b4eb5db8c65153a Mon Sep 17 00:00:00 2001 From: Nick Fagerlund Date: Tue, 6 Aug 2019 15:12:21 -0700 Subject: [PATCH] website: Delete terraform push docs; replace with note about the remote backend Now that the last private installs of legacy TFE have been upgraded, the push era is over. --- website/docs/commands/push.html.markdown | 140 +---------------------- 1 file changed, 4 insertions(+), 136 deletions(-) diff --git a/website/docs/commands/push.html.markdown b/website/docs/commands/push.html.markdown index bfc411228a..927920b35a 100644 --- a/website/docs/commands/push.html.markdown +++ b/website/docs/commands/push.html.markdown @@ -3,146 +3,14 @@ layout: "docs" page_title: "Command: push" sidebar_current: "docs-commands-push" description: |- - The `terraform push` command is used to upload the Terraform configuration to HashiCorp's Terraform Enterprise service for automatically managing your infrastructure in the cloud. + DISCONTINUED. Terraform Cloud and the modern "remote" backend have replaced the old `terraform push` command. --- # Command: push -~> **Important:** The `terraform push` command is deprecated, and only works with the legacy version of Terraform Enterprise. In the current version of Terraform Enterprise, you can upload configurations using the API. See [the docs about API-driven runs](/docs/enterprise/run/api.html) for more details. +!> **Important:** The `terraform push` command is no longer functional. Its functionality was replaced and surpassed by [the `remote` backend](/docs/backends/types/remote.html), which works with current versions of Terraform Cloud. The `remote` backend allows you to run remote operations directly from the command line, and displays real-time output from the remote run environment. -The `terraform push` command uploads your Terraform configuration to -be managed by HashiCorp's [Terraform Enterprise](https://www.hashicorp.com/products/terraform/). -Terraform Enterprise can automatically run -Terraform for you, save all state transitions, save plans, -and keep a history of all Terraform runs. +The `terraform push` command was an early implementation of remote Terraform runs. It allowed teams to push a configuration to a remote run environment in a discontinued version of Terraform Enterprise. -This makes it significantly easier to use Terraform as a team: team -members modify the Terraform configurations locally and continue to -use normal version control. When the Terraform configurations are ready -to be run, they are pushed to Terraform Enterprise, and any member of your team can -run Terraform with the push of a button. +The legacy Terraform Enterprise version that supported `terraform push` is no longer available, and there are no remaining instances of that version in operation. Without a service to push to, the command is now completely non-functional. -Terraform Enterprise can also be used to set ACLs on who can run Terraform, and a -future update of Terraform Enterprise will allow parallel Terraform runs and automatically -perform infrastructure locking so only one run is modifying the same -infrastructure at a time. - -~> When using this command, it is important to match your local Terraform version with - the version selected for the target workspace in Terraform Enterprise, since - otherwise the uploaded configuration archive may not be compatible with the remote - Terraform process. - -## Usage - -Usage: `terraform push [options] [path]` - -The `path` argument is the same as for the -[apply](/docs/commands/apply.html) command. - -The command-line flags are all optional. The list of available flags are: - -* `-atlas-address=` - An alternate address to an instance. - Defaults to `https://atlas.hashicorp.com`. - -* `-upload-modules=true` - If true (default), then the - [modules](/docs/modules/index.html) - being used are all locked at their current checkout and uploaded - completely. This prevents Terraform Enterprise from running `terraform get` - for you. - -* `-name=` - Name of the infrastructure configuration in Terraform Enterprise. - The format of this is: "username/name" so that you can upload - configurations not just to your account but to other accounts and - organizations. This setting can also be set in the configuration - in the - [Terraform Enterprise section](/docs/configuration/terraform-enterprise.html). - -* `-no-color` - Disables output with coloring - - -* `-overwrite=foo` - Marks a specific variable to be updated. - Normally, if a variable is already set Terraform will not - send the local value (even if it is different). This forces it to - send the local value to Terraform Enterprise. This flag can be repeated multiple times. - -* `-token=` - Terraform Enterprise API token to use to authorize the upload. - If blank or unspecified, the `ATLAS_TOKEN` environment variable - will be used. - -* `-var='foo=bar'` - Set the value of a variable for the Terraform configuration. - -* `-var-file=foo` - Set the value of variables using a variable file. This flag - can be used multiple times. - - -* `-vcs=true` - If true (default), then Terraform will detect if a VCS - is in use, such as Git, and will only upload files that are committed to - version control. If no version control system is detected, Terraform will - upload all files in `path` (parameter to the command). - -## Packaged Files - -The files that are uploaded and packaged with a `push` are all the -files in the `path` given as the parameter to the command, recursively. -By default (unless `-vcs=false` is specified), Terraform will automatically -detect when a VCS such as Git is being used, and in that case will only -upload the files that are committed. Because of this built-in intelligence, -you don't have to worry about excluding folders such as ".git" or ".hg" usually. - -If Terraform doesn't detect a VCS, it will upload all files. - -The reason Terraform uploads all of these files is because Terraform -cannot know what is and isn't being used for provisioning, so it uploads -all the files to be safe. To exclude certain files, specify the `-exclude` -flag when pushing, or specify the `exclude` parameter in the -[Terraform Enterprise configuration section](/docs/configuration/terraform-enterprise.html). - -Terraform also includes in the package all of the modules that were installed -during the most recent `terraform init` or `terraform get` command. Since the -details of how modules are cached in the filesystem vary between Terraform versions, -it is important to use the same version of Terraform both locally (when running -`terraform init` and then `terraform push`) and in your remote Terraform Enterprise -workspace. - -## Terraform Variables - -When you `push`, Terraform will automatically set the local values of -your Terraform variables on Terraform Enterprise. The values are only set if they -don't already exist. If you want to force push a certain -variable value to update it, use the `-overwrite` flag. - -All the variable values stored are encrypted and secured -using [Vault](https://www.vaultproject.io). We blogged about the -[architecture of our secure storage system](https://www.hashicorp.com/blog/how-atlas-uses-vault-for-managing-secrets.html) if you want more detail. - -The variable values can be updated using the `-overwrite` flag or via -the [Terraform Enterprise website](https://www.hashicorp.com/products/terraform/). An example of updating -just a single variable `foo` is shown below: - -```shell -$ terraform push -var 'foo=bar' -overwrite foo -``` - -Both the `-var` and `-overwrite` flag are required. The `-var` flag -sets the value locally (the exact same process as commands such as apply -or plan), and the `-overwrite` flag tells the push command to update Terraform Enterprise. - -## Remote State Requirement - -~> **Important:** This section only refers to the legacy version of Terraform Enterprise. The current version of Terraform Enterprise always manages its own state, and does not support arbitrary remote state backends. - -`terraform push` requires that -[remote state](/docs/state/remote.html) -is enabled. The reasoning for this is simple: `terraform push` sends your -configuration to be managed remotely. For it to keep the state in sync -and for you to be able to easily access that state, remote state must -be enabled instead of juggling local files. - -While `terraform push` sends your configuration to be managed by Terraform Enterprise, -the remote state backend _does not_ have to be Terraform Enterprise. It can be anything -as long as it is accessible by the public internet, since Terraform Enterprise will need -to be able to communicate to it. - -**Warning:** The credentials for accessing the remote state will be -sent up to Terraform Enterprise as well. Therefore, we recommend you use access keys -that are restricted if possible.