Skip to content

rosmo/tf-module-wrap

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Terraform module wrapper

Read any Terraform module and wraps all its parameters into an object variable and also generates a passthrough module source.

Usage

$ tfmodulewrap 
  -add-defaults
        Add default values
  -ignore-vars string
        Variables to ignore
  -module-path string
        Path containing the module
  -module-var string
        Variable for the module configuration

Example

Using it on Cloud Foundation Fabric's net-address module:

$ tfmodulewrap modules/net-address -add-defaults=true

Result:

variable "net_address" {
  type = object({
    # Map of internal addresses used for Private Service Access.
    psa_addresses = optional(map(object({
      address       = string
      network       = string
      prefix_length = number
      description   = optional(string, "Terraform managed.")
      name          = optional(string)
      })), {
    })
    # Map of internal addresses used for Private Service Connect.
    psc_addresses = optional(map(object({
      address          = optional(string)
      description      = optional(string, "Terraform managed.")
      name             = optional(string)
      network          = optional(string)
      region           = optional(string)
      subnet_self_link = optional(string)
      service_attachment = optional(object({ # so we can safely check if service_attachemnt != null in for_each
        psc_service_attachment_link = string
        global_access               = optional(bool)
      }))
      })), {
    })
    # Map of external addresses, keyed by name.
    external_addresses = optional(map(object({
      region      = string
      description = optional(string, "Terraform managed.")
      ipv6 = optional(object({
        endpoint_type = string
      }))
      labels     = optional(map(string), {})
      name       = optional(string)
      subnetwork = optional(string) # for IPv6
      tier       = optional(string)
      })), {
    })
    # List of global addresses to create.
    global_addresses = optional(map(object({
      description = optional(string, "Terraform managed.")
      ipv6        = optional(map(string)) # To be left empty for ipv6
      name        = optional(string)
      })), {
    })
    # Map of internal addresses to create, keyed by name.
    internal_addresses = optional(map(object({
      region      = string
      subnetwork  = string
      address     = optional(string)
      description = optional(string, "Terraform managed.")
      ipv6        = optional(map(string)) # To be left empty for ipv6
      labels      = optional(map(string))
      name        = optional(string)
      purpose     = optional(string)
      })), {
    })
    # Map of internal addresses used for HPA VPN over Cloud Interconnect.
    ipsec_interconnect_addresses = optional(map(object({
      region        = string
      address       = string
      network       = string
      description   = optional(string, "Terraform managed.")
      name          = optional(string)
      prefix_length = number
      })), {
    })
    # PSC network attachments, names as keys.
    network_attachments = optional(map(object({
      subnet_self_link      = string
      automatic_connection  = optional(bool, false)
      description           = optional(string, "Terraform-managed.")
      producer_accept_lists = optional(list(string))
      producer_reject_lists = optional(list(string))
      })), {
    })
    # Project where the addresses will be created.
    project_id = string
  })
}

module "net_address" {
  source = "/Users/taneli/demos/cloud-foundation-fabric/modules/net-address"

  external_addresses           = var.net_address.external_addresses
  global_addresses             = var.net_address.global_addresses
  internal_addresses           = var.net_address.internal_addresses
  ipsec_interconnect_addresses = var.net_address.ipsec_interconnect_addresses
  network_attachments          = var.net_address.network_attachments
  project_id                   = var.net_address.project_id
  psa_addresses                = var.net_address.psa_addresses
  psc_addresses                = var.net_address.psc_addresses
}

About

Wraps Terraform modules automatically

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages