Ensure depends_on is in module calls for config

This commit is contained in:
Cameron Stitt 2020-08-20 07:38:55 +10:00
parent 0c5430f88d
commit 54e32652f7
No known key found for this signature in database
GPG Key ID: B101ACFAF2E5325D
4 changed files with 105 additions and 0 deletions

View File

@ -48,6 +48,7 @@ type moduleCall struct {
ForEachExpression *expression `json:"for_each_expression,omitempty"`
Module module `json:"module,omitempty"`
VersionConstraint string `json:"version_constraint,omitempty"`
DependsOn []string `json:"depends_on,omitempty"`
}
// variables is the JSON representation of the variables provided to the current
@ -270,6 +271,20 @@ func marshalModuleCall(c *configs.Config, mc *configs.ModuleCall, schemas *terra
module, _ := marshalModule(c, schemas, mc.Name)
ret.Module = module
if len(mc.DependsOn) > 0 {
dependencies := make([]string, len(mc.DependsOn))
for i, d := range mc.DependsOn {
ref, diags := addrs.ParseRef(d)
// we should not get an error here, because `terraform validate`
// would have complained well before this point, but if we do we'll
// silenty skip it.
if !diags.HasErrors() {
dependencies[i] = ref.Subject.String()
}
}
ret.DependsOn = dependencies
}
return ret
}

View File

@ -0,0 +1,3 @@
variable "test_var" {
default = "foo-var"
}

View File

@ -0,0 +1,11 @@
module "foo" {
source = "./foo"
depends_on = [
test_instance.test
]
}
resource "test_instance" "test" {
ami = "foo-bar"
}

View File

@ -0,0 +1,76 @@
{
"format_version": "0.1",
"terraform_version": "0.13.1-dev",
"planned_values": {
"root_module": {
"resources": [
{
"address": "test_instance.test",
"mode": "managed",
"type": "test_instance",
"name": "test",
"provider_name": "registry.terraform.io/hashicorp/test",
"schema_version": 0,
"values": {
"ami": "foo-bar"
}
}
]
}
},
"resource_changes": [
{
"address": "test_instance.test",
"mode": "managed",
"type": "test_instance",
"name": "test",
"provider_name": "registry.terraform.io/hashicorp/test",
"change": {
"actions": [
"create"
],
"before": null,
"after": {
"ami": "foo-bar"
},
"after_unknown": {
"id": true
}
}
}
],
"configuration": {
"root_module": {
"resources": [
{
"address": "test_instance.test",
"mode": "managed",
"type": "test_instance",
"name": "test",
"provider_config_key": "test",
"expressions": {
"ami": {
"constant_value": "foo-bar"
}
},
"schema_version": 0
}
],
"module_calls": {
"foo": {
"depends_on": [
"test_instance.test"
],
"source": "./foo",
"module": {
"variables": {
"test_var": {
"default": "foo-var"
}
}
}
}
}
}
}
}