config: validate that count is an int
This commit is contained in:
parent
581d1dee8c
commit
dd14303022
|
@ -275,6 +275,18 @@ func (c *Config) Validate() error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Interpolate with a fixed number to verify that its a number
|
||||||
|
r.RawCount.interpolate(func(Interpolation) (string, error) {
|
||||||
|
return "5", nil
|
||||||
|
})
|
||||||
|
_, err := strconv.ParseInt(r.RawCount.Value().(string), 0, 0)
|
||||||
|
if err != nil {
|
||||||
|
errs = append(errs, fmt.Errorf(
|
||||||
|
"%s: resource count must be an integer",
|
||||||
|
n))
|
||||||
|
}
|
||||||
|
r.RawCount.init()
|
||||||
|
|
||||||
for _, d := range r.DependsOn {
|
for _, d := range r.DependsOn {
|
||||||
if _, ok := resources[d]; !ok {
|
if _, ok := resources[d]; !ok {
|
||||||
errs = append(errs, fmt.Errorf(
|
errs = append(errs, fmt.Errorf(
|
||||||
|
|
|
@ -53,6 +53,13 @@ func TestConfigValidate_badDependsOn(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestConfigValidate_countInt(t *testing.T) {
|
||||||
|
c := testConfig(t, "validate-count-int")
|
||||||
|
if err := c.Validate(); err != nil {
|
||||||
|
t.Fatalf("err: %s", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestConfigValidate_countModuleVar(t *testing.T) {
|
func TestConfigValidate_countModuleVar(t *testing.T) {
|
||||||
c := testConfig(t, "validate-count-module-var")
|
c := testConfig(t, "validate-count-module-var")
|
||||||
if err := c.Validate(); err == nil {
|
if err := c.Validate(); err == nil {
|
||||||
|
@ -60,6 +67,13 @@ func TestConfigValidate_countModuleVar(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestConfigValidate_countNotInt(t *testing.T) {
|
||||||
|
c := testConfig(t, "validate-count-not-int")
|
||||||
|
if err := c.Validate(); err == nil {
|
||||||
|
t.Fatal("should not be valid")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestConfigValidate_countResourceVar(t *testing.T) {
|
func TestConfigValidate_countResourceVar(t *testing.T) {
|
||||||
c := testConfig(t, "validate-count-resource-var")
|
c := testConfig(t, "validate-count-resource-var")
|
||||||
if err := c.Validate(); err == nil {
|
if err := c.Validate(); err == nil {
|
||||||
|
|
|
@ -79,24 +79,9 @@ func (r *RawConfig) Config() map[string]interface{} {
|
||||||
//
|
//
|
||||||
// If a variable key is missing, this will panic.
|
// If a variable key is missing, this will panic.
|
||||||
func (r *RawConfig) Interpolate(vs map[string]string) error {
|
func (r *RawConfig) Interpolate(vs map[string]string) error {
|
||||||
config, err := copystructure.Copy(r.Raw)
|
return r.interpolate(func(i Interpolation) (string, error) {
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
r.config = config.(map[string]interface{})
|
|
||||||
|
|
||||||
fn := func(i Interpolation) (string, error) {
|
|
||||||
return i.Interpolate(vs)
|
return i.Interpolate(vs)
|
||||||
}
|
})
|
||||||
|
|
||||||
w := &interpolationWalker{F: fn, Replace: true}
|
|
||||||
err = reflectwalk.Walk(r.config, w)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
r.unknownKeys = w.unknownKeys
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *RawConfig) init() error {
|
func (r *RawConfig) init() error {
|
||||||
|
@ -126,6 +111,23 @@ func (r *RawConfig) init() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r *RawConfig) interpolate(fn interpolationWalkerFunc) error {
|
||||||
|
config, err := copystructure.Copy(r.Raw)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
r.config = config.(map[string]interface{})
|
||||||
|
|
||||||
|
w := &interpolationWalker{F: fn, Replace: true}
|
||||||
|
err = reflectwalk.Walk(r.config, w)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
r.unknownKeys = w.unknownKeys
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (r *RawConfig) merge(r2 *RawConfig) *RawConfig {
|
func (r *RawConfig) merge(r2 *RawConfig) *RawConfig {
|
||||||
rawRaw, err := copystructure.Copy(r.Raw)
|
rawRaw, err := copystructure.Copy(r.Raw)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
variable "foo" {}
|
||||||
|
|
||||||
|
resource "aws_instance" "web" {
|
||||||
|
count = "${var.foo}"
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
variable "foo" {}
|
||||||
|
|
||||||
|
resource "aws_instance" "web" {
|
||||||
|
count = "nope${var.foo}"
|
||||||
|
}
|
Loading…
Reference in New Issue