states/statefile: upgrade legacy dependency syntax (#21159)

We used to allow "foo.1" etc as a reference, but now it's "foo[1]".
This commit is contained in:
Kristin Laemmert 2019-04-30 14:34:01 -04:00 committed by GitHub
parent 02850111b9
commit d7dda4e436
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 23 additions and 5 deletions

View File

@ -20,7 +20,8 @@
"type": "null_resource",
"depends_on": [
"null_resource.foo.*",
"null_resource.foobar"
"null_resource.foobar",
"null_resource.foobar.1"
],
"primary": {
"id": "5388490630832483079",
@ -87,4 +88,4 @@
"depends_on": []
}
]
}
}

View File

@ -25,7 +25,8 @@
},
"depends_on": [
"null_resource.foo",
"null_resource.foobar"
"null_resource.foobar",
"null_resource.foobar[1]"
]
}
]
@ -74,4 +75,4 @@
]
}
]
}
}

View File

@ -301,7 +301,7 @@ func upgradeInstanceObjectV3ToV4(rsOld *resourceStateV2, isOld *instanceStateV2,
dependencies := make([]string, len(rsOld.Dependencies))
for i, v := range rsOld.Dependencies {
dependencies[i] = strings.TrimSuffix(v, ".*")
dependencies[i] = parseLegacyDependency(v)
}
return &instanceObjectStateV4{
@ -413,3 +413,19 @@ func simplifyImpliedValueType(ty cty.Type) cty.Type {
return ty
}
}
func parseLegacyDependency(s string) string {
parts := strings.Split(s, ".")
ret := parts[0]
for _, part := range parts[1:] {
if part == "*" {
break
}
if i, err := strconv.Atoi(part); err == nil {
ret = ret + fmt.Sprintf("[%d]", i)
break
}
ret = ret + "." + part
}
return ret
}