AgPipeline / openstack-terraform-nomad

Set up a Nomad cluster on OpenStack using Terraform
MIT License
6 stars 4 forks source link

Problem: Configuration is hard to reuse #6

Closed julianpistorius closed 4 years ago

julianpistorius commented 5 years ago

Hey this looks good, if this is a common pattern you may want to make a module for the network+bastion+security+user work so it can be easily reused.

Originally posted by @nathanhruby in https://github.com/terraref/terraref-terraform/pull/1#issuecomment-519564786

julianpistorius commented 5 years ago

Currently I'm thinking of creating the following modules:

Some background on why this abstraction can be useful:

https://www.terraform.io/docs/modules/index.html

A module is a container for multiple resources that are used together. Modules can be used to create lightweight abstractions, so that you can describe your infrastructure in terms of its architecture, rather than directly in terms of physical objects.

The .tf files in your working directory when you run terraform plan or terraform apply together form the root module. That module may call other modules and connect them together by passing output values from one to input values of another.

When to write a module

In principle any combination of resources and other constructs can be factored out into a module, but over-using modules can make your overall Terraform configuration harder to understand and maintain, so we recommend moderation.

A good module should raise the level of abstraction by describing a new concept in your architecture that is constructed from resource types offered by providers.

For example, aws_instance and aws_elb are both resource types belonging to the AWS provider. You might use a module to represent the higher-level concept "HashiCorp Consul cluster running in AWS" which happens to be constructed from these and other AWS provider resources.

We do not recommend writing modules that are just thin wrappers around single other resource types. If you have trouble finding a name for your module that isn't the same as the main resource type inside it, that may be a sign that your module is not creating any new abstraction and so the module is adding unnecessary complexity. Just use the resource type directly in the calling module instead.

julianpistorius commented 4 years ago

@dlebauer This can be closed as 'wontfix', or moved to 'ice box'