From 9c68595d61ad9d69108cc10e0b0568af23fbbe0a Mon Sep 17 00:00:00 2001 From: Seth Vargo Date: Thu, 6 Apr 2017 14:02:56 -0400 Subject: [PATCH] Update intro section --- website/source/assets/stylesheets/_inner.scss | 12 ++- .../assets/stylesheets/application.scss | 2 +- .../source/intro/examples/aws.html.markdown | 4 +- .../intro/getting-started/build.html.md | 10 +-- .../intro/getting-started/change.html.md | 6 +- .../getting-started/dependencies.html.md | 12 +-- .../intro/getting-started/destroy.html.md | 4 +- .../getting-started/install.html.markdown | 77 +++++++------------ .../intro/getting-started/modules.html.md | 37 ++++----- .../intro/getting-started/outputs.html.md | 4 +- .../intro/getting-started/provision.html.md | 2 +- .../getting-started/remote.html.markdown | 6 +- .../intro/getting-started/variables.html.md | 38 ++++----- website/source/intro/index.html.markdown | 40 +++++----- website/source/intro/use-cases.html.markdown | 17 ++-- website/source/layouts/intro.erb | 4 +- 16 files changed, 128 insertions(+), 147 deletions(-) diff --git a/website/source/assets/stylesheets/_inner.scss b/website/source/assets/stylesheets/_inner.scss index d20d71398..1fd41e3f3 100644 --- a/website/source/assets/stylesheets/_inner.scss +++ b/website/source/assets/stylesheets/_inner.scss @@ -12,10 +12,16 @@ margin-bottom: 0; } - pre { + pre, + code, + pre code, + tt { font-family: $font-family-monospace; - font-size: ($font-size - 3); - font-weight: normal; + font-size: $font-size - 2; + line-height: 1.6; + } + + pre { padding: 20px; margin: 0 0 $font-size; diff --git a/website/source/assets/stylesheets/application.scss b/website/source/assets/stylesheets/application.scss index 59a4bd2e1..e08595d39 100755 --- a/website/source/assets/stylesheets/application.scss +++ b/website/source/assets/stylesheets/application.scss @@ -1,7 +1,7 @@ @import 'bootstrap-sprockets'; @import 'bootstrap'; -@import url('https://fonts.googleapis.com/css?family=Fira+Mono:500|Open+Sans:400,600'); +@import url('https://fonts.googleapis.com/css?family=Fira+Mono|Open+Sans:400,600'); // Mega Nav @import 'hashicorp/mega-nav'; diff --git a/website/source/intro/examples/aws.html.markdown b/website/source/intro/examples/aws.html.markdown index 730e75992..2317e84a2 100644 --- a/website/source/intro/examples/aws.html.markdown +++ b/website/source/intro/examples/aws.html.markdown @@ -1,12 +1,12 @@ --- layout: "intro" -page_title: "Basic Two-Tier AWS Architecture" +page_title: "Two-Tier AWS Architecture" sidebar_current: "examples-aws" description: |- This provides a template for running a simple two-tier architecture on Amazon Web services. The premise is that you have stateless app servers running behind an ELB serving traffic. --- -# Basic Two-Tier AWS Architecture +# Two-Tier AWS Architecture [**Example Source Code**](https://github.com/hashicorp/terraform/tree/master/examples/aws-two-tier) diff --git a/website/source/intro/getting-started/build.html.md b/website/source/intro/getting-started/build.html.md index 67099c7c0..b11cd9238 100644 --- a/website/source/intro/getting-started/build.html.md +++ b/website/source/intro/getting-started/build.html.md @@ -51,7 +51,7 @@ after. Save the contents to a file named `example.tf`. Verify that there are no other `*.tf` files in your directory, since Terraform loads all of them. -``` +```hcl provider "aws" { access_key = "ACCESS_KEY_HERE" secret_key = "SECRET_KEY_HERE" @@ -122,7 +122,7 @@ truncated some of the output to save space. ``` $ terraform plan -... +# ... + aws_instance.example ami: "ami-2757f631" @@ -156,7 +156,7 @@ syntax error in the configuration. The output format is similar to the diff format generated by tools such as Git. The output has a "+" next to "aws\_instance.example", meaning that Terraform will create this resource. Beneath that, -it shows the attributes that will be set. When the value displayed +it shows the attributes that will be set. When the value displayed is ``, it means that the value won't be known until the resource is created. @@ -179,7 +179,7 @@ aws_instance.example: Creation complete Apply complete! Resources: 1 added, 0 changed, 0 destroyed. -... +# ... ``` Done! You can go to the AWS console to prove to yourself that the @@ -189,7 +189,7 @@ Terraform also puts some state into the `terraform.tfstate` file by default. This state file is extremely important; it maps various resource metadata to actual resource IDs so that Terraform knows what it is managing. This file must be saved and distributed -to anyone who might run Terraform. It is generally recommended to +to anyone who might run Terraform. It is generally recommended to [setup remote state](https://www.terraform.io/docs/state/remote.html) when working with Terraform. This will mean that any potential secrets stored in the state file, will not be checked into version control diff --git a/website/source/intro/getting-started/change.html.md b/website/source/intro/getting-started/change.html.md index 6f9ea6f50..ada978f88 100644 --- a/website/source/intro/getting-started/change.html.md +++ b/website/source/intro/getting-started/change.html.md @@ -26,7 +26,7 @@ can see how the infrastructure evolved over time. Let's modify the `ami` of our instance. Edit the `aws_instance.example` resource in your configuration and change it to the following: -``` +```hcl resource "aws_instance" "example" { ami = "ami-b374d5a5" instance_type = "t2.micro" @@ -46,7 +46,7 @@ Let's see what Terraform will do with the change we made. ``` $ terraform plan -... +# ... -/+ aws_instance.example ami: "ami-2757f631" => "ami-b374d5a5" (forces new resource) @@ -110,7 +110,7 @@ aws_instance.example: Creation complete Apply complete! Resources: 1 added, 0 changed, 1 destroyed. -... +# ... ``` As the plan predicted, Terraform started by destroying our old diff --git a/website/source/intro/getting-started/dependencies.html.md b/website/source/intro/getting-started/dependencies.html.md index 2e0e4b47f..ea388f863 100644 --- a/website/source/intro/getting-started/dependencies.html.md +++ b/website/source/intro/getting-started/dependencies.html.md @@ -29,9 +29,9 @@ We'll improve our configuration by assigning an elastic IP to the EC2 instance we're managing. Modify your `example.tf` and add the following: -``` +```hcl resource "aws_eip" "ip" { - instance = "${aws_instance.example.id}" + instance = "${aws_instance.example.id}" } ``` @@ -145,10 +145,10 @@ However, you can also specify explicit dependencies with the we could modify the "aws\_eip" resource to the following, which effectively does the same thing and is redundant: -``` +```hcl resource "aws_eip" "ip" { - instance = "${aws_instance.example.id}" - depends_on = ["aws_instance.example"] + instance = "${aws_instance.example.id}" + depends_on = ["aws_instance.example"] } ``` @@ -164,7 +164,7 @@ We can now augment the configuration with another EC2 instance. Because this doesn't rely on any other resource, it can be created in parallel to everything else. -``` +```hcl resource "aws_instance" "another" { ami = "ami-b374d5a5" instance_type = "t2.micro" diff --git a/website/source/intro/getting-started/destroy.html.md b/website/source/intro/getting-started/destroy.html.md index c986e489a..b146c32ae 100644 --- a/website/source/intro/getting-started/destroy.html.md +++ b/website/source/intro/getting-started/destroy.html.md @@ -25,7 +25,7 @@ to see what resources Terraform will destroy. ``` $ terraform plan -destroy -... +# ... - aws_instance.example ``` @@ -45,7 +45,7 @@ aws_instance.example: Destroying... Apply complete! Resources: 0 added, 0 changed, 1 destroyed. -... +# ... ``` The `terraform destroy` command should ask you to verify that you diff --git a/website/source/intro/getting-started/install.html.markdown b/website/source/intro/getting-started/install.html.markdown index e27fdd2cd..ed2de691b 100644 --- a/website/source/intro/getting-started/install.html.markdown +++ b/website/source/intro/getting-started/install.html.markdown @@ -3,44 +3,41 @@ layout: "intro" page_title: "Installing Terraform" sidebar_current: "gettingstarted-install" description: |- - Terraform must first be installed on your machine. Terraform is distributed as a binary package for all supported platforms and architecture. This page will not cover how to compile Terraform from source. + Terraform must first be installed on your machine. Terraform is distributed as + a binary package for all supported platforms and architecture. This page will + not cover how to compile Terraform from source. --- # Install Terraform -Terraform must first be installed on your machine. Terraform is distributed -as a [binary package](/downloads.html) for all supported platforms and -architecture. This page will not cover how to compile Terraform from -source. +Terraform must first be installed on your machine. Terraform is distributed as a +[binary package](/downloads.html) for all supported platforms and architectures. +This page will not cover how to compile Terraform from source, but compiling +from source is covered in the [documentation](/docs/index.html) for those who +want to be sure they're compiling source they trust into the final binary. ## Installing Terraform -To install Terraform, find the [appropriate package](/downloads.html) for -your system and download it. Terraform is packaged as a zip archive. +To install Terraform, find the [appropriate package](/downloads.html) for your +system and download it. Terraform is packaged as a zip archive. -After downloading Terraform, unzip the package into a directory where -Terraform will be installed. The directory will contain a binary program `terraform`. The final -step is to make sure the directory you installed Terraform to is on the -PATH. See -[this page](https://stackoverflow.com/questions/14637979/how-to-permanently-set-path-on-linux) +After downloading Terraform, unzip the package. Terraform runs as a single +binary named `terraform`. Any other files in the package can be safely removed +and Terraform will still function. + +The final step is to make sure that the `terraform` binary is available on the `PATH`. +See [this page](https://stackoverflow.com/questions/14637979/how-to-permanently-set-path-on-linux) for instructions on setting the PATH on Linux and Mac. [This page](https://stackoverflow.com/questions/1618280/where-can-i-set-path-to-make-exe-on-windows) contains instructions for setting the PATH on Windows. -Example for Linux/Mac - Type the following into your terminal: ->`PATH=/usr/local/terraform/bin:/home/your-user-name:$PATH` - -Example for Windows - Type the following into Powershell: ->`[Environment]::SetEnvironmentVariable("PATH", $env:PATH + ({;C:\terraform},{C:\terraform})[$env:PATH[-1] -eq ';'], "User")` - - ## Verifying the Installation After installing Terraform, verify the installation worked by opening a new terminal session and checking that `terraform` is available. By executing -`terraform` you should see help output similar to that below: +`terraform` you should see help output similar to this: -``` +```text $ terraform Usage: terraform [--version] [--help] [args] @@ -53,37 +50,15 @@ other commands, please read the help and docs before usage. Common commands: apply Builds or changes infrastructure console Interactive console for Terraform interpolations - destroy Destroy Terraform-managed infrastructure - env Environment management - fmt Rewrites config files to canonical format - get Download and install modules for the configuration - graph Create a visual graph of Terraform resources - import Import existing infrastructure into Terraform - init Initialize a new or existing Terraform configuration - output Read an output from a state file - plan Generate and show an execution plan - push Upload this Terraform module to Atlas to run - refresh Update local state file against real resources - show Inspect Terraform state or plan - taint Manually mark a resource for recreation - untaint Manually unmark a resource as tainted - validate Validates the Terraform files - version Prints the Terraform version - -All other commands: - debug Debug output management (experimental) - force-unlock Manually unlock the terraform state - state Advanced state management +# ... ``` -If you get an error that `terraform` could not be found, then your PATH -environment variable was not setup properly. Please go back and ensure -that your PATH variable contains the directory where Terraform was installed. +If you get an error that `terraform` could not be found, your `PATH` environment +variable was not set up properly. Please go back and ensure that your `PATH` +variable contains the directory where Terraform was installed. -Otherwise, Terraform is installed and ready to go! Nice! +## Next Steps -## Next Step - -Time to [build infrastructure](/intro/getting-started/build.html) -using a minimal Terraform configuration file. You will be able to -examine Terraform's execution plan before you deploy it to AWS. +Time to [build infrastructure](/intro/getting-started/build.html) using a +minimal Terraform configuration file. You will be able to examine Terraform's +execution plan before you deploy it to AWS. diff --git a/website/source/intro/getting-started/modules.html.md b/website/source/intro/getting-started/modules.html.md index e7ce4c706..6579a6556 100644 --- a/website/source/intro/getting-started/modules.html.md +++ b/website/source/intro/getting-started/modules.html.md @@ -38,20 +38,20 @@ for us. Create a configuration file with the following contents: -``` +```hcl provider "aws" { - access_key = "AWS ACCESS KEY" - secret_key = "AWS SECRET KEY" - region = "AWS REGION" + access_key = "AWS ACCESS KEY" + secret_key = "AWS SECRET KEY" + region = "AWS REGION" } module "consul" { - source = "github.com/hashicorp/consul/terraform/aws" + source = "github.com/hashicorp/consul/terraform/aws" - key_name = "AWS SSH KEY NAME" - key_path = "PATH TO ABOVE PRIVATE KEY" - region = "us-east-1" - servers = "3" + key_name = "AWS SSH KEY NAME" + key_path = "PATH TO ABOVE PRIVATE KEY" + region = "us-east-1" + servers = "3" } ``` @@ -78,7 +78,7 @@ This is done using the [get command](/docs/commands/get.html). ``` $ terraform get -... +# ... ``` This command will download the modules if they haven't been already. @@ -93,15 +93,16 @@ With the modules downloaded, we can now plan and apply it. If you run ``` $ terraform plan -... +# ... + module.consul.aws_instance.server.0 -... +# ... + module.consul.aws_instance.server.1 -... +# ... + module.consul.aws_instance.server.2 -... +# ... + module.consul.aws_security_group.consul -... +# ... + Plan: 4 to add, 0 to change, 0 to destroy. ``` @@ -117,7 +118,7 @@ will have some cost associated with it. ``` $ terraform apply -... +# ... Apply complete! Resources: 3 added, 0 changed, 0 destroyed. ``` @@ -140,9 +141,9 @@ To reference this, we'll just put it into our own output variable. But this value could be used anywhere: in another resource, to configure another provider, etc. -``` +```hcl output "consul_address" { - value = "${module.consul.server_address}" + value = "${module.consul.server_address}" } ``` diff --git a/website/source/intro/getting-started/outputs.html.md b/website/source/intro/getting-started/outputs.html.md index d5a6ca1e7..1f99ee41b 100644 --- a/website/source/intro/getting-started/outputs.html.md +++ b/website/source/intro/getting-started/outputs.html.md @@ -29,9 +29,9 @@ Let's define an output to show us the public IP address of the elastic IP address that we create. Add this to any of your `*.tf` files: -``` +```hcl output "ip" { - value = "${aws_eip.ip.public_ip}" + value = "${aws_eip.ip.public_ip}" } ``` diff --git a/website/source/intro/getting-started/provision.html.md b/website/source/intro/getting-started/provision.html.md index d6d65033c..055cd59ff 100644 --- a/website/source/intro/getting-started/provision.html.md +++ b/website/source/intro/getting-started/provision.html.md @@ -23,7 +23,7 @@ configuration management tools, etc. To define a provisioner, modify the resource block defining the "example" EC2 instance to look like the following: -``` +```hcl resource "aws_instance" "example" { ami = "ami-b374d5a5" instance_type = "t2.micro" diff --git a/website/source/intro/getting-started/remote.html.markdown b/website/source/intro/getting-started/remote.html.markdown index 7a1bc13ac..6b810a6fb 100644 --- a/website/source/intro/getting-started/remote.html.markdown +++ b/website/source/intro/getting-started/remote.html.markdown @@ -47,7 +47,7 @@ you'll have to run your own Consul server or use a backend that supports locking First, configure the backend in your configuration: -``` +```hcl terraform { backend "consul" { address = "demo.consul.io" @@ -71,7 +71,7 @@ no changes: ``` $ terraform plan -... +# ... No changes. Infrastructure is up-to-date. @@ -115,7 +115,7 @@ $ export ATLAS_TOKEN=ATLAS_ACCESS_TOKEN Replace `ATLAS_ACCESS_TOKEN` with the token generated earlier. Next, configure the Terraform Enterprise backend: -``` +```hcl terraform { backend "atlas" { name = "USERNAME/getting-started" diff --git a/website/source/intro/getting-started/variables.html.md b/website/source/intro/getting-started/variables.html.md index 032616d14..e843e49cc 100644 --- a/website/source/intro/getting-started/variables.html.md +++ b/website/source/intro/getting-started/variables.html.md @@ -23,7 +23,7 @@ the following contents. -> **Note**: that the file can be named anything, since Terraform loads all files ending in `.tf` in a directory. -``` +```hcl variable "access_key" {} variable "secret_key" {} variable "region" { @@ -41,7 +41,7 @@ variables. Next, replace the AWS provider configuration with the following: -``` +```hcl provider "aws" { access_key = "${var.access_key}" secret_key = "${var.secret_key}" @@ -69,7 +69,7 @@ accepts this flag, such as `apply`, `plan`, and `refresh`: $ terraform plan \ -var 'access_key=foo' \ -var 'secret_key=bar' -... +# ... ``` Once again, setting variables this way will not save them, and they'll @@ -81,7 +81,7 @@ To persist variable values, create a file and assign variables within this file. Create a file named `terraform.tfvars` with the following contents: -``` +```hcl access_key = "foo" secret_key = "bar" ``` @@ -111,7 +111,7 @@ Terraform will read environment variables in the form of `TF_VAR_name` to find the value for a variable. For example, the `TF_VAR_access_key` variable can be set to set the `access_key` variable. --> **Note**: Environment variables can only populate string-type variables. +-> **Note**: Environment variables can only populate string-type variables. List and map type variables must be populated via one of the other mechanisms. #### UI Input @@ -135,7 +135,7 @@ for the variable. Lists are defined either explicitly or implicitly -``` +```hcl # implicitly by using brackets [...] variable "cidrs" { default = [] } @@ -145,12 +145,10 @@ variable "cidrs" { type = "list" } You can specify lists in a `terraform.tfvars` file: -``` +```hcl cidrs = [ "10.0.0.0/16", "10.1.0.0/16" ] ``` - - ## Maps We've replaced our sensitive strings with variables, but we still @@ -163,12 +161,12 @@ Maps are a way to create variables that are lookup tables. An example will show this best. Let's extract our AMIs into a map and add support for the `us-west-2` region as well: -``` +```hcl variable "amis" { type = "map" default = { - us-east-1 = "ami-b374d5a5" - us-west-2 = "ami-4b32be2b" + "us-east-1" = "ami-b374d5a5" + "us-west-2" = "ami-4b32be2b" } } ``` @@ -179,7 +177,7 @@ demonstrates both. Then, replace the `aws_instance` with the following: -``` +```hcl resource "aws_instance" "example" { ami = "${lookup(var.amis, var.region)}" instance_type = "t2.micro" @@ -195,7 +193,6 @@ While we don't use it in our example, it is worth noting that you can also do a static lookup of a map directly with `${var.amis["us-east-1"]}`. - ## Assigning Maps We set defaults above, but maps can also be set using the `-var` and @@ -203,7 +200,7 @@ We set defaults above, but maps can also be set using the `-var` and ``` $ terraform plan -var 'amis={ us-east-1 = "foo", us-west-2 = "bar" }' -... +# ... ``` -> **Note**: Even if every key will be assigned as input, the variable must be @@ -212,7 +209,7 @@ established as a map by setting its default to `{}`. Here is an example of setting a map's keys from a file. Starting with these variable definitions: -``` +```hcl variable "region" {} variable "amis" { type = "map" @@ -221,16 +218,16 @@ variable "amis" { You can specify keys in a `terraform.tfvars` file: -``` +```hcl amis = { - us-east-1 = "ami-abc123" - us-west-2 = "ami-def456" + "us-east-1" = "ami-abc123" + "us-west-2" = "ami-def456" } ``` And access them via `lookup()`: -``` +```hcl output "ami" { value = "${lookup(var.amis, var.region)}" } @@ -246,7 +243,6 @@ Apply complete! Resources: 0 added, 0 changed, 0 destroyed. Outputs: ami = ami-def456 - ``` ## Next diff --git a/website/source/intro/index.html.markdown b/website/source/intro/index.html.markdown index 258303313..ad39b9085 100644 --- a/website/source/intro/index.html.markdown +++ b/website/source/intro/index.html.markdown @@ -41,27 +41,31 @@ Examples work best to showcase Terraform. Please see the The key features of Terraform are: -* **Infrastructure as Code**: Infrastructure is described using a high-level - configuration syntax. This allows a blueprint of your datacenter to be - versioned and treated as you would any other code. Additionally, - infrastructure can be shared and re-used. +### Infrastructure as Code -* **Execution Plans**: Terraform has a "planning" step where it generates - an _execution plan_. The execution plan shows what Terraform will do when - you call apply. This lets you avoid any surprises when Terraform - manipulates infrastructure. +Infrastructure is described using a high-level configuration syntax. This allows +a blueprint of your datacenter to be versioned and treated as you would any +other code. Additionally, infrastructure can be shared and re-used. -* **Resource Graph**: Terraform builds a graph of all your resources, - and parallelizes the creation and modification of any non-dependent - resources. Because of this, Terraform builds infrastructure as efficiently - as possible, and operators get insight into dependencies in their - infrastructure. +### Execution Plans -* **Change Automation**: Complex changesets can be applied to - your infrastructure with minimal human interaction. - With the previously mentioned execution - plan and resource graph, you know exactly what Terraform will change - and in what order, avoiding many possible human errors. +Terraform has a "planning" step where it generates an _execution plan_. The +execution plan shows what Terraform will do when you call apply. This lets you +avoid any surprises when Terraform manipulates infrastructure. + +### Resource Graph + +Terraform builds a graph of all your resources, and parallelizes the creation +and modification of any non-dependent resources. Because of this, Terraform +builds infrastructure as efficiently as possible, and operators get insight into +dependencies in their infrastructure. + +### Change Automation + +Complex changesets can be applied to your infrastructure with minimal human +interaction. With the previously mentioned execution plan and resource graph, +you know exactly what Terraform will change and in what order, avoiding many +possible human errors. ## Next Steps diff --git a/website/source/intro/use-cases.html.markdown b/website/source/intro/use-cases.html.markdown index 212bf0e09..0c545cf59 100644 --- a/website/source/intro/use-cases.html.markdown +++ b/website/source/intro/use-cases.html.markdown @@ -13,7 +13,7 @@ This page lists some concrete use cases for Terraform, but the possible use case much broader than what we cover. Due to its extensible nature, providers and provisioners can be added to further extend Terraform's ability to manipulate resources. -#### Heroku App Setup +## Heroku App Setup Heroku is a popular PaaS for hosting web apps. Developers create an app, and then attach add-ons, such as a database, or email provider. One of the best features is @@ -26,7 +26,7 @@ DNSimple to set a CNAME, or setting up Cloudflare as a CDN for the app. Best of all, Terraform can do all of this in under 30 seconds without using a web interface. -#### Multi-Tier Applications +## Multi-Tier Applications A very common pattern is the N-tier architecture. The most common 2-tier architecture is a pool of web servers that use a database tier. Additional tiers get added for API servers, @@ -41,7 +41,7 @@ scaled easily using Terraform by modifying a single `count` configuration value. the creation and provisioning of a resource is codified and automated, elastically scaling with load becomes trivial. -#### Self-Service Clusters +## Self-Service Clusters At a certain organizational size, it becomes very challenging for a centralized operations team to manage a large and growing infrastructure. Instead it becomes @@ -53,7 +53,7 @@ in a configuration. Terraform configurations can be shared within an organizatio enabling customer teams to use the configuration as a black box and use Terraform as a tool to manage their services. -#### Software Demos +## Software Demos Modern software is increasingly networked and distributed. Although tools like [Vagrant](https://www.vagrantup.com/) exist to build virtualized environments @@ -65,7 +65,7 @@ bootstrap a demo on cloud providers like AWS. This allows end users to easily de the software on their own infrastructure, and even enables tweaking parameters like cluster size to more rigorously test tools at any scale. -#### Disposable Environments +## Disposable Environments It is common practice to have both a production and staging or QA environment. These environments are smaller clones of their production counterpart, but are @@ -79,7 +79,7 @@ environments to test in, and then be easily disposed of. Terraform can help tame the difficulty of maintaining parallel environments, and makes it practical to elastically create and destroy them. -#### Software Defined Networking +## Software Defined Networking Software Defined Networking (SDN) is becoming increasingly prevalent in the datacenter, as it provides more control to operators and developers and @@ -93,7 +93,7 @@ versioned and changes to be automated. As an example, [AWS VPC](https://aws.amaz is one of the most commonly used SDN implementations, and [can be configured by Terraform](/docs/providers/aws/r/vpc.html). -#### Resource Schedulers +## Resource Schedulers In large-scale infrastructures, static assignment of applications to machines becomes increasingly challenging. To solve that problem, there are a number @@ -106,7 +106,7 @@ can be treated as a provider, enabling Terraform to request resources from them. This allows Terraform to be used in layers: to setup the physical infrastructure running the schedulers as well as provisioning onto the scheduled grid. -#### Multi-Cloud Deployment +## Multi-Cloud Deployment It's often attractive to spread infrastructure across multiple clouds to increase fault-tolerance. By using only a single region or cloud provider, fault tolerance @@ -118,4 +118,3 @@ for infrastructure management are cloud-specific. Terraform is cloud-agnostic and allows a single configuration to be used to manage multiple providers, and to even handle cross-cloud dependencies. This simplifies management and orchestration, helping operators build large-scale multi-cloud infrastructures. - diff --git a/website/source/layouts/intro.erb b/website/source/layouts/intro.erb index fc4bd9684..38b3fc18d 100644 --- a/website/source/layouts/intro.erb +++ b/website/source/layouts/intro.erb @@ -10,7 +10,7 @@ > - Terraform vs. Other Software + Terraform vs. Other