| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- package preview
- import (
- "math/rand"
- "time"
- "github.com/mitchellh/mapstructure"
- "github.com/porter-dev/switchboard/pkg/drivers"
- "github.com/porter-dev/switchboard/pkg/models"
- )
- const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
- var seededRand *rand.Rand = rand.New(rand.NewSource(time.Now().UnixNano()))
- type RandomStringDriverConfig struct {
- Length uint
- }
- type RandomStringDriver struct {
- output map[string]interface{}
- config *RandomStringDriverConfig
- }
- func NewRandomStringDriver(resource *models.Resource, opts *drivers.SharedDriverOpts) (drivers.Driver, error) {
- driver := &RandomStringDriver{
- output: make(map[string]interface{}),
- }
- driverConfig := &RandomStringDriverConfig{}
- err := mapstructure.Decode(resource.Config, driverConfig)
- if err != nil {
- return nil, err
- }
- if driverConfig.Length == 0 {
- driverConfig.Length = 8
- }
- driver.config = driverConfig
- return driver, nil
- }
- func (d *RandomStringDriver) ShouldApply(resource *models.Resource) bool {
- return true
- }
- func (d *RandomStringDriver) Apply(resource *models.Resource) (*models.Resource, error) {
- d.output["value"] = randomString(d.config.Length)
- return resource, nil
- }
- func (d *RandomStringDriver) Output() (map[string]interface{}, error) {
- return d.output, nil
- }
- func randomString(length uint) string {
- b := make([]byte, length)
- for i := range b {
- b[i] = charset[seededRand.Intn(len(charset))]
- }
- return string(b)
- }
|