Wrap resourceStore for Functions, HTTPTriggers and Environments
FunctionStore uses fileStore for function code and resourceStore for the Function's metadata. Environment- and HTTPTrigger- Store are just thin wrappers on resourceStore. There is probably a better way to organize this code, maybe with reflection.
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
/*
|
||||
Copyright 2016 The Fission Authors.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package controller
|
||||
|
||||
import (
|
||||
"github.com/satori/go.uuid"
|
||||
|
||||
"github.com/platform9/fission"
|
||||
)
|
||||
|
||||
type EnvironmentStore struct {
|
||||
resourceStore
|
||||
}
|
||||
|
||||
func (es *EnvironmentStore) create(e *fission.Environment) error {
|
||||
e.Metadata.Uid = uuid.NewV4().String()
|
||||
return es.resourceStore.create(e)
|
||||
}
|
||||
|
||||
func (es *EnvironmentStore) read(m fission.Metadata) (*fission.Environment, error) {
|
||||
var e fission.Environment
|
||||
err := es.resourceStore.read(m.Name, &e)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &e, nil
|
||||
}
|
||||
|
||||
func (es *EnvironmentStore) update(e *fission.Environment) error {
|
||||
e.Metadata.Uid = uuid.NewV4().String()
|
||||
return es.resourceStore.update(e)
|
||||
}
|
||||
|
||||
func (es *EnvironmentStore) delete(m fission.Metadata) error {
|
||||
typeName, err := getTypeName(fission.Environment{})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return es.resourceStore.delete(typeName, m.Name)
|
||||
}
|
||||
|
||||
func (es *EnvironmentStore) list() ([]fission.Environment, error) {
|
||||
typeName, err := getTypeName(fission.Environment{})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
bufs, err := es.resourceStore.getAll(typeName)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
triggers := make([]fission.Environment, 0, len(bufs))
|
||||
js := JsonSerializer{}
|
||||
for _, buf := range bufs {
|
||||
var e fission.Environment
|
||||
err = js.deserialize([]byte(buf), &e)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
triggers = append(triggers, e)
|
||||
}
|
||||
|
||||
return triggers, nil
|
||||
}
|
||||
@@ -0,0 +1,137 @@
|
||||
/*
|
||||
Copyright 2016 The Fission Authors.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package controller
|
||||
|
||||
import (
|
||||
log "github.com/Sirupsen/logrus"
|
||||
|
||||
"github.com/platform9/fission"
|
||||
)
|
||||
|
||||
type FunctionStore struct {
|
||||
resourceStore
|
||||
}
|
||||
|
||||
func (fs *FunctionStore) Create(f *fission.Function) (string, error) {
|
||||
code := []byte(f.Code)
|
||||
_, uid, err := fs.resourceStore.writeFile(f.Key(), code)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
f.Metadata.Uid = uid
|
||||
f.Code = ""
|
||||
|
||||
err = fs.resourceStore.create(f)
|
||||
if err != nil {
|
||||
fs.resourceStore.deleteFile(f.Key(), uid) // ignore errors
|
||||
return "", err
|
||||
}
|
||||
return f.Metadata.Uid, nil
|
||||
}
|
||||
|
||||
func (fs *FunctionStore) Get(m *fission.Metadata) (*fission.Function, error) {
|
||||
var f fission.Function
|
||||
err := fs.resourceStore.read(m.Name, &f)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var code []byte
|
||||
if len(m.Uid) > 0 {
|
||||
log.WithFields(log.Fields{"Uid": m.Uid}).Info("fetching by uid")
|
||||
code, err = fs.resourceStore.readFile(m.Name, &m.Uid)
|
||||
f.Metadata = *m
|
||||
} else {
|
||||
code, err = fs.resourceStore.readFile(m.Name, nil)
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
f.Code = string(code)
|
||||
return &f, nil
|
||||
}
|
||||
|
||||
func (fs *FunctionStore) Update(f *fission.Function) (string, error) {
|
||||
code := []byte(f.Code)
|
||||
_, uid, err := fs.resourceStore.writeFile(f.Key(), code)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
var fnew fission.Function
|
||||
err = fs.resourceStore.read(f.Metadata.Name, &fnew)
|
||||
if err != nil {
|
||||
fs.resourceStore.deleteFile(f.Key(), uid) // ignore err
|
||||
return "", err
|
||||
}
|
||||
|
||||
fnew.Metadata.Uid = uid
|
||||
fnew.Environment = f.Environment
|
||||
|
||||
err = fs.resourceStore.update(fnew)
|
||||
if err != nil {
|
||||
fs.resourceStore.deleteFile(f.Key(), uid) // ignore err
|
||||
return "", err
|
||||
}
|
||||
return uid, err
|
||||
}
|
||||
|
||||
func (fs *FunctionStore) Delete(m fission.Metadata) error {
|
||||
if len(m.Uid) == 0 {
|
||||
err := fs.resourceStore.deleteAllFiles(m.Name)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
err := fs.resourceStore.deleteFile(m.Name, m.Uid)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
typeName, err := getTypeName(fission.Function{})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return fs.resourceStore.delete(typeName, m.Name)
|
||||
}
|
||||
|
||||
func (fs *FunctionStore) List() ([]fission.Function, error) {
|
||||
typeName, err := getTypeName(fission.Function{})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
bufs, err := fs.resourceStore.getAll(typeName)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
js := JsonSerializer{}
|
||||
functions := make([]fission.Function, 0, len(bufs))
|
||||
for _, buf := range bufs {
|
||||
var f fission.Function
|
||||
err = js.deserialize([]byte(buf), &f)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
functions = append(functions, f)
|
||||
}
|
||||
|
||||
return functions, nil
|
||||
}
|
||||
@@ -0,0 +1,83 @@
|
||||
/*
|
||||
Copyright 2016 The Fission Authors.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package controller
|
||||
|
||||
import (
|
||||
"github.com/satori/go.uuid"
|
||||
|
||||
"github.com/platform9/fission"
|
||||
)
|
||||
|
||||
type HTTPTriggerStore struct {
|
||||
resourceStore
|
||||
}
|
||||
|
||||
func (hts *HTTPTriggerStore) create(ht *fission.HTTPTrigger) error {
|
||||
ht.Metadata.Uid = uuid.NewV4().String()
|
||||
return hts.resourceStore.create(ht)
|
||||
}
|
||||
|
||||
func (hts *HTTPTriggerStore) read(m fission.Metadata) (*fission.HTTPTrigger, error) {
|
||||
var ht fission.HTTPTrigger
|
||||
err := hts.resourceStore.read(m.Name, &ht)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &ht, nil
|
||||
}
|
||||
|
||||
func (hts *HTTPTriggerStore) update(ht *fission.HTTPTrigger) error {
|
||||
err := validateHTTPTrigger(ht)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
ht.Metadata.Uid = uuid.NewV4().String()
|
||||
return hts.resourceStore.update(ht)
|
||||
}
|
||||
|
||||
func (hts *HTTPTriggerStore) delete(m fission.Metadata) error {
|
||||
typeName, err := getTypeName(fission.HTTPTrigger{})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return hts.resourceStore.delete(typeName, m.Name)
|
||||
}
|
||||
|
||||
func (hts *HTTPTriggerStore) list() ([]fission.HTTPTrigger, error) {
|
||||
typeName, err := getTypeName(fission.HTTPTrigger{})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
bufs, err := hts.resourceStore.getAll(typeName)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
triggers := make([]fission.HTTPTrigger, 0, len(bufs))
|
||||
js := JsonSerializer{}
|
||||
for _, buf := range bufs {
|
||||
var ht fission.HTTPTrigger
|
||||
err = js.deserialize([]byte(buf), &ht)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
triggers = append(triggers, ht)
|
||||
}
|
||||
|
||||
return triggers, nil
|
||||
}
|
||||
Reference in New Issue
Block a user