Writing a Terraform Module: Difference between revisions
Jump to navigation
Jump to search
Line 27: | Line 27: | ||
* LICENSE | * LICENSE | ||
* Recommended file (they should exist even if they are empty): | * Recommended file (they should exist even if they are empty): | ||
** <code>main.tf</code> - this must contain all nested module calls, if any. | ** <code>main.tf</code> - this must contain all nested module calls, if any. If such calls exist, the should use paths like <code>./modules/my-internal-module/...</code> so that Terraform will consider them to be part of the same repository or package, rather than downloading them again separately. | ||
** <code>variables.tf</code> - this must contain [[Hashicorp_Configuration_Language#Input_Variable|input variable]] declarations. Input variables should have descriptions. | ** <code>variables.tf</code> - this must contain [[Hashicorp_Configuration_Language#Input_Variable|input variable]] declarations. Input variables should have descriptions. | ||
** <code>outputs.tf</code> - this must contain [[Hashicorp_Configuration_Language#Output_Variable|outputs]]. Output variables should have descriptions. | ** <code>outputs.tf</code> - this must contain [[Hashicorp_Configuration_Language#Output_Variable|outputs]]. Output variables should have descriptions. | ||
* For a complex module, resource creation may be split into multiple files, but '''any nested module calls should be in the main file'''. | * For a complex module, resource creation may be split into multiple files, but '''any nested module calls should be in the main file'''. | ||
* <code>modules</code> directory should contain the nested modules. Any nested module with a README.md is considered usable by an external user. If a README doesn't exist, it is considered for internal use only. | |||
=Module Composition= | |||
{{External|https://www.terraform.io/docs/modules/composition.html}} |
Revision as of 01:48, 14 November 2019
External
Internal
Reference Example
- https://registry.terraform.io/modules/hashicorp/consul/aws/0.7.3
- https://github.com/hashicorp/terraform-aws-consul
Playground
Procedure
To define a module, create a new root directory for it and place one or more .tf files inside it.
Standard Structure
Everything is optional, except for the root module:
- Root module - this is the only required element for the standard module structure, and it consists in .tf files - which must exist - in the root directory of the module.
- README or README.md. Should contain a description of the module. Examples can be included in an example directory.
- LICENSE
- Recommended file (they should exist even if they are empty):
main.tf
- this must contain all nested module calls, if any. If such calls exist, the should use paths like./modules/my-internal-module/...
so that Terraform will consider them to be part of the same repository or package, rather than downloading them again separately.variables.tf
- this must contain input variable declarations. Input variables should have descriptions.outputs.tf
- this must contain outputs. Output variables should have descriptions.
- For a complex module, resource creation may be split into multiple files, but any nested module calls should be in the main file.
modules
directory should contain the nested modules. Any nested module with a README.md is considered usable by an external user. If a README doesn't exist, it is considered for internal use only.