Mika Drakolis
Mika Drakolis

Reputation: 1

Terraform - Cross provider resource config inheritance

I only recently started figuring out how Terraform works, but I have a very specific problem that I need to address and I cannot find an easy way to do it so far. I would like to setup terraform config in such a way, that there is a shared part of configuration between two different providers, in my case AWS and Docker. For example, if I have a Postgres database and a VM with nginx, I would like to have some sort of "base" resource, which I can "inherit" from in more detailed Docker and AWS setups. I imagine I can use variables for that, but that will not work if I have to add some configuration lines to those containers, I will have to add a variable description and extra line in 2 module configurations, for Docker and AWS separately. Is there a way to do it "OOP" style, with some sort of inheritance?

Upvotes: 0

Views: 163

Answers (1)

Marko E
Marko E

Reputation: 18203

There is a way to do it but not in the programming language type of thinking. By using resource arguments and attributes you can create an implicit dependency between resources, meaning that if one is updated the second should reflect that change as well [1]. An example on how to reference attributes from a resource that is created can be found in [2].

There is also an explicit type of dependency and it is defined with the depends_on meta-argument [3]. With it, you are telling Terraform (and the reader of the code) that something has to happen prior to creating the resource that has the depends_on block defined.

If you want to use modules there is also a way to pass the information between them using output values [4]. Note that output values can be used even without using modules.

Additionally, if you are more inclined to work with infrastructure using programming languages, there is also Terraform CDK [5].


[1] https://www.terraform.io/language/resources/behavior#resource-dependencies

[2] https://www.terraform.io/language/expressions/references#references-to-resource-attributes

[3] https://www.terraform.io/language/meta-arguments/depends_on

[4] https://www.terraform.io/language/values/outputs

[5] https://www.terraform.io/cdktf

Upvotes: 0

Related Questions