Reputation: 1
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
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