Skip to content

Commit

Permalink
use YAML format for environment instead of JSON
Browse files Browse the repository at this point in the history
  • Loading branch information
Andrew Tarasenko committed Nov 5, 2017
1 parent aa022be commit 48625db
Show file tree
Hide file tree
Showing 7 changed files with 2,942 additions and 3,015 deletions.
3 changes: 2 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@ go:
- tip
env:
- "PATH=/home/travis/gopath/bin:$PATH"
- FRONTEND_VERSION="0.1.3"

before_install:
- go get -u github.com/golang/dep/cmd/dep
- curl -o build-prod.tar.gz -L https://github.com/andrexus/cloud-initer-frontend/releases/download/v0.1.1/build-prod.tar.gz
- curl -o build-prod.tar.gz -L https://github.com/andrexus/cloud-initer-frontend/releases/download/v$FRONTEND_VERSION/build-prod.tar.gz
- tar xzf build-prod.tar.gz
2 changes: 1 addition & 1 deletion Gopkg.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions Gopkg.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@
name = "github.com/aymerick/raymond"
version = "2.0.1"

[[constraint]]
branch = "v2"
name = "gopkg.in/yaml.v2"

[[constraint]]
name = "github.com/Sirupsen/logrus"
version = "0.11.5"
Expand Down
2 changes: 2 additions & 0 deletions api/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,8 @@ func NewAPIResponseFromValidationError(errors validator.ValidationErrors) *APIRe
message = fmt.Sprintf("%s is required", err.Field())
case "json":
message = fmt.Sprintf("%s is not a valid JSON", err.Field())
case "yaml":
message = fmt.Sprintf("%s is not a valid YAML", err.Field())
case "ip":
message = fmt.Sprintf("%s is wrong", err.Field())
case "mac":
Expand Down
5,894 changes: 2,905 additions & 2,989 deletions embedded/assets.go

Large diffs are not rendered by default.

23 changes: 19 additions & 4 deletions model/cloud-init.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,21 @@ package model
import (
"errors"

"strings"

"github.com/aymerick/raymond"
)

func init() {
raymond.RegisterHelper("indent", func(s string, indent int) raymond.SafeString {
lines := strings.Split(s, "\n")
for i := 0; i < len(lines); i++ {
lines[i] = strings.Repeat(" ", indent) + lines[i]
}
return raymond.SafeString(strings.Join(lines, "\n"))
})
}

type CloudInitData struct {
UserData string `json:"userData"`
MetaData string `json:"metaData"`
Expand Down Expand Up @@ -45,19 +57,22 @@ func (c *CloudInitServiceImpl) GetCloudInitDataForClient(ipAddress, userAgent st
}

func (c *CloudInitServiceImpl) newCloudInitDataFromTemplate(userDataTemplate, metaDataTemplate string) (*CloudInitData, error) {
config, err := c.EnvironmentService.GetEnvironmentConfig()
env, err := c.EnvironmentService.GetEnvironment()
if err != nil {
return nil, err
}
ctx, err := env.decodeConfig()
if err != nil {
return nil, err
}
cloudInitData := new(CloudInitData)

userData, err := renderTemplate(userDataTemplate, config)
userData, err := renderTemplate(userDataTemplate, ctx)
if err != nil {
return nil, err
}
cloudInitData.UserData = userData

metaData, err := renderTemplate(metaDataTemplate, config)
metaData, err := renderTemplate(metaDataTemplate, ctx)
if err != nil {
return nil, err
}
Expand Down
29 changes: 9 additions & 20 deletions model/environment.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,17 @@ package model
import (
"time"

"encoding/json"

"gopkg.in/go-playground/validator.v9"
"gopkg.in/yaml.v2"
)

type Environment struct {
Config string `json:"config" validate:"json"`
Config string `json:"config" validate:"yaml"`
UpdatedAt time.Time `json:"updatedAt"`
}

type EnvironmentService interface {
GetEnvironment() (*Environment, error)
GetEnvironmentConfig() (map[string]interface{}, error)
Update(newItem *Environment) (*Environment, error)
}

Expand All @@ -27,38 +25,29 @@ func NewEnvironmentService(repository EnvironmentRepository, validator *validato
service := &EnvironmentServiceImpl{
Repository: repository,
}
validator.RegisterValidation("json", service.validateJSON)
validator.RegisterValidation("yaml", service.validateYAML)
return service
}

func (c *EnvironmentServiceImpl) GetEnvironment() (*Environment, error) {
return c.Repository.Get()
}

func (c *EnvironmentServiceImpl) GetEnvironmentConfig() (map[string]interface{}, error) {
env, err := c.Repository.Get()
if err != nil {
return nil, err
}
return decodeConfig(env.Config)
}

func (c *EnvironmentServiceImpl) Update(newItem *Environment) (*Environment, error) {
return c.Repository.Save(newItem)
}

func decodeConfig(config string) (map[string]interface{}, error) {
var item map[string]interface{}
err := json.Unmarshal([]byte(config), &item)
if err != nil {
func (e *Environment) decodeConfig() (interface{}, error) {
item := make(map[interface{}]interface{})
if err := yaml.Unmarshal([]byte(e.Config), &item); err != nil {
return nil, err
}
return item, nil
}

func (c *EnvironmentServiceImpl) validateJSON(fl validator.FieldLevel) bool {
value := fl.Field().String()
_, err := decodeConfig(value)
func (c *EnvironmentServiceImpl) validateYAML(fl validator.FieldLevel) bool {
item := fl.Parent().Interface().(*Environment)
_, err := item.decodeConfig()
if err != nil {
return false
}
Expand Down

0 comments on commit 48625db

Please sign in to comment.