Writing a Terraform Module: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
Line 28: Line 28:
* 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.
** <code>variables.tf</code> - this must contain [[Hashicorp_Configuration_Language#Input_Variable|input variable]] declarations.
** <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]].
** <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'''.

Revision as of 01:44, 14 November 2019

External

Internal

Reference Example

Playground

https://github.com/ovidiuf/playground/tree/master/hashicorp/terraform/blue-module

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.
    • 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.