terraform-provider-google/vendor/github.com/terraform-providers/terraform-provider-random/random/resource_integer.go
Riley Karson 8c0bc93771
Vendor random provider to allow use in tests (#2110)
Support for an upcoming generated PR.
2018-09-25 15:09:13 -07:00

106 lines
2.1 KiB
Go

package random
import (
"fmt"
"strconv"
"strings"
"github.com/hashicorp/errwrap"
"github.com/hashicorp/terraform/helper/schema"
)
func resourceInteger() *schema.Resource {
return &schema.Resource{
Create: CreateInteger,
Read: RepopulateInteger,
Delete: schema.RemoveFromState,
Importer: &schema.ResourceImporter{
State: ImportInteger,
},
Schema: map[string]*schema.Schema{
"keepers": {
Type: schema.TypeMap,
Optional: true,
ForceNew: true,
},
"min": {
Type: schema.TypeInt,
Required: true,
ForceNew: true,
},
"max": {
Type: schema.TypeInt,
Required: true,
ForceNew: true,
},
"seed": {
Type: schema.TypeString,
Optional: true,
ForceNew: true,
},
"result": {
Type: schema.TypeInt,
Computed: true,
},
},
}
}
func CreateInteger(d *schema.ResourceData, meta interface{}) error {
min := d.Get("min").(int)
max := d.Get("max").(int)
seed := d.Get("seed").(string)
if max <= min {
return fmt.Errorf("Minimum value needs to be smaller than maximum value")
}
rand := NewRand(seed)
number := rand.Intn((max+1)-min) + min
d.Set("result", number)
d.SetId(strconv.Itoa(number))
return nil
}
func RepopulateInteger(d *schema.ResourceData, _ interface{}) error {
return nil
}
func ImportInteger(d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) {
parts := strings.Split(d.Id(), ",")
if len(parts) != 3 && len(parts) != 4 {
return nil, fmt.Errorf("Invalid import usage: expecting {result},{min},{max} or {result},{min},{max},{seed}")
}
result, err := strconv.Atoi(parts[0])
if err != nil {
return nil, errwrap.Wrapf("Error parsing \"result\": {{err}}", err)
}
d.Set("result", result)
min, err := strconv.Atoi(parts[1])
if err != nil {
return nil, errwrap.Wrapf("Error parsing \"min\": {{err}}", err)
}
d.Set("min", min)
max, err := strconv.Atoi(parts[2])
if err != nil {
return nil, errwrap.Wrapf("Error parsing \"max\": {{err}}", err)
}
d.Set("max", max)
if len(parts) == 4 {
d.Set("seed", parts[3])
}
d.SetId(parts[0])
return []*schema.ResourceData{d}, nil
}