Merge pull request #17548 from hashicorp/jbardin/GH-17368

ignore errors interpolating RawCount during apply
This commit is contained in:
James Bardin 2018-03-09 19:49:44 -05:00 committed by GitHub
commit 95c39d0c0b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 87 additions and 3 deletions

View File

@ -9472,5 +9472,72 @@ func TestContext2Apply_providersFromState(t *testing.T) {
})
}
}
func TestContext2Apply_plannedInterpolatedCount(t *testing.T) {
m := testModule(t, "apply-interpolated-count")
p := testProvider("aws")
p.ApplyFn = testApplyFn
p.DiffFn = testDiffFn
providerResolver := ResourceProviderResolverFixed(
map[string]ResourceProviderFactory{
"aws": testProviderFuncFixed(p),
},
)
s := &State{
Modules: []*ModuleState{
&ModuleState{
Path: rootModulePath,
Resources: map[string]*ResourceState{
"aws_instance.test": {
Type: "aws_instance",
Primary: &InstanceState{
ID: "foo",
},
Provider: "provider.aws",
},
},
},
},
}
ctx := testContext2(t, &ContextOpts{
Module: m,
ProviderResolver: providerResolver,
State: s,
})
plan, err := ctx.Plan()
if err != nil {
t.Fatalf("plan failed: %s", err)
}
// We'll marshal and unmarshal the plan here, to ensure that we have
// a clean new context as would be created if we separately ran
// terraform plan -out=tfplan && terraform apply tfplan
var planBuf bytes.Buffer
err = WritePlan(plan, &planBuf)
if err != nil {
t.Fatalf("failed to write plan: %s", err)
}
plan, err = ReadPlan(&planBuf)
if err != nil {
t.Fatalf("failed to read plan: %s", err)
}
ctx, err = plan.Context(&ContextOpts{
ProviderResolver: providerResolver,
})
if err != nil {
t.Fatalf("failed to create context for plan: %s", err)
}
// Applying the plan should now succeed
_, err = ctx.Apply()
if err != nil {
t.Fatalf("apply failed: %s", err)
}
}

View File

@ -140,7 +140,10 @@ func (n *NodeApplyableResource) evalTreeDataResource(
// Here we are just populating the interpolated value in-place
// inside this RawConfig object, like we would in
// NodeAbstractCountResource.
&EvalInterpolate{Config: n.Config.RawCount},
&EvalInterpolate{
Config: n.Config.RawCount,
ContinueOnErr: true,
},
// We need to re-interpolate the config here, rather than
// just using the diff's values directly, because we've
@ -271,7 +274,10 @@ func (n *NodeApplyableResource) evalTreeManagedResource(
// Here we are just populating the interpolated value in-place
// inside this RawConfig object, like we would in
// NodeAbstractCountResource.
&EvalInterpolate{Config: n.Config.RawCount},
&EvalInterpolate{
Config: n.Config.RawCount,
ContinueOnErr: true,
},
&EvalInterpolate{
Config: n.Config.RawConfig.Copy(),

View File

@ -0,0 +1,11 @@
variable "instance_count" {
default = 1
}
resource "aws_instance" "test" {
count = "${var.instance_count}"
}
resource "aws_instance" "dependent" {
count = "${aws_instance.test.count}"
}