From 03f630bdb8685559cc196b1e27984cae5936d832 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Fri, 26 Sep 2014 14:23:38 -0700 Subject: [PATCH] website: document modules --- website/.DS_Store | Bin 0 -> 6148 bytes website/source/.DS_Store | Bin 0 -> 6148 bytes .../source/docs/commands/get.html.markdown | 26 +++ .../source/docs/configuration/modules.html.md | 67 ++++++ .../source/docs/modules/create.html.markdown | 95 +++++++++ .../source/docs/modules/index.html.markdown | 15 ++ .../source/docs/modules/sources.html.markdown | 195 ++++++++++++++++++ .../source/docs/modules/usage.html.markdown | 105 ++++++++++ website/source/images/.DS_Store | Bin 0 -> 6148 bytes website/source/images/docs/module_graph.png | Bin 0 -> 13651 bytes .../images/docs/module_graph_expand.png | Bin 0 -> 23018 bytes website/source/layouts/docs.erb | 25 +++ 12 files changed, 528 insertions(+) create mode 100644 website/.DS_Store create mode 100644 website/source/.DS_Store create mode 100644 website/source/docs/commands/get.html.markdown create mode 100644 website/source/docs/configuration/modules.html.md create mode 100644 website/source/docs/modules/create.html.markdown create mode 100644 website/source/docs/modules/index.html.markdown create mode 100644 website/source/docs/modules/sources.html.markdown create mode 100644 website/source/docs/modules/usage.html.markdown create mode 100644 website/source/images/.DS_Store create mode 100644 website/source/images/docs/module_graph.png create mode 100644 website/source/images/docs/module_graph_expand.png diff --git a/website/.DS_Store b/website/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..1ace5ab4da7400dde76a0f96db6552f673b6cf8c GIT binary patch literal 6148 zcmeHK%}T>S5Z-O8rh18}Ab8oU&_n&L$5{0!6e<-_sfh`6p(LeAEm8_O`xyS8dV$rL zRMq?KOFwDU?YT-jID^oN8wNEQOHVdsa&G1EsoV3tUTI^!Al8>x`UTM|m5K$ix>D-* z?FY+RSX|rOJ!thWF0Za{Ztw0NpY%y^Ode%M!(e?kQ> zfEf4<19(3OP(;UIs!?4XFsK#)Fb8fWU}Gd}bi4r#9CAouB*v&p|XJ28e-?Vu0ti ztJ`Hr$<)@NJP)b_`~nR?$6%@vJRtNVplG0h82D2L F-T=#{U%mhU literal 0 HcmV?d00001 diff --git a/website/source/.DS_Store b/website/source/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..86e8c58302f9bd59bafdba4d9cab5036142ede02 GIT binary patch literal 6148 zcmeHK%}T>S5Z@v)~Sj;i&j zQ%&5Y9hcnJftpD_@Qht?llr^86Ge@_?RvX1=+x|)%_vM<83wHnp@(}i^rKEGYKMM& zSk?RONk6IA?Ab~yID^oN8wR^FmY!_Lb!4j;z{XwzV}wD+V5$+`fN&iOs6)AFF}Mx~zcA|@ zgQ-Rx&bVnlxcM?S9ST=phy8_G&bXtIMq+>%_{_kFp4wRdw|?&bKL^o_7$63QiUFQ2 zSIZ?x$<)??(T$gI>hk&6JO`=-`~nR?$6%@vJRtNVplG0h82D2L F-T?K4U$X!J literal 0 HcmV?d00001 diff --git a/website/source/docs/commands/get.html.markdown b/website/source/docs/commands/get.html.markdown new file mode 100644 index 0000000000..80f91b08ee --- /dev/null +++ b/website/source/docs/commands/get.html.markdown @@ -0,0 +1,26 @@ +--- +layout: "docs" +page_title: "Command: get" +sidebar_current: "docs-commands-get" +--- + +# Command: get + +The `terraform get` command is used to download and update +[modules](/docs/modules/index.html). + +## Usage + +Usage: `terraform get [options] [dir]` + +The modules are downloaded into a local `.terraform` folder. This +folder should not be committed to version control. + +If a module is already downloaded and the `-update` flag is _not_ set, +Terraform will do nothing. As a result, it is safe (and fast) to run this +command multiple times. + +The command-line flags are all optional. The list of available flags are: + +* `-update` - If specified, modules that are already downloaded will be + checked for updates and the updates will be downloaded if present. diff --git a/website/source/docs/configuration/modules.html.md b/website/source/docs/configuration/modules.html.md new file mode 100644 index 0000000000..07f48ca3cd --- /dev/null +++ b/website/source/docs/configuration/modules.html.md @@ -0,0 +1,67 @@ +--- +layout: "docs" +page_title: "Configuring Modules" +sidebar_current: "docs-config-modules" +--- + +# Module Configuration + +Modules are used in Terraform to modularize and encapsulate groups of +resources in your infrastructure. For more information on modules, see +the dedicated +[modules section](/docs/modules/index.html). + +This page assumes you're familiar with the +[configuration syntax](/docs/configuration/syntax.html) +already. + +## Example + +Module configuration looks like the following: + +``` +module "consul" { + source = "github.com/hashicorp/consul/terraform/aws" + servers = 5 +} +``` + +## Description + +The `module` block configures a module and tells Terraform to build +its resources. Multiple module blocks may be used to configure and use +multiple modules. + +The NAME of the module is logical: it is used only to reference the +module in other places in the configuration. It has no effect on the +source of the module. Therefore, you may name modules whatever you'd like. + +Within the block (the `{ }`) is configuration for the module. +The only required key is `source`, which tells Terraform where this module +can be downloaded from. Valid source values are covered in more detail +in the +[module section](/docs/modules/index.html). + +Other configuration within the module are dependent on the module itself. +Because module configuration maps directly to +[variables](/docs/configuration/variables.html) within the module, they +are always simple key and string values. Complex structures are not used +for modules. + +## Syntax + +The full syntax is: + +``` +module NAME { + source = SOURCE_URL + + CONFIG ... +} +``` + +where `CONFIG` is: + +``` +KEY = VALUE +``` diff --git a/website/source/docs/modules/create.html.markdown b/website/source/docs/modules/create.html.markdown new file mode 100644 index 0000000000..ce0a7f1c4f --- /dev/null +++ b/website/source/docs/modules/create.html.markdown @@ -0,0 +1,95 @@ +--- +layout: "docs" +page_title: "Creating Modules" +sidebar_current: "docs-modules-create" +--- + +# Creating Modules + +Creating modules in Terraform is easy. You may want to do this to better +organize your code, to make a reusable component, or just to learn more about +Terraform. For any reason, if you already know the basics of Terraform, +creating a module is a piece of cake. + +Modules in Terraform are just folders with Terraform files. In fact, +when you run `terraform apply`, the current working directory holding +the Terraform files you're applying comprise what is called the +_root module_. It itself is a valid module. + +Therefore, you can enter the source of any module, run `terraform apply`, +and expect it to work (assuming you satisfy the required variables, if any). + +## An Example + +Within a folder containing Terraform configurations, create a subfolder +"child". In this subfolder, make one empty "main.tf" file. Then, back in +the root folder containing the "child" folder, add this to one of the +Terraform files: + +``` +module "child" { + source = "./child" +} +``` + +This will work. You've created your first module! You can add resources +to the child module to see how that interaction works. + +## Inputs/Outputs + +To make modules more useful than simple isolated containers of Terraform +configurations, modules can be configured and also have outputs that can be +consumed by the configuration using the module. + +Inputs of a module are [variables](/docs/configuration/variables.html) +and outputs are [outputs](/docs/configuration/outputs.html). There is no +special syntax to define these, they're defined just like any other +variables or outputs. + +In the "child" module we created above, add the following: + +``` +variable "memory" {} + +output "received" { + value = "${var.memory}" +} +``` + +This will create a required variable "memory" and then an output "received" +that will simply be the value of the memory variable. + +You can then configure the module and use the output like so: + +``` +module "child" { + source = "./child" + + memory = "1G" +} + +output "child_memory" { + value = "${module.child.received}" +} +``` + +If you run `apply`, you'll again see that this works. + +And that is all there is to it. Variables and outputs are used to configure +modules and provide results. Resources within a module are isolated, +and the whole thing is managed as a single unit. + +## Nested Modules + +You can use a module within a module just like you would anywhere else. +This module will be hidden from the root user, so you'll have re-expose any +variables if you need to, as well as outputs. + +The [get command](/docs/commands/get.html) will automatically get all +nested modules as well. + +You don't have to worry about conflicting versions of modules, since +Terraform builds isolated subtrees of all dependencies. For example, +one module might use version 1.0 of module "foo" and another module +might use version 2.0 of module "foo", and this would all work fine +within Terraform since the modules are created separately. diff --git a/website/source/docs/modules/index.html.markdown b/website/source/docs/modules/index.html.markdown new file mode 100644 index 0000000000..30031ccd33 --- /dev/null +++ b/website/source/docs/modules/index.html.markdown @@ -0,0 +1,15 @@ +--- +layout: "docs" +page_title: "Modules" +sidebar_current: "docs-modules" +--- + +# Modules + +Modules in terraform are self-contained packages of Terraform configurations +that are managed as a group. Modules are used to create reusable components +in Terraform as well as for basic code organization. + +Modules are very easy to both use and create. Depending on what you're +looking to do first, use the navigation on the left to dive into how +modules work. diff --git a/website/source/docs/modules/sources.html.markdown b/website/source/docs/modules/sources.html.markdown new file mode 100644 index 0000000000..fe91eb0286 --- /dev/null +++ b/website/source/docs/modules/sources.html.markdown @@ -0,0 +1,195 @@ +--- +layout: "docs" +page_title: "Module Sources" +sidebar_current: "docs-modules-sources" +--- + +# Module Sources + +As documented in [usage](/docs/modules/usage.html), the only required +parameter when using a module is the `source` paramter which tells Terraform +where the module can be found and what constraints to put on the module +if any (such as branches for git, versions, etc.). + +Terraform manages modules for you: it downloads them, organizes them +on disk, checks for updates, etc. Terraform uses this source parameter for +the download/update of modules. + +Terraform supports the following sources: + + * Local file paths + + * GitHub + + * BitBucket + + * Generic Git, Mercurial repositories + + * HTTP URLs + +Each is documented further below. + +## Local File Paths + +The easiest source is the local file path. For maximum portability, this +should be a relative file path into a subdirectory. This allows you to +organize your Terraform configuration into modules within one repository, +for example. + +An example is shown below: + +``` +module "consul" { + source = "./consul" +} +``` + +Updates for file paths are automatic: when "downloading" the module +using the [get command](/docs/commands/get.html), Terraform will create +a symbolic link to the original directory. Therefore, any changes are +automatically instantly available. + +## GitHub + +Terraform will automatically recognize GitHub URLs and turn them into +the proper Git repository. The syntax is simple: + +``` +module "consul" { + source = "github.com/hashicorp/example" +} +``` + +Subdirectories within the repository can also be referenced: + +``` +module "consul" { + source = "github.com/hashicorp/example/subdir" +} +``` + +GitHub source URLs will require that Git is installed on your system +and that you have the proper access to the repository. + +You can use the same parameters to GitHub repositories as you can generic +Git repositories (such as tags or branches). See the documentation for generic +Git repositories for more information. + +## BitBucket + +Terraform will automatically recognize BitBucket URLs and turn them into +the proper Git or Mercurial repository. An example: + +``` +module "consul" { + source = "bitbucket.org/hashicorp/example" +} +``` + +Subdirectories within the repository can also be referenced: + +``` +module "consul" { + source = "bitbucket.org/hashicorp/example/subdir" +} +``` + +BitBucket URLs will require that Git or Mercurial is installed on your +system, depending on the source URL. + +## Generic Git Repository + +Generic Git repositories are also supported. The value of `source` in this +case should be a complete Git-compatible URL. Using Git requires that +Git is installed on your system. Example: + +``` +module "consul" { + source = "git://hashicorp.com/module.git" +} +``` + +You can also use protocols such as HTTP or SSH, but you'll have to hint +to Terraform (using the forced source type syntax documented below) to use +Git: + +``` +module "consul" { + source = "git::https://hashicorp.com/module.git" +} +``` + +URLs for Git repositories (of any protocol) support the following query +parameters: + + * `ref` - The ref to checkout. This can be a branch, tag, commit, etc. + +An example of using these parameters is shown below: + +``` +module "consul" { + source = "git::https://hashicorp.com/module.git?ref=master" +} +``` + +## Generic Mercurial Repository + +Generic Mercurial repositories are supported. The value of `source` in this +case should be a complete Mercurial-compatible URL. Using Mercurial requires that +Mercurial is installed on your system. Example: + +``` +module "consul" { + source = "hg::http://hashicorp.com/module.hg" +} +``` + +In the case of above, we used the forced source type syntax documented below. +Mercurial repositories require this. + +URLs for Mercurial repositories (of any protocol) support the following query +parameters: + + * `rev` - The rev to checkout. This can be a branch, tag, commit, etc. + +## HTTP URLs + +Any HTTP endpoint can serve up Terraform modules. For HTTP URLs (SSL is +supported, as well), Terraform will make a GET request to the given URL. +An additional GET parameter `terraform-get=1` will be appended, allowing +you to optionally render the page differently when Terraform is requesting it. + +Terraform then looks for the resulting module URL in the following order. + +First, if a header `X-Terraform-Get` is present, then it should contain +the source URL of the actual module. This will be used. + +If the header isn't present, Terraform will look for a `` tag +with the name of "terraform-get". The value will be used as the source +URL. + +## Forced Source Type + +In a couple places above, we've referenced "forced source type." Forced +source type is a syntax added to URLs that allow you to force a specific +method for download/updating the module. It is used to disambiguate URLs. + +For example, the source "http://hashicorp.com/foo.git" could just as +easily be a plain HTTP URL as it might be a Git repository speaking the +HTTP protocol. The forced source type syntax is used to force Terraform +one way or the other. + +Example: + +``` +module "consul" { + source = "git::http://hashicorp.com/foo.git" +} +``` + +The above will force Terraform to get the module using Git, despite it +being an HTTP URL. + +If a forced source type isn't specified, Terraform will match the exact +protocol if it supports it. It will not try multiple methods. In the case +above, it would've used the HTTP method. diff --git a/website/source/docs/modules/usage.html.markdown b/website/source/docs/modules/usage.html.markdown new file mode 100644 index 0000000000..9438a5f7bd --- /dev/null +++ b/website/source/docs/modules/usage.html.markdown @@ -0,0 +1,105 @@ +--- +layout: "docs" +page_title: "Using Modules" +sidebar_current: "docs-modules-usage" +--- + +# Module Usage + +Using modules in Terraform is very similar to defining resources: + +``` +module "consul" { + source = "github.com/hashicorp/consul/terraform/aws" + servers = 3 +} +``` + +You can view the full documentation for the syntax of configuring +modules [here](/docs/configuration/modules.html). + +As you can see, it is very similar to defining resources, with the exception +that we don't specify a type, and just a name. This name can be used elsewhere +in the configuration to reference the module and its variables. + +The existence of the above configuration will tell Terraform to create +the resources in the "consul" module which can be found on GitHub with the +given URL. Just like a resource, the module configuration can be deleted +to remove the module. + +## Source + +The only required configuration key is the `source` parameter. The value of +this tells Terraform where the module can be downloaded, updated, etc. +Terraform comes with support for a variety of module sources. These +are documented on a [separate page](/docs/modules/sources.html). + +Prior to running any command such as `plan` with a configuration that +uses modules, you'll have to [get](/docs/commands/get.html) the modules. +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. +By default, the command will not check for updates, so it is safe (and fast) +to run multiple times. You can use the `-u` flag to check and download +updates. + +## Configuration + +The parameters used to configure modules, such as the `servers` parameter +above, map directly to [variables](/docs/configuration/variables.html) within +the module itself. Therefore, you can quickly discover all the configuration +for a module by inspecting the source of it very easily. + +Additionally, because these map directly to variables, they're always simple +key/value pairs. Modules can't have complex variable inputs. + +## Outputs + +Modules can also specify their own [outputs](/docs/configuration/outputs.html). +These outputs can be referenced in other places in your configuration. +For example: + +``` +resource "aws_instance" "client" { + ami = "ami-123456" + instance_type = "m1.small" + availability_zone = "${module.consul.server_availability_zone}" +} +``` + +This purposely is very similar to accessing resource attributes. But instead +of mapping to a resource, the variable in this case maps to an output of +a module. + +Just like resources, this will create a dependency from the `aws_instance.client` +resource to the module, so the module will be built first. + +## Plans and Graphs + +With modules, commands such as the [plan command](/docs/commands/plan.html) +and +[graph command](/docs/commands/graph.html) will show the module as a single +unit by default. You can use the `-module-depth` parameter to expand this +graph further. + +For example, with a configuration similar to what we've built above, here +is what the graph output looks like by default: + +
+ +
+ +But if we set `-module-depth=-1`, the graph will look like this: + +
+ +
+ +Other commands work similarly with modules. Note that the `-module-depth` +flag is purely a formatting flag; it doesn't affect what modules are created +or not. diff --git a/website/source/images/.DS_Store b/website/source/images/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..3c795397d81143926387b4ff2f13f52c222c9930 GIT binary patch literal 6148 zcmeHK%}T>S5Zgnn^$Kj9qb)=7)U{MXjOjdNmpJ8ur3&6eg|=gU+YazmuV`-i7zy$c)*N14|!9AAbO8N>iFKn#p61Lg>{X2-TdDvTH) z27b!`o(}>P(J`26R7VF4ss#Ydf?EmL*h^rJFz6UeHNpxA*QtOym75lW>vZr76XzIA zHR^Q6P4mIcm$~UsxcWN0U#M`#9gQ>+1H`~r1}5~>#`}No=l=g|63vJKVqmNo;MsDu zT!NC!-8xbn-n9bs6ch#HQjNnDFw|8Hv3M0PfhqyNKm*V*m}&$M2>l2s8fYK}{*-}t Di1A+q literal 0 HcmV?d00001 diff --git a/website/source/images/docs/module_graph.png b/website/source/images/docs/module_graph.png new file mode 100644 index 0000000000000000000000000000000000000000..196746116f7e7572f78d94f4d21ecf5dcf510b2c GIT binary patch literal 13651 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 Aw*UYD literal 0 HcmV?d00001 diff --git a/website/source/images/docs/module_graph_expand.png b/website/source/images/docs/module_graph_expand.png new file mode 100644 index 0000000000000000000000000000000000000000..d9a8631935c6dbde7f185e5805849b153d3653a9 GIT binary patch literal 23018 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 literal 0 HcmV?d00001 diff --git a/website/source/layouts/docs.erb b/website/source/layouts/docs.erb index 5880ea849a..3b1c92fe60 100644 --- a/website/source/layouts/docs.erb +++ b/website/source/layouts/docs.erb @@ -41,6 +41,10 @@ Outputs + > + Modules + + @@ -51,6 +55,10 @@ apply + > + get + + > graph @@ -131,6 +139,23 @@ + > + Modules + + + > Plugins