Issue 16360 - Empty -target= points to all resources in state

This commit is contained in:
Mark Freebairn 2018-01-09 21:00:55 +00:00
parent e1eb7d45a5
commit 1384cf6861
3 changed files with 55 additions and 0 deletions

View File

@ -487,6 +487,13 @@ func (c *Context) Input(mode InputMode) error {
func (c *Context) Apply() (*State, error) { func (c *Context) Apply() (*State, error) {
defer c.acquireRun("apply")() 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 // Copy our own state
c.state = c.state.DeepCopy() c.state = c.state.DeepCopy()
@ -524,6 +531,13 @@ func (c *Context) Apply() (*State, error) {
func (c *Context) Plan() (*Plan, error) { func (c *Context) Plan() (*Plan, error) {
defer c.acquireRun("plan")() 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{ p := &Plan{
Module: c.module, Module: c.module,
Vars: c.variables, Vars: c.variables,

View File

@ -7412,6 +7412,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) { func TestContext2Apply_targetedCount(t *testing.T) {
m := testModule(t, "apply-targeted-count") m := testModule(t, "apply-targeted-count")
p := testProvider("aws") p := testProvider("aws")

View File

@ -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 // Test that targeting a module properly plans any inputs that depend
// on another module. // on another module.
func TestContext2Plan_targetedCrossModule(t *testing.T) { func TestContext2Plan_targetedCrossModule(t *testing.T) {