|
|
|
@ -10,8 +10,11 @@ import (
|
|
|
|
|
"sync"
|
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
|
|
"github.com/hashicorp/terraform/addrs"
|
|
|
|
|
"github.com/davecgh/go-spew/spew"
|
|
|
|
|
"github.com/zclconf/go-cty/cty"
|
|
|
|
|
|
|
|
|
|
"github.com/hashicorp/terraform/addrs"
|
|
|
|
|
"github.com/hashicorp/terraform/config/configschema"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func TestContext2Plan_basic(t *testing.T) {
|
|
|
|
@ -258,7 +261,18 @@ func TestContext2Plan_modules(t *testing.T) {
|
|
|
|
|
func TestContext2Plan_moduleCycle(t *testing.T) {
|
|
|
|
|
m := testModule(t, "plan-module-cycle")
|
|
|
|
|
p := testProvider("aws")
|
|
|
|
|
p.GetSchemaReturn = &ProviderSchema{
|
|
|
|
|
ResourceTypes: map[string]*configschema.Block{
|
|
|
|
|
"aws_instance": {
|
|
|
|
|
Attributes: map[string]*configschema.Attribute{
|
|
|
|
|
"id": {Type: cty.String, Computed: true},
|
|
|
|
|
"some_input": {Type: cty.String, Optional: true},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
p.DiffFn = testDiffFn
|
|
|
|
|
|
|
|
|
|
ctx := testContext2(t, &ContextOpts{
|
|
|
|
|
Config: m,
|
|
|
|
|
ProviderResolver: ResourceProviderResolverFixed(
|
|
|
|
@ -403,7 +417,19 @@ func TestContext2Plan_moduleInputFromVar(t *testing.T) {
|
|
|
|
|
func TestContext2Plan_moduleMultiVar(t *testing.T) {
|
|
|
|
|
m := testModule(t, "plan-module-multi-var")
|
|
|
|
|
p := testProvider("aws")
|
|
|
|
|
p.GetSchemaReturn = &ProviderSchema{
|
|
|
|
|
ResourceTypes: map[string]*configschema.Block{
|
|
|
|
|
"aws_instance": {
|
|
|
|
|
Attributes: map[string]*configschema.Attribute{
|
|
|
|
|
"id": {Type: cty.String, Computed: true},
|
|
|
|
|
"foo": {Type: cty.String, Optional: true},
|
|
|
|
|
"baz": {Type: cty.String, Optional: true},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
p.DiffFn = testDiffFn
|
|
|
|
|
|
|
|
|
|
ctx := testContext2(t, &ContextOpts{
|
|
|
|
|
Config: m,
|
|
|
|
|
ProviderResolver: ResourceProviderResolverFixed(
|
|
|
|
@ -567,6 +593,20 @@ func TestContext2Plan_moduleProviderInherit(t *testing.T) {
|
|
|
|
|
defer l.Unlock()
|
|
|
|
|
|
|
|
|
|
p := testProvider("aws")
|
|
|
|
|
p.GetSchemaReturn = &ProviderSchema{
|
|
|
|
|
Provider: &configschema.Block{
|
|
|
|
|
Attributes: map[string]*configschema.Attribute{
|
|
|
|
|
"from": {Type: cty.String, Optional: true},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
ResourceTypes: map[string]*configschema.Block{
|
|
|
|
|
"aws_instance": {
|
|
|
|
|
Attributes: map[string]*configschema.Attribute{
|
|
|
|
|
"from": {Type: cty.String, Optional: true},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
p.ConfigureFn = func(c *ResourceConfig) error {
|
|
|
|
|
if v, ok := c.Get("from"); !ok || v.(string) != "root" {
|
|
|
|
|
return fmt.Errorf("bad")
|
|
|
|
@ -620,6 +660,20 @@ func TestContext2Plan_moduleProviderInheritDeep(t *testing.T) {
|
|
|
|
|
|
|
|
|
|
var from string
|
|
|
|
|
p := testProvider("aws")
|
|
|
|
|
|
|
|
|
|
p.GetSchemaReturn = &ProviderSchema{
|
|
|
|
|
Provider: &configschema.Block{
|
|
|
|
|
Attributes: map[string]*configschema.Attribute{
|
|
|
|
|
"from": {Type: cty.String, Optional: true},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
ResourceTypes: map[string]*configschema.Block{
|
|
|
|
|
"aws_instance": {
|
|
|
|
|
Attributes: map[string]*configschema.Attribute{},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
p.ConfigureFn = func(c *ResourceConfig) error {
|
|
|
|
|
v, ok := c.Get("from")
|
|
|
|
|
if !ok || v.(string) != "root" {
|
|
|
|
@ -666,6 +720,21 @@ func TestContext2Plan_moduleProviderDefaultsVar(t *testing.T) {
|
|
|
|
|
defer l.Unlock()
|
|
|
|
|
|
|
|
|
|
p := testProvider("aws")
|
|
|
|
|
p.GetSchemaReturn = &ProviderSchema{
|
|
|
|
|
Provider: &configschema.Block{
|
|
|
|
|
Attributes: map[string]*configschema.Attribute{
|
|
|
|
|
"to": {Type: cty.String, Optional: true},
|
|
|
|
|
"from": {Type: cty.String, Optional: true},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
ResourceTypes: map[string]*configschema.Block{
|
|
|
|
|
"aws_instance": {
|
|
|
|
|
Attributes: map[string]*configschema.Attribute{
|
|
|
|
|
"from": {Type: cty.String, Optional: true},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
p.ConfigureFn = func(c *ResourceConfig) error {
|
|
|
|
|
var buf bytes.Buffer
|
|
|
|
|
if v, ok := c.Get("from"); ok {
|
|
|
|
@ -711,7 +780,22 @@ func TestContext2Plan_moduleProviderDefaultsVar(t *testing.T) {
|
|
|
|
|
func TestContext2Plan_moduleProviderVar(t *testing.T) {
|
|
|
|
|
m := testModule(t, "plan-module-provider-var")
|
|
|
|
|
p := testProvider("aws")
|
|
|
|
|
p.GetSchemaReturn = &ProviderSchema{
|
|
|
|
|
Provider: &configschema.Block{
|
|
|
|
|
Attributes: map[string]*configschema.Attribute{
|
|
|
|
|
"value": {Type: cty.String, Optional: true},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
ResourceTypes: map[string]*configschema.Block{
|
|
|
|
|
"aws_instance": {
|
|
|
|
|
Attributes: map[string]*configschema.Attribute{
|
|
|
|
|
"value": {Type: cty.String, Optional: true},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
p.DiffFn = testDiffFn
|
|
|
|
|
|
|
|
|
|
ctx := testContext2(t, &ContextOpts{
|
|
|
|
|
Config: m,
|
|
|
|
|
ProviderResolver: ResourceProviderResolverFixed(
|
|
|
|
@ -843,7 +927,17 @@ func TestContext2Plan_moduleVarComputed(t *testing.T) {
|
|
|
|
|
func TestContext2Plan_nil(t *testing.T) {
|
|
|
|
|
m := testModule(t, "plan-nil")
|
|
|
|
|
p := testProvider("aws")
|
|
|
|
|
p.GetSchemaReturn = &ProviderSchema{
|
|
|
|
|
ResourceTypes: map[string]*configschema.Block{
|
|
|
|
|
"aws_instance": {
|
|
|
|
|
Attributes: map[string]*configschema.Attribute{
|
|
|
|
|
"nil": {Type: cty.String, Optional: true},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
p.DiffFn = testDiffFn
|
|
|
|
|
|
|
|
|
|
ctx := testContext2(t, &ContextOpts{
|
|
|
|
|
Config: m,
|
|
|
|
|
ProviderResolver: ResourceProviderResolverFixed(
|
|
|
|
@ -999,7 +1093,17 @@ func TestContext2Plan_preventDestroy_countBad(t *testing.T) {
|
|
|
|
|
func TestContext2Plan_preventDestroy_countGood(t *testing.T) {
|
|
|
|
|
m := testModule(t, "plan-prevent-destroy-count-good")
|
|
|
|
|
p := testProvider("aws")
|
|
|
|
|
p.GetSchemaReturn = &ProviderSchema{
|
|
|
|
|
ResourceTypes: map[string]*configschema.Block{
|
|
|
|
|
"aws_instance": {
|
|
|
|
|
Attributes: map[string]*configschema.Attribute{
|
|
|
|
|
"current": {Type: cty.String, Optional: true},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
p.DiffFn = testDiffFn
|
|
|
|
|
|
|
|
|
|
ctx := testContext2(t, &ContextOpts{
|
|
|
|
|
Config: m,
|
|
|
|
|
ProviderResolver: ResourceProviderResolverFixed(
|
|
|
|
@ -1043,7 +1147,17 @@ func TestContext2Plan_preventDestroy_countGood(t *testing.T) {
|
|
|
|
|
func TestContext2Plan_preventDestroy_countGoodNoChange(t *testing.T) {
|
|
|
|
|
m := testModule(t, "plan-prevent-destroy-count-good")
|
|
|
|
|
p := testProvider("aws")
|
|
|
|
|
p.GetSchemaReturn = &ProviderSchema{
|
|
|
|
|
ResourceTypes: map[string]*configschema.Block{
|
|
|
|
|
"aws_instance": {
|
|
|
|
|
Attributes: map[string]*configschema.Attribute{
|
|
|
|
|
"current": {Type: cty.String, Optional: true},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
p.DiffFn = testDiffFn
|
|
|
|
|
|
|
|
|
|
ctx := testContext2(t, &ContextOpts{
|
|
|
|
|
Config: m,
|
|
|
|
|
ProviderResolver: ResourceProviderResolverFixed(
|
|
|
|
@ -1171,7 +1285,26 @@ func TestContext2Plan_computed(t *testing.T) {
|
|
|
|
|
func TestContext2Plan_computedDataResource(t *testing.T) {
|
|
|
|
|
m := testModule(t, "plan-computed-data-resource")
|
|
|
|
|
p := testProvider("aws")
|
|
|
|
|
p.GetSchemaReturn = &ProviderSchema{
|
|
|
|
|
ResourceTypes: map[string]*configschema.Block{
|
|
|
|
|
"aws_instance": {
|
|
|
|
|
Attributes: map[string]*configschema.Attribute{
|
|
|
|
|
"num": {Type: cty.String, Optional: true},
|
|
|
|
|
"compute": {Type: cty.String, Optional: true},
|
|
|
|
|
"foo": {Type: cty.String, Computed: true},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
DataSources: map[string]*configschema.Block{
|
|
|
|
|
"aws_vpc": {
|
|
|
|
|
Attributes: map[string]*configschema.Attribute{
|
|
|
|
|
"foo": {Type: cty.String, Optional: true},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
p.DiffFn = testDiffFn
|
|
|
|
|
|
|
|
|
|
ctx := testContext2(t, &ContextOpts{
|
|
|
|
|
Config: m,
|
|
|
|
|
ProviderResolver: ResourceProviderResolverFixed(
|
|
|
|
@ -1220,7 +1353,26 @@ func TestContext2Plan_computedDataResource(t *testing.T) {
|
|
|
|
|
func TestContext2Plan_computedDataCountResource(t *testing.T) {
|
|
|
|
|
m := testModule(t, "plan-computed-data-count")
|
|
|
|
|
p := testProvider("aws")
|
|
|
|
|
p.GetSchemaReturn = &ProviderSchema{
|
|
|
|
|
ResourceTypes: map[string]*configschema.Block{
|
|
|
|
|
"aws_instance": {
|
|
|
|
|
Attributes: map[string]*configschema.Attribute{
|
|
|
|
|
"num": {Type: cty.String, Optional: true},
|
|
|
|
|
"compute": {Type: cty.String, Optional: true},
|
|
|
|
|
"foo": {Type: cty.String, Computed: true},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
DataSources: map[string]*configschema.Block{
|
|
|
|
|
"aws_vpc": {
|
|
|
|
|
Attributes: map[string]*configschema.Attribute{
|
|
|
|
|
"foo": {Type: cty.String, Optional: true},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
p.DiffFn = testDiffFn
|
|
|
|
|
|
|
|
|
|
ctx := testContext2(t, &ContextOpts{
|
|
|
|
|
Config: m,
|
|
|
|
|
ProviderResolver: ResourceProviderResolverFixed(
|
|
|
|
@ -1287,6 +1439,22 @@ func TestContext2Plan_localValueCount(t *testing.T) {
|
|
|
|
|
func TestContext2Plan_dataSourceTypeMismatch(t *testing.T) {
|
|
|
|
|
m := testModule(t, "plan-data-source-type-mismatch")
|
|
|
|
|
p := testProvider("aws")
|
|
|
|
|
p.GetSchemaReturn = &ProviderSchema{
|
|
|
|
|
ResourceTypes: map[string]*configschema.Block{
|
|
|
|
|
"aws_instance": {
|
|
|
|
|
Attributes: map[string]*configschema.Attribute{
|
|
|
|
|
"ami": {Type: cty.String, Optional: true},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
DataSources: map[string]*configschema.Block{
|
|
|
|
|
"aws_availability_zones": {
|
|
|
|
|
Attributes: map[string]*configschema.Attribute{
|
|
|
|
|
"names": {Type: cty.List(cty.String), Computed: true},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
p.ValidateResourceFn = func(t string, c *ResourceConfig) (ws []string, es []error) {
|
|
|
|
|
// Emulate the type checking behavior of helper/schema based validation
|
|
|
|
|
if t == "aws_instance" {
|
|
|
|
@ -1346,7 +1514,7 @@ func TestContext2Plan_dataSourceTypeMismatch(t *testing.T) {
|
|
|
|
|
if !diags.HasErrors() {
|
|
|
|
|
t.Fatalf("Expected err, got none!")
|
|
|
|
|
}
|
|
|
|
|
expected := "Expected ami to be string"
|
|
|
|
|
expected := `Inappropriate value for attribute "ami": incorrect type; string required`
|
|
|
|
|
if errStr := diags.Err().Error(); !strings.Contains(errStr, expected) {
|
|
|
|
|
t.Fatalf("expected:\n\n%s\n\nto contain:\n\n%s", errStr, expected)
|
|
|
|
|
}
|
|
|
|
@ -1356,6 +1524,23 @@ func TestContext2Plan_dataResourceBecomesComputed(t *testing.T) {
|
|
|
|
|
m := testModule(t, "plan-data-resource-becomes-computed")
|
|
|
|
|
p := testProvider("aws")
|
|
|
|
|
|
|
|
|
|
p.GetSchemaReturn = &ProviderSchema{
|
|
|
|
|
ResourceTypes: map[string]*configschema.Block{
|
|
|
|
|
"aws_instance": {
|
|
|
|
|
Attributes: map[string]*configschema.Attribute{
|
|
|
|
|
"foo": {Type: cty.String, Optional: true},
|
|
|
|
|
"computed": {Type: cty.String, Computed: true},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
DataSources: map[string]*configschema.Block{
|
|
|
|
|
"aws_data_resource": {
|
|
|
|
|
Attributes: map[string]*configschema.Attribute{
|
|
|
|
|
"foo": {Type: cty.String, Optional: true},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
p.DiffFn = func(info *InstanceInfo, state *InstanceState, config *ResourceConfig) (*InstanceDiff, error) {
|
|
|
|
|
if info.Type != "aws_instance" {
|
|
|
|
|
t.Fatalf("don't know how to diff %s", info.Id)
|
|
|
|
@ -1448,7 +1633,20 @@ func TestContext2Plan_dataResourceBecomesComputed(t *testing.T) {
|
|
|
|
|
func TestContext2Plan_computedList(t *testing.T) {
|
|
|
|
|
m := testModule(t, "plan-computed-list")
|
|
|
|
|
p := testProvider("aws")
|
|
|
|
|
p.GetSchemaReturn = &ProviderSchema{
|
|
|
|
|
ResourceTypes: map[string]*configschema.Block{
|
|
|
|
|
"aws_instance": {
|
|
|
|
|
Attributes: map[string]*configschema.Attribute{
|
|
|
|
|
"compute": {Type: cty.String, Optional: true},
|
|
|
|
|
"foo": {Type: cty.String, Optional: true},
|
|
|
|
|
"num": {Type: cty.String, Optional: true},
|
|
|
|
|
"list": {Type: cty.List(cty.String), Computed: true},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
p.DiffFn = testDiffFn
|
|
|
|
|
|
|
|
|
|
ctx := testContext2(t, &ContextOpts{
|
|
|
|
|
Config: m,
|
|
|
|
|
ProviderResolver: ResourceProviderResolverFixed(
|
|
|
|
@ -1664,31 +1862,6 @@ func TestContext2Plan_countIndex(t *testing.T) {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestContext2Plan_countIndexZero(t *testing.T) {
|
|
|
|
|
m := testModule(t, "plan-count-index-zero")
|
|
|
|
|
p := testProvider("aws")
|
|
|
|
|
p.DiffFn = testDiffFn
|
|
|
|
|
ctx := testContext2(t, &ContextOpts{
|
|
|
|
|
Config: m,
|
|
|
|
|
ProviderResolver: ResourceProviderResolverFixed(
|
|
|
|
|
map[string]ResourceProviderFactory{
|
|
|
|
|
"aws": testProviderFuncFixed(p),
|
|
|
|
|
},
|
|
|
|
|
),
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
plan, diags := ctx.Plan()
|
|
|
|
|
if diags.HasErrors() {
|
|
|
|
|
t.Fatalf("unexpected errors: %s", diags.Err())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
actual := strings.TrimSpace(plan.String())
|
|
|
|
|
expected := strings.TrimSpace(testTerraformPlanCountIndexZeroStr)
|
|
|
|
|
if actual != expected {
|
|
|
|
|
t.Fatalf("bad:\n%s", actual)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestContext2Plan_countVar(t *testing.T) {
|
|
|
|
|
m := testModule(t, "plan-count-var")
|
|
|
|
|
p := testProvider("aws")
|
|
|
|
@ -1723,7 +1896,17 @@ func TestContext2Plan_countVar(t *testing.T) {
|
|
|
|
|
func TestContext2Plan_countZero(t *testing.T) {
|
|
|
|
|
m := testModule(t, "plan-count-zero")
|
|
|
|
|
p := testProvider("aws")
|
|
|
|
|
p.GetSchemaReturn = &ProviderSchema{
|
|
|
|
|
ResourceTypes: map[string]*configschema.Block{
|
|
|
|
|
"aws_instance": {
|
|
|
|
|
Attributes: map[string]*configschema.Attribute{
|
|
|
|
|
"foo": {Type: cty.DynamicPseudoType, Optional: true},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
p.DiffFn = testDiffFn
|
|
|
|
|
|
|
|
|
|
ctx := testContext2(t, &ContextOpts{
|
|
|
|
|
Config: m,
|
|
|
|
|
ProviderResolver: ResourceProviderResolverFixed(
|
|
|
|
@ -1989,7 +2172,18 @@ func TestContext2Plan_countIncreaseFromOneCorrupted(t *testing.T) {
|
|
|
|
|
func TestContext2Plan_countIncreaseWithSplatReference(t *testing.T) {
|
|
|
|
|
m := testModule(t, "plan-count-splat-reference")
|
|
|
|
|
p := testProvider("aws")
|
|
|
|
|
p.GetSchemaReturn = &ProviderSchema{
|
|
|
|
|
ResourceTypes: map[string]*configschema.Block{
|
|
|
|
|
"aws_instance": {
|
|
|
|
|
Attributes: map[string]*configschema.Attribute{
|
|
|
|
|
"name": {Type: cty.String, Optional: true},
|
|
|
|
|
"foo_name": {Type: cty.String, Optional: true},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
p.DiffFn = testDiffFn
|
|
|
|
|
|
|
|
|
|
s := &State{
|
|
|
|
|
Modules: []*ModuleState{
|
|
|
|
|
&ModuleState{
|
|
|
|
@ -2300,7 +2494,19 @@ func TestContext2Plan_pathVar(t *testing.T) {
|
|
|
|
|
|
|
|
|
|
m := testModule(t, "plan-path-var")
|
|
|
|
|
p := testProvider("aws")
|
|
|
|
|
p.GetSchemaReturn = &ProviderSchema{
|
|
|
|
|
ResourceTypes: map[string]*configschema.Block{
|
|
|
|
|
"aws_instance": {
|
|
|
|
|
Attributes: map[string]*configschema.Attribute{
|
|
|
|
|
"cwd": {Type: cty.String, Optional: true},
|
|
|
|
|
"module": {Type: cty.String, Optional: true},
|
|
|
|
|
"root": {Type: cty.String, Optional: true},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
p.DiffFn = testDiffFn
|
|
|
|
|
|
|
|
|
|
ctx := testContext2(t, &ContextOpts{
|
|
|
|
|
Config: m,
|
|
|
|
|
ProviderResolver: ResourceProviderResolverFixed(
|
|
|
|
@ -2606,8 +2812,18 @@ func TestContext2Plan_taint(t *testing.T) {
|
|
|
|
|
func TestContext2Plan_taintIgnoreChanges(t *testing.T) {
|
|
|
|
|
m := testModule(t, "plan-taint-ignore-changes")
|
|
|
|
|
p := testProvider("aws")
|
|
|
|
|
p.GetSchemaReturn = &ProviderSchema{
|
|
|
|
|
ResourceTypes: map[string]*configschema.Block{
|
|
|
|
|
"aws_instance": {
|
|
|
|
|
Attributes: map[string]*configschema.Attribute{
|
|
|
|
|
"vars": {Type: cty.String, Optional: true},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
p.ApplyFn = testApplyFn
|
|
|
|
|
p.DiffFn = testDiffFn
|
|
|
|
|
|
|
|
|
|
s := &State{
|
|
|
|
|
Modules: []*ModuleState{
|
|
|
|
|
&ModuleState{
|
|
|
|
@ -2825,7 +3041,20 @@ STATE:
|
|
|
|
|
func TestContext2Plan_targetedModuleWithProvider(t *testing.T) {
|
|
|
|
|
m := testModule(t, "plan-targeted-module-with-provider")
|
|
|
|
|
p := testProvider("null")
|
|
|
|
|
p.GetSchemaReturn = &ProviderSchema{
|
|
|
|
|
Provider: &configschema.Block{
|
|
|
|
|
Attributes: map[string]*configschema.Attribute{
|
|
|
|
|
"key": {Type: cty.String, Optional: true},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
ResourceTypes: map[string]*configschema.Block{
|
|
|
|
|
"null_resource": {
|
|
|
|
|
Attributes: map[string]*configschema.Attribute{},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
p.DiffFn = testDiffFn
|
|
|
|
|
|
|
|
|
|
ctx := testContext2(t, &ContextOpts{
|
|
|
|
|
Config: m,
|
|
|
|
|
ProviderResolver: ResourceProviderResolverFixed(
|
|
|
|
@ -3199,7 +3428,17 @@ func TestContext2Plan_varListErr(t *testing.T) {
|
|
|
|
|
func TestContext2Plan_ignoreChanges(t *testing.T) {
|
|
|
|
|
m := testModule(t, "plan-ignore-changes")
|
|
|
|
|
p := testProvider("aws")
|
|
|
|
|
p.GetSchemaReturn = &ProviderSchema{
|
|
|
|
|
ResourceTypes: map[string]*configschema.Block{
|
|
|
|
|
"aws_instance": {
|
|
|
|
|
Attributes: map[string]*configschema.Attribute{
|
|
|
|
|
"ami": {Type: cty.String, Optional: true},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
p.DiffFn = testDiffFn
|
|
|
|
|
|
|
|
|
|
s := &State{
|
|
|
|
|
Modules: []*ModuleState{
|
|
|
|
|
&ModuleState{
|
|
|
|
@ -3251,7 +3490,18 @@ func TestContext2Plan_ignoreChanges(t *testing.T) {
|
|
|
|
|
func TestContext2Plan_ignoreChangesWildcard(t *testing.T) {
|
|
|
|
|
m := testModule(t, "plan-ignore-changes-wildcard")
|
|
|
|
|
p := testProvider("aws")
|
|
|
|
|
p.GetSchemaReturn = &ProviderSchema{
|
|
|
|
|
ResourceTypes: map[string]*configschema.Block{
|
|
|
|
|
"aws_instance": {
|
|
|
|
|
Attributes: map[string]*configschema.Attribute{
|
|
|
|
|
"ami": {Type: cty.String, Optional: true},
|
|
|
|
|
"instance_type": {Type: cty.String, Optional: true},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
p.DiffFn = testDiffFn
|
|
|
|
|
|
|
|
|
|
s := &State{
|
|
|
|
|
Modules: []*ModuleState{
|
|
|
|
|
&ModuleState{
|
|
|
|
@ -3297,7 +3547,7 @@ func TestContext2Plan_ignoreChangesWildcard(t *testing.T) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if len(plan.Diff.RootModule().Resources) > 0 {
|
|
|
|
|
t.Fatalf("bad: %#v", plan.Diff.RootModule().Resources)
|
|
|
|
|
t.Fatalf("unexpected resource diffs in root module: %s", spew.Sdump(plan.Diff.RootModule().Resources))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
actual := strings.TrimSpace(plan.String())
|
|
|
|
@ -3310,6 +3560,16 @@ func TestContext2Plan_ignoreChangesWildcard(t *testing.T) {
|
|
|
|
|
func TestContext2Plan_moduleMapLiteral(t *testing.T) {
|
|
|
|
|
m := testModule(t, "plan-module-map-literal")
|
|
|
|
|
p := testProvider("aws")
|
|
|
|
|
p.GetSchemaReturn = &ProviderSchema{
|
|
|
|
|
ResourceTypes: map[string]*configschema.Block{
|
|
|
|
|
"aws_instance": {
|
|
|
|
|
Attributes: map[string]*configschema.Attribute{
|
|
|
|
|
"meta": {Type: cty.Map(cty.String), Optional: true},
|
|
|
|
|
"tags": {Type: cty.Map(cty.String), Optional: true},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
p.ApplyFn = testApplyFn
|
|
|
|
|
p.DiffFn = func(i *InstanceInfo, s *InstanceState, c *ResourceConfig) (*InstanceDiff, error) {
|
|
|
|
|
// Here we verify that both the populated and empty map literals made it
|
|
|
|
@ -3352,6 +3612,20 @@ func TestContext2Plan_moduleMapLiteral(t *testing.T) {
|
|
|
|
|
func TestContext2Plan_computedValueInMap(t *testing.T) {
|
|
|
|
|
m := testModule(t, "plan-computed-value-in-map")
|
|
|
|
|
p := testProvider("aws")
|
|
|
|
|
p.GetSchemaReturn = &ProviderSchema{
|
|
|
|
|
ResourceTypes: map[string]*configschema.Block{
|
|
|
|
|
"aws_instance": {
|
|
|
|
|
Attributes: map[string]*configschema.Attribute{
|
|
|
|
|
"looked_up": {Type: cty.String, Optional: true},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
"aws_computed_source": {
|
|
|
|
|
Attributes: map[string]*configschema.Attribute{
|
|
|
|
|
"computed_read_only": {Type: cty.String, Computed: true},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
p.DiffFn = func(info *InstanceInfo, state *InstanceState, c *ResourceConfig) (*InstanceDiff, error) {
|
|
|
|
|
switch info.Type {
|
|
|
|
|
case "aws_computed_source":
|
|
|
|
@ -3366,6 +3640,7 @@ func TestContext2Plan_computedValueInMap(t *testing.T) {
|
|
|
|
|
|
|
|
|
|
return testDiffFn(info, state, c)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ctx := testContext2(t, &ContextOpts{
|
|
|
|
|
Config: m,
|
|
|
|
|
ProviderResolver: ResourceProviderResolverFixed(
|
|
|
|
@ -3399,6 +3674,16 @@ func TestContext2Plan_moduleVariableFromSplat(t *testing.T) {
|
|
|
|
|
m := testModule(t, "plan-module-variable-from-splat")
|
|
|
|
|
p := testProvider("aws")
|
|
|
|
|
p.DiffFn = testDiffFn
|
|
|
|
|
p.GetSchemaReturn = &ProviderSchema{
|
|
|
|
|
ResourceTypes: map[string]*configschema.Block{
|
|
|
|
|
"aws_instance": {
|
|
|
|
|
Attributes: map[string]*configschema.Attribute{
|
|
|
|
|
"thing": {Type: cty.String, Optional: true},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ctx := testContext2(t, &ContextOpts{
|
|
|
|
|
Config: m,
|
|
|
|
|
ProviderResolver: ResourceProviderResolverFixed(
|
|
|
|
@ -3432,6 +3717,24 @@ func TestContext2Plan_createBeforeDestroy_depends_datasource(t *testing.T) {
|
|
|
|
|
m := testModule(t, "plan-cdb-depends-datasource")
|
|
|
|
|
p := testProvider("aws")
|
|
|
|
|
p.DiffFn = testDiffFn
|
|
|
|
|
p.GetSchemaReturn = &ProviderSchema{
|
|
|
|
|
ResourceTypes: map[string]*configschema.Block{
|
|
|
|
|
"aws_instance": {
|
|
|
|
|
Attributes: map[string]*configschema.Attribute{
|
|
|
|
|
"num": {Type: cty.String, Optional: true},
|
|
|
|
|
"compute": {Type: cty.String, Optional: true, Computed: true},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
DataSources: map[string]*configschema.Block{
|
|
|
|
|
"aws_vpc": {
|
|
|
|
|
Attributes: map[string]*configschema.Attribute{
|
|
|
|
|
"foo": {Type: cty.Number, Optional: true},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ctx := testContext2(t, &ContextOpts{
|
|
|
|
|
Config: m,
|
|
|
|
|
ProviderResolver: ResourceProviderResolverFixed(
|
|
|
|
@ -3472,6 +3775,15 @@ func TestContext2Plan_listOrder(t *testing.T) {
|
|
|
|
|
p := testProvider("aws")
|
|
|
|
|
p.ApplyFn = testApplyFn
|
|
|
|
|
p.DiffFn = testDiffFn
|
|
|
|
|
p.GetSchemaReturn = &ProviderSchema{
|
|
|
|
|
ResourceTypes: map[string]*configschema.Block{
|
|
|
|
|
"aws_instance": {
|
|
|
|
|
Attributes: map[string]*configschema.Attribute{
|
|
|
|
|
"foo": {Type: cty.List(cty.String), Optional: true},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
ctx := testContext2(t, &ContextOpts{
|
|
|
|
|
Config: m,
|
|
|
|
|
ProviderResolver: ResourceProviderResolverFixed(
|
|
|
|
@ -3503,6 +3815,18 @@ func TestContext2Plan_ignoreChangesWithFlatmaps(t *testing.T) {
|
|
|
|
|
m := testModule(t, "plan-ignore-changes-with-flatmaps")
|
|
|
|
|
p := testProvider("aws")
|
|
|
|
|
p.DiffFn = testDiffFn
|
|
|
|
|
p.GetSchemaReturn = &ProviderSchema{
|
|
|
|
|
ResourceTypes: map[string]*configschema.Block{
|
|
|
|
|
"aws_instance": {
|
|
|
|
|
Attributes: map[string]*configschema.Attribute{
|
|
|
|
|
"user_data": {Type: cty.String, Optional: true},
|
|
|
|
|
"require_new": {Type: cty.String, Optional: true},
|
|
|
|
|
"set": {Type: cty.Map(cty.String), Optional: true},
|
|
|
|
|
"lst": {Type: cty.List(cty.String), Optional: true},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
s := &State{
|
|
|
|
|
Modules: []*ModuleState{
|
|
|
|
|
&ModuleState{
|
|
|
|
|