Skip to content
This repository has been archived by the owner on Nov 15, 2022. It is now read-only.

check for duplicate volumeClaim definition #204

Merged
merged 1 commit into from
Aug 8, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions pkg/encoding/encoding.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,17 @@ func Decode(data []byte) (*spec.App, error) {
return nil, errors.Wrap(err, "could not unmarshal into internal struct")
}
log.Debugf("object unmarshalled: %#v\n", app)

// validate if the user provided input is valid kedge app
if err := validateApp(&app); err != nil {
return nil, errors.Wrapf(err, "error validating app %q", app.Name)
}

// this will add the default values where ever possible
if err := fixApp(&app); err != nil {
return nil, errors.Wrapf(err, "Unable to fix app %q", app.Name)
}

return &app, nil
default:
return nil, fmt.Errorf("invalid controller: %v", controller.Controller)
Expand Down
1 change: 1 addition & 0 deletions pkg/encoding/fix.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import (
"strconv"

"github.com/kedgeproject/kedge/pkg/spec"

"github.com/pkg/errors"
)

Expand Down
33 changes: 33 additions & 0 deletions pkg/encoding/validate.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package encoding

import (
"fmt"

"github.com/kedgeproject/kedge/pkg/spec"

"github.com/pkg/errors"
)

func validateVolumeClaims(vcs []spec.VolumeClaim) error {
// find the duplicate volume claim names, if found any then error out
vcmap := make(map[string]interface{})
for _, vc := range vcs {
if _, ok := vcmap[vc.Name]; !ok {
// value here does not matter
vcmap[vc.Name] = nil
} else {
return fmt.Errorf("duplicate entry of volume claim %q", vc.Name)
}
}
return nil
}

func validateApp(app *spec.App) error {

// validate volumeclaims
if err := validateVolumeClaims(app.VolumeClaims); err != nil {
return errors.Wrap(err, "error validating volume claims")
}

return nil
}
20 changes: 20 additions & 0 deletions pkg/encoding/validate_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package encoding

import (
"testing"

"github.com/kedgeproject/kedge/pkg/spec"
)

func TestValidateVolumeClaims(t *testing.T) {

failingTest := []spec.VolumeClaim{{Name: "foo"}, {Name: "bar"}, {Name: "foo"}}

err := validateVolumeClaims(failingTest)
if err == nil {
t.Errorf("should have failed but passed for input: %+v", failingTest)
} else {
t.Logf("failed with error: %v", err)
}

}
3 changes: 1 addition & 2 deletions pkg/transform/kubernetes/populators.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,10 @@ package kubernetes
import (
"encoding/json"
"fmt"
"sort"

"github.com/kedgeproject/kedge/pkg/spec"

"sort"

log "github.com/Sirupsen/logrus"
"github.com/pkg/errors"
api_v1 "k8s.io/client-go/pkg/api/v1"
Expand Down
9 changes: 9 additions & 0 deletions tests/cmd/multi-pvc-same-name/app.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
name: foo
containers:
- image: foo
volumeClaims:
- name: foo
size: 5Mi
- name: foo
size: 5Mi