Skip to content

Commit

Permalink
Merge pull request #17071 from MarkFreebairn/Issue-16360-empty-target…
Browse files Browse the repository at this point in the history
…-points-to-all-resources-in-state

command: Fix #16360 - Fail fast if -target is specified but empty
  • Loading branch information
jbardin authored Apr 5, 2018
2 parents 79d0a5c + 1384cf6 commit 2f85324
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 0 deletions.
14 changes: 14 additions & 0 deletions terraform/context.go
Original file line number Diff line number Diff line change
Expand Up @@ -487,6 +487,13 @@ func (c *Context) Input(mode InputMode) error {
func (c *Context) Apply() (*State, error) {
defer c.acquireRun("apply")()

// Check there are no empty target parameter values
for _, target := range c.targets {
if target == "" {
return nil, fmt.Errorf("Target parameter must not have empty value")
}
}

// Copy our own state
c.state = c.state.DeepCopy()

Expand Down Expand Up @@ -524,6 +531,13 @@ func (c *Context) Apply() (*State, error) {
func (c *Context) Plan() (*Plan, error) {
defer c.acquireRun("plan")()

// Check there are no empty target parameter values
for _, target := range c.targets {
if target == "" {
return nil, fmt.Errorf("Target parameter must not have empty value")
}
}

p := &Plan{
Module: c.module,
Vars: c.variables,
Expand Down
21 changes: 21 additions & 0 deletions terraform/context_apply_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7485,6 +7485,27 @@ aws_instance.foo:
`)
}

func TestContext2Apply_targetEmpty(t *testing.T) {
m := testModule(t, "apply-targeted")
p := testProvider("aws")
p.ApplyFn = testApplyFn
p.DiffFn = testDiffFn
ctx := testContext2(t, &ContextOpts{
Module: m,
ProviderResolver: ResourceProviderResolverFixed(
map[string]ResourceProviderFactory{
"aws": testProviderFuncFixed(p),
},
),
Targets: []string{""},
})

_, err := ctx.Apply()
if err == nil {
t.Fatalf("should error")
}
}

func TestContext2Apply_targetedCount(t *testing.T) {
m := testModule(t, "apply-targeted-count")
p := testProvider("aws")
Expand Down
20 changes: 20 additions & 0 deletions terraform/context_plan_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2733,6 +2733,26 @@ STATE:
}
}

func TestContext2Plan_targetEmpty(t *testing.T) {
m := testModule(t, "plan-targeted")
p := testProvider("aws")
p.DiffFn = testDiffFn
ctx := testContext2(t, &ContextOpts{
Module: m,
ProviderResolver: ResourceProviderResolverFixed(
map[string]ResourceProviderFactory{
"aws": testProviderFuncFixed(p),
},
),
Targets: []string{""},
})

_, err := ctx.Plan()
if err == nil {
t.Fatal("should error")
}
}

// Test that targeting a module properly plans any inputs that depend
// on another module.
func TestContext2Plan_targetedCrossModule(t *testing.T) {
Expand Down

0 comments on commit 2f85324

Please sign in to comment.