Move packages to proejct/pkg to follow go project folder structure convention (#1190)

This commit is contained in:
Ta-Ching Chen
2019-05-31 16:28:55 +08:00
committed by GitHub
parent 1c5fd92ad6
commit a0e9a39511
196 changed files with 1672 additions and 1716 deletions
+5 -5
View File
@@ -1,9 +1,9 @@
# Binaries # Binaries
fission-bundle/fission-bundle cmd/fission-bundle/fission-bundle
fission/fission cmd/fission-cli/fission
environments/fetcher/cmd/fetcher cmd/fetcher/fetcher
builder/cmd/builder cmd/builder/builder
preupgradechecks/pre-upgrade-checks cmd/preupgradechecks/pre-upgrade-checks
# Logs # Logs
test/logs/ test/logs/
+2 -2
View File
@@ -22,7 +22,7 @@ services:
before_install: before_install:
- sudo apt-get update - sudo apt-get update
- sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-ce - sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-ce
- sudo apt-get -y install apache2-utils parallel - sudo apt-get -y install apache2-utils parallel realpath
- sudo sysctl net.ipv6.conf.all.disable_ipv6=0 - sudo sysctl net.ipv6.conf.all.disable_ipv6=0
install: install:
@@ -38,7 +38,7 @@ before_script:
- helm lint charts/fission-all/ charts/fission-core/ - helm lint charts/fission-all/ charts/fission-core/
- go mod download - go mod download
- go mod vendor - go mod vendor
- go build -o fission/fission fission/*.go - go build -o cmd/fission-cli/fission ./cmd/fission-cli/
- hack/runtests.sh - hack/runtests.sh
script: script:
+5 -5
View File
@@ -20,21 +20,21 @@ ARCH ?= amd64
OS ?= linux OS ?= linux
test: test:
go test -v $(shell go list ./... | grep -v /examples/ | grep -v /environments/) go test -v $(go list ./... | grep -v /examples/ | grep -v /environments/)
build: build-bundle build-client build: build-bundle build-client
build-client: build-client:
go build -o fission/fission ./fission/*.go go build -o cmd/fission-cli/fission ./cmd/fission-cli/
build-bundle: build-bundle:
CGO_ENABLED=0 GOOS=$(OS) GOARCH=$(ARCH) go build -o fission-bundle/fission-bundle ./fission-bundle/*.go CGO_ENABLED=0 GOOS=$(OS) GOARCH=$(ARCH) go build -o cmd/fission-bundle/fission-bundle ./cmd/fission-bundle/
build-image: build-image:
docker build --rm --tag "$(IMAGE):$(VERSION)" fission-bundle docker build --rm --tag "$(IMAGE):$(VERSION)" cmd/fission-bundle/
install: install:
go install ./fission go install ./cmd/fission-cli/
image: build-bundle build-image image: build-bundle build-image
@@ -12,12 +12,12 @@ ARG BUILDDATE=unknown
ARG GOPKG=github.com/fission/fission ARG GOPKG=github.com/fission/fission
COPY . /go/src/${GOPKG} COPY . /go/src/${GOPKG}
WORKDIR /go/src/${GOPKG}/builder/cmd WORKDIR /go/src/${GOPKG}/cmd/builder
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build \ RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build \
-o /go/bin/builder \ -o /go/bin/builder \
-gcflags=-trimpath=$GOPATH \ -gcflags=-trimpath=$GOPATH \
-asmflags=-trimpath=$GOPATH \ -asmflags=-trimpath=$GOPATH \
-ldflags "-X github.com/fission/fission.GitCommit=${GITCOMMIT} -X github.com/fission/fission.BuildDate=${BUILDDATE} -X github.com/fission/fission.Version=${BUILDVERSION}" -ldflags "-X github.com/fission/fission/pkg/info.GitCommit=${GITCOMMIT} -X github.com/fission/fission/pkg/info.BuildDate=${BUILDDATE} -X github.com/fission/fission/pkg/info.Version=${BUILDVERSION}"
FROM alpine:3.5 FROM alpine:3.5
COPY --from=fission-builder /go/bin/builder / COPY --from=fission-builder /go/bin/builder /
@@ -14,41 +14,24 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package main package app
import ( import (
"log"
"net/http" "net/http"
"os"
"go.uber.org/zap" "go.uber.org/zap"
builder "github.com/fission/fission/builder" builder "github.com/fission/fission/pkg/builder"
) )
// Usage: builder <shared volume path> // Usage: builder <shared volume path>
func main() { func Run(logger *zap.Logger, shareVolume string) error {
logger, err := zap.NewProduction() builder := builder.MakeBuilder(logger, shareVolume)
if err != nil {
log.Fatalf("can't initialize zap logger: %v", err)
}
defer logger.Sync()
dir := os.Args[1]
if _, err := os.Stat(dir); err != nil {
if os.IsNotExist(err) {
err = os.MkdirAll(dir, os.ModeDir|0700)
if err != nil {
logger.Fatal("error creating directory", zap.Error(err), zap.String("directory", dir))
}
}
}
builder := builder.MakeBuilder(logger, dir)
mux := http.NewServeMux() mux := http.NewServeMux()
mux.HandleFunc("/", builder.Handler) mux.HandleFunc("/", builder.Handler)
mux.HandleFunc("/version", builder.VersionHandler) mux.HandleFunc("/version", builder.VersionHandler)
mux.HandleFunc("/healthz", func(w http.ResponseWriter, r *http.Request) { mux.HandleFunc("/healthz", func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK) w.WriteHeader(http.StatusOK)
}) })
http.ListenAndServe(":8001", mux) return http.ListenAndServe(":8001", mux)
} }
+48
View File
@@ -0,0 +1,48 @@
/*
Copyright 2018 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 main
import (
"log"
"os"
"go.uber.org/zap"
"github.com/fission/fission/cmd/builder/app"
)
// Usage: builder <shared volume path>
func main() {
logger, err := zap.NewProduction()
if err != nil {
log.Fatalf("can't initialize zap logger: %v", err)
}
defer logger.Sync()
shareVolume := os.Args[1]
if _, err := os.Stat(shareVolume); err != nil {
if os.IsNotExist(err) {
err = os.MkdirAll(shareVolume, os.ModeDir|0700)
if err != nil {
logger.Fatal("error creating directory: %v", zap.Error(err), zap.String("directory", shareVolume))
}
}
}
err = app.Run(logger, shareVolume)
logger.Error("error running builder", zap.Error(err))
}
@@ -12,12 +12,12 @@ ARG BUILDDATE=unknown
ARG GOPKG=github.com/fission/fission ARG GOPKG=github.com/fission/fission
COPY . /go/src/${GOPKG} COPY . /go/src/${GOPKG}
WORKDIR /go/src/${GOPKG}/environments/fetcher/cmd WORKDIR /go/src/${GOPKG}/cmd/fetcher
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build \ RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build \
-o /go/bin/fetcher \ -o /go/bin/fetcher \
-gcflags=-trimpath=$GOPATH \ -gcflags=-trimpath=$GOPATH \
-asmflags=-trimpath=$GOPATH \ -asmflags=-trimpath=$GOPATH \
-ldflags "-X github.com/fission/fission.GitCommit=${GITCOMMIT} -X github.com/fission/fission.BuildDate=${BUILDDATE} -X github.com/fission/fission.Version=${BUILDVERSION}" -ldflags "-X github.com/fission/fission/pkg/info.GitCommit=${GITCOMMIT} -X github.com/fission/fission/pkg/info.BuildDate=${BUILDDATE} -X github.com/fission/fission/pkg/info.Version=${BUILDVERSION}"
FROM alpine:3.4 FROM alpine:3.4
COPY --from=builder /go/bin/fetcher / COPY --from=builder /go/bin/fetcher /
@@ -1,11 +1,10 @@
package main package app
import ( import (
"context" "context"
"encoding/json" "encoding/json"
"flag" "flag"
"fmt" "fmt"
"log"
"net/http" "net/http"
"os" "os"
@@ -14,8 +13,8 @@ import (
"go.opencensus.io/trace" "go.opencensus.io/trace"
"go.uber.org/zap" "go.uber.org/zap"
"github.com/fission/fission" "github.com/fission/fission/pkg/fetcher"
"github.com/fission/fission/environments/fetcher" "github.com/fission/fission/pkg/types"
) )
func registerTraceExporter(collectorEndpoint string) error { func registerTraceExporter(collectorEndpoint string) error {
@@ -41,14 +40,7 @@ func registerTraceExporter(collectorEndpoint string) error {
return nil return nil
} }
// Usage: fetcher <shared volume path> func Run(logger *zap.Logger) {
func main() {
logger, err := zap.NewProduction()
if err != nil {
log.Fatalf("can't initialize zap logger: %v", err)
}
defer logger.Sync()
flag.Usage = fetcherUsage flag.Usage = fetcherUsage
collectorEndpoint := flag.String("jaeger-collector-endpoint", "", "") collectorEndpoint := flag.String("jaeger-collector-endpoint", "", "")
specializeOnStart := flag.Bool("specialize-on-startup", false, "Flag to activate specialize process at pod starup") specializeOnStart := flag.Bool("specialize-on-startup", false, "Flag to activate specialize process at pod starup")
@@ -86,7 +78,7 @@ func main() {
// do specialization in other goroutine to prevent blocking in newdeploy // do specialization in other goroutine to prevent blocking in newdeploy
go func() { go func() {
if *specializeOnStart { if *specializeOnStart {
var specializeReq fission.FunctionSpecializeRequest var specializeReq types.FunctionSpecializeRequest
err := json.Unmarshal([]byte(*specializePayload), &specializeReq) err := json.Unmarshal([]byte(*specializePayload), &specializeReq)
if err != nil { if err != nil {
+36
View File
@@ -0,0 +1,36 @@
/*
Copyright 2018 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 main
import (
"log"
"go.uber.org/zap"
"github.com/fission/fission/cmd/fetcher/app"
)
// Usage: fetcher <shared volume path>
func main() {
logger, err := zap.NewProduction()
if err != nil {
log.Fatalf("can't initialize zap logger: %v", err)
}
defer logger.Sync()
app.Run(logger)
}
@@ -13,13 +13,13 @@ ARG BUILDDATE=unknown
ARG GOPKG=github.com/fission/fission ARG GOPKG=github.com/fission/fission
COPY . /go/src/${GOPKG} COPY . /go/src/${GOPKG}
RUN rm -f /go/src/${GOPKG}/Dockerfile* RUN rm -f /go/src/${GOPKG}/Dockerfile*
WORKDIR /go/src/${GOPKG}/fission-bundle WORKDIR /go/src/${GOPKG}/cmd/fission-bundle
ENV GO111MODULE=on ENV GO111MODULE=on
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -mod vendor \ RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -mod vendor \
-o /go/bin/fission-bundle \ -o /go/bin/fission-bundle \
-gcflags=-trimpath=$GOPATH \ -gcflags=-trimpath=$GOPATH \
-asmflags=-trimpath=$GOPATH \ -asmflags=-trimpath=$GOPATH \
-ldflags "-X github.com/fission/fission.GitCommit=${GITCOMMIT} -X github.com/fission/fission.BuildDate=${BUILDDATE} -X github.com/fission/fission.Version=${BUILDVERSION}" -ldflags "-X github.com/fission/fission/pkg/info.GitCommit=${GITCOMMIT} -X github.com/fission/fission/pkg/info.BuildDate=${BUILDDATE} -X github.com/fission/fission/pkg/info.Version=${BUILDVERSION}"
FROM alpine:3.4 FROM alpine:3.4
RUN apk add --update ca-certificates RUN apk add --update ca-certificates
@@ -12,16 +12,16 @@ import (
"go.opencensus.io/trace" "go.opencensus.io/trace"
"go.uber.org/zap" "go.uber.org/zap"
"github.com/fission/fission" "github.com/fission/fission/pkg/buildermgr"
"github.com/fission/fission/buildermgr" "github.com/fission/fission/pkg/controller"
"github.com/fission/fission/controller" "github.com/fission/fission/pkg/executor"
"github.com/fission/fission/executor" "github.com/fission/fission/pkg/info"
"github.com/fission/fission/kubewatcher" "github.com/fission/fission/pkg/kubewatcher"
functionLogger "github.com/fission/fission/logger" functionLogger "github.com/fission/fission/pkg/logger"
"github.com/fission/fission/mqtrigger" messagequeue "github.com/fission/fission/pkg/mqtrigger"
"github.com/fission/fission/router" "github.com/fission/fission/pkg/router"
"github.com/fission/fission/storagesvc" "github.com/fission/fission/pkg/storagesvc"
"github.com/fission/fission/timer" "github.com/fission/fission/pkg/timer"
) )
func runController(logger *zap.Logger, port int) { func runController(logger *zap.Logger, port int) {
@@ -214,7 +214,7 @@ Options:
} }
defer logger.Sync() defer logger.Sync()
version := fmt.Sprintf("Fission Bundle Version: %v", fission.BuildInfo().String()) version := fmt.Sprintf("Fission Bundle Version: %v", info.BuildInfo().String())
arguments, err := docopt.Parse(usage, nil, true, version, false) arguments, err := docopt.Parse(usage, nil, true, version, false)
if err != nil { if err != nil {
logger.Fatal("Could not parse command line arguments", zap.Error(err)) logger.Fatal("Could not parse command line arguments", zap.Error(err))
+27
View File
@@ -0,0 +1,27 @@
/*
Copyright 2018 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 main
import (
"os"
fcli "github.com/fission/fission/pkg/fission-cli"
)
func main() {
fcli.NewCliApp().Run(os.Args)
}
@@ -12,12 +12,12 @@ ARG BUILDDATE=unknown
ARG GOPKG=github.com/fission/fission ARG GOPKG=github.com/fission/fission
COPY . /go/src/${GOPKG} COPY . /go/src/${GOPKG}
WORKDIR /go/src/${GOPKG}/preupgradechecks WORKDIR /go/src/${GOPKG}/cmd/preupgradechecks
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a \ RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a \
-o /go/bin/pre-upgrade-checks \ -o /go/bin/pre-upgrade-checks \
-gcflags=-trimpath=$GOPATH \ -gcflags=-trimpath=$GOPATH \
-asmflags=-trimpath=$GOPATH \ -asmflags=-trimpath=$GOPATH \
-ldflags "-X github.com/fission/fission.GitCommit=${GITCOMMIT} -X github.com/fission/fission.BuildDate=${BUILDDATE} -X github.com/fission/fission.Version=${BUILDVERSION}" -ldflags "-X github.com/fission/fission/pkg/info.GitCommit=${GITCOMMIT} -X github.com/fission/fission/pkg/info.BuildDate=${BUILDDATE} -X github.com/fission/fission/pkg/info.Version=${BUILDVERSION}"
FROM alpine:3.4 FROM alpine:3.4
@@ -22,7 +22,7 @@ import (
"github.com/docopt/docopt-go" "github.com/docopt/docopt-go"
"go.uber.org/zap" "go.uber.org/zap"
"github.com/fission/fission" "github.com/fission/fission/pkg/info"
) )
func getStringArgWithDefault(arg interface{}, defaultValue string) string { func getStringArgWithDefault(arg interface{}, defaultValue string) string {
@@ -47,7 +47,7 @@ Options:
--fn-pod-namespace=<podNamespace> Namespace where function pods get deployed. --fn-pod-namespace=<podNamespace> Namespace where function pods get deployed.
--envbuilder-namespace=<envBuilderNamespace> Namespace where builder env pods are deployed.` --envbuilder-namespace=<envBuilderNamespace> Namespace where builder env pods are deployed.`
arguments, err := docopt.Parse(usage, nil, true, fission.BuildInfo().String(), false) arguments, err := docopt.Parse(usage, nil, true, info.BuildInfo().String(), false)
if err != nil { if err != nil {
logger.Fatal("Could not parse command line arguments", zap.Error(err)) logger.Fatal("Could not parse command line arguments", zap.Error(err))
} }
@@ -27,8 +27,10 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes"
"github.com/fission/fission" fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
"github.com/fission/fission/crd" "github.com/fission/fission/pkg/crd"
"github.com/fission/fission/pkg/types"
"github.com/fission/fission/pkg/utils"
) )
type ( type (
@@ -43,7 +45,7 @@ type (
) )
const ( const (
MaxRetries = 5 maxRetries = 5
FunctionCRD = "functions.fission.io" FunctionCRD = "functions.fission.io"
) )
@@ -66,7 +68,7 @@ func makePreUpgradeTaskClient(logger *zap.Logger, fnPodNs, envBuilderNs string)
// IsFissionReInstall checks if there is atleast one fission CRD, i.e. function in this case, on this cluster. // IsFissionReInstall checks if there is atleast one fission CRD, i.e. function in this case, on this cluster.
// We need this to find out if fission had been previously installed on this cluster // We need this to find out if fission had been previously installed on this cluster
func (client *PreUpgradeTaskClient) IsFissionReInstall() bool { func (client *PreUpgradeTaskClient) IsFissionReInstall() bool {
for i := 0; i < MaxRetries; i++ { for i := 0; i < maxRetries; i++ {
_, err := client.apiExtClient.ApiextensionsV1beta1().CustomResourceDefinitions().Get(FunctionCRD, metav1.GetOptions{}) _, err := client.apiExtClient.ApiextensionsV1beta1().CustomResourceDefinitions().Get(FunctionCRD, metav1.GetOptions{})
if err != nil && k8serrors.IsNotFound(err) { if err != nil && k8serrors.IsNotFound(err) {
return false return false
@@ -86,9 +88,9 @@ func (client *PreUpgradeTaskClient) VerifyFunctionSpecReferences() {
var result *multierror.Error var result *multierror.Error
var err error var err error
var fList *crd.FunctionList var fList *fv1.FunctionList
for i := 0; i < MaxRetries; i++ { for i := 0; i < maxRetries; i++ {
fList, err = client.fissionClient.Functions(metav1.NamespaceAll).List(metav1.ListOptions{}) fList, err = client.fissionClient.Functions(metav1.NamespaceAll).List(metav1.ListOptions{})
if err == nil { if err == nil {
break break
@@ -98,7 +100,7 @@ func (client *PreUpgradeTaskClient) VerifyFunctionSpecReferences() {
if err != nil { if err != nil {
client.logger.Fatal("error listing functions after max retries", client.logger.Fatal("error listing functions after max retries",
zap.Error(err), zap.Error(err),
zap.Int("max_retries", MaxRetries)) zap.Int("max_retries", maxRetries))
} }
// check that all secrets, configmaps, packages are in the same namespace // check that all secrets, configmaps, packages are in the same namespace
@@ -134,7 +136,7 @@ func (client *PreUpgradeTaskClient) VerifyFunctionSpecReferences() {
// deleteClusterRoleBinding deletes the clusterRoleBinding passed as an argument to it. // deleteClusterRoleBinding deletes the clusterRoleBinding passed as an argument to it.
// If its not present, it just ignores and returns no errors // If its not present, it just ignores and returns no errors
func (client *PreUpgradeTaskClient) deleteClusterRoleBinding(clusterRoleBinding string) (err error) { func (client *PreUpgradeTaskClient) deleteClusterRoleBinding(clusterRoleBinding string) (err error) {
for i := 0; i < MaxRetries; i++ { for i := 0; i < maxRetries; i++ {
err = client.k8sClient.RbacV1beta1().ClusterRoleBindings().Delete(clusterRoleBinding, &metav1.DeleteOptions{}) err = client.k8sClient.RbacV1beta1().ClusterRoleBindings().Delete(clusterRoleBinding, &metav1.DeleteOptions{})
if err != nil && k8serrors.IsNotFound(err) || err == nil { if err != nil && k8serrors.IsNotFound(err) || err == nil {
return nil return nil
@@ -187,34 +189,34 @@ func (client *PreUpgradeTaskClient) SetupRoleBindings() {
// the fact that we're here implies that there had been a prior installation of fission and objects are present still // the fact that we're here implies that there had been a prior installation of fission and objects are present still
// so, we go ahead and create the role-bindings necessary for the fission-fetcher and fission-builder Service Accounts. // so, we go ahead and create the role-bindings necessary for the fission-fetcher and fission-builder Service Accounts.
err := fission.SetupRoleBinding(client.logger, client.k8sClient, fission.PackageGetterRB, metav1.NamespaceDefault, fission.PackageGetterCR, fission.ClusterRole, fission.FissionFetcherSA, client.fnPodNs) err := utils.SetupRoleBinding(client.logger, client.k8sClient, types.PackageGetterRB, metav1.NamespaceDefault, types.PackageGetterCR, types.ClusterRole, types.FissionFetcherSA, client.fnPodNs)
if err != nil { if err != nil {
client.logger.Fatal("error setting up rolebinding for service account", client.logger.Fatal("error setting up rolebinding for service account",
zap.Error(err), zap.Error(err),
zap.String("role_binding", fission.PackageGetterRB), zap.String("role_binding", types.PackageGetterRB),
zap.String("service_account", fission.FissionFetcherSA), zap.String("service_account", types.FissionFetcherSA),
zap.String("service_account_namespace", client.fnPodNs)) zap.String("service_account_namespace", client.fnPodNs))
} }
err = fission.SetupRoleBinding(client.logger, client.k8sClient, fission.PackageGetterRB, metav1.NamespaceDefault, fission.PackageGetterCR, fission.ClusterRole, fission.FissionBuilderSA, client.envBuilderNs) err = utils.SetupRoleBinding(client.logger, client.k8sClient, types.PackageGetterRB, metav1.NamespaceDefault, types.PackageGetterCR, types.ClusterRole, types.FissionBuilderSA, client.envBuilderNs)
if err != nil { if err != nil {
client.logger.Fatal("error setting up rolebinding for service account", client.logger.Fatal("error setting up rolebinding for service account",
zap.Error(err), zap.Error(err),
zap.String("role_binding", fission.PackageGetterRB), zap.String("role_binding", types.PackageGetterRB),
zap.String("service_account", fission.FissionBuilderSA), zap.String("service_account", types.FissionBuilderSA),
zap.String("service_account_namespace", client.envBuilderNs)) zap.String("service_account_namespace", client.envBuilderNs))
} }
err = fission.SetupRoleBinding(client.logger, client.k8sClient, fission.SecretConfigMapGetterRB, metav1.NamespaceDefault, fission.SecretConfigMapGetterCR, fission.ClusterRole, fission.FissionFetcherSA, client.fnPodNs) err = utils.SetupRoleBinding(client.logger, client.k8sClient, types.SecretConfigMapGetterRB, metav1.NamespaceDefault, types.SecretConfigMapGetterCR, types.ClusterRole, types.FissionFetcherSA, client.fnPodNs)
if err != nil { if err != nil {
client.logger.Fatal("error setting up rolebinding for service account", client.logger.Fatal("error setting up rolebinding for service account",
zap.Error(err), zap.Error(err),
zap.String("role_binding", fission.SecretConfigMapGetterRB), zap.String("role_binding", types.SecretConfigMapGetterRB),
zap.String("service_account", fission.FissionFetcherSA), zap.String("service_account", types.FissionFetcherSA),
zap.String("service_account_namespace", client.fnPodNs)) zap.String("service_account_namespace", client.fnPodNs))
} }
client.logger.Info("created rolebindings in default namespace", client.logger.Info("created rolebindings in default namespace",
zap.Strings("role_bindings", []string{fission.PackageGetterRB, fission.SecretConfigMapGetterRB})) zap.Strings("role_bindings", []string{types.PackageGetterRB, types.SecretConfigMapGetterRB}))
return return
} }
-42
View File
@@ -1,42 +0,0 @@
/*
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 crd
import (
fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
)
type (
Package = fv1.Package
PackageList = fv1.PackageList
Function = fv1.Function
FunctionList = fv1.FunctionList
Environment = fv1.Environment
EnvironmentList = fv1.EnvironmentList
HTTPTrigger = fv1.HTTPTrigger
HTTPTriggerList = fv1.HTTPTriggerList
KubernetesWatchTrigger = fv1.KubernetesWatchTrigger
KubernetesWatchTriggerList = fv1.KubernetesWatchTriggerList
TimeTrigger = fv1.TimeTrigger
TimeTriggerList = fv1.TimeTriggerList
MessageQueueTrigger = fv1.MessageQueueTrigger
MessageQueueTriggerList = fv1.MessageQueueTriggerList
Recorder = fv1.Recorder
RecorderList = fv1.RecorderList
CanaryConfig = fv1.CanaryConfig
CanaryConfigList = fv1.CanaryConfigList
)
-15
View File
@@ -1,15 +0,0 @@
#!/bin/bash
set -e
tag=$1
if [ -z "$tag" ]
then
tag=latest
fi
. build.sh
docker build -t fission-bundle .
docker tag fission-bundle fission/fission-bundle:$tag
docker push fission/fission-bundle:$tag
+11
View File
@@ -21,6 +21,7 @@ github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRF
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973 h1:xJ4a3vCFaGF/jqvzLMYoU8P317H5OQ+Via4RmuPwCS0= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973 h1:xJ4a3vCFaGF/jqvzLMYoU8P317H5OQ+Via4RmuPwCS0=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
github.com/blend/go-sdk v1.1.1 h1:R7PcwuIxYvrGc/r9TLLfMpajIboTjqs/HyQouzgJ7mQ=
github.com/blend/go-sdk v1.1.1/go.mod h1:IP1XHXFveOXHRnojRJO7XvqWGqyzevtXND9AdSztAe8= github.com/blend/go-sdk v1.1.1/go.mod h1:IP1XHXFveOXHRnojRJO7XvqWGqyzevtXND9AdSztAe8=
github.com/bsm/sarama-cluster v2.1.15+incompatible h1:RkV6WiNRnqEEbp81druK8zYhmnIgdOjqSVi0+9Cnl2A= github.com/bsm/sarama-cluster v2.1.15+incompatible h1:RkV6WiNRnqEEbp81druK8zYhmnIgdOjqSVi0+9Cnl2A=
github.com/bsm/sarama-cluster v2.1.15+incompatible/go.mod h1:r7ao+4tTNXvWm+VRpRJchr2kQhqxgmAp2iEX5W96gMM= github.com/bsm/sarama-cluster v2.1.15+incompatible/go.mod h1:r7ao+4tTNXvWm+VRpRJchr2kQhqxgmAp2iEX5W96gMM=
@@ -33,6 +34,7 @@ github.com/dchest/uniuri v0.0.0-20160212164326-8902c56451e9/go.mod h1:GgB8SF9nRG
github.com/dgrijalva/jwt-go v0.0.0-20160705203006-01aeca54ebda h1:NyywMz59neOoVRFDz+ccfKWxn784fiHMDnZSy6T+JXY= github.com/dgrijalva/jwt-go v0.0.0-20160705203006-01aeca54ebda h1:NyywMz59neOoVRFDz+ccfKWxn784fiHMDnZSy6T+JXY=
github.com/dgrijalva/jwt-go v0.0.0-20160705203006-01aeca54ebda/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgrijalva/jwt-go v0.0.0-20160705203006-01aeca54ebda/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E=
github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96 h1:cenwrSVm+Z7QLSV/BsnenAOcDXdX4cMv4wP0B/5QbPg=
github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM=
github.com/docopt/docopt-go v0.0.0-20160216232012-784ddc588536 h1:rHnpq7uNlix5l7tWZ55iJcHHrxCPnOVF4FGb7qOT2Jc= github.com/docopt/docopt-go v0.0.0-20160216232012-784ddc588536 h1:rHnpq7uNlix5l7tWZ55iJcHHrxCPnOVF4FGb7qOT2Jc=
github.com/docopt/docopt-go v0.0.0-20160216232012-784ddc588536/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/docopt/docopt-go v0.0.0-20160216232012-784ddc588536/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
@@ -47,6 +49,7 @@ github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1
github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc= github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc=
github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
github.com/elazarl/goproxy v0.0.0-20181111060418-2ce16c963a8a/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/elazarl/goproxy v0.0.0-20181111060418-2ce16c963a8a/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
@@ -56,7 +59,9 @@ github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/gogo/protobuf v1.1.1 h1:72R+M5VuhED/KujmZVcIquuo8mBgX4oVda//DQb3PXo= github.com/gogo/protobuf v1.1.1 h1:72R+M5VuhED/KujmZVcIquuo8mBgX4oVda//DQb3PXo=
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/golang/example v0.0.0-20170904185048-46695d81d1fa h1:iqCQC2Z53KkwGgTN9szyL4q0OQHmuNjeoNnMT6lk66k=
github.com/golang/example v0.0.0-20170904185048-46695d81d1fa/go.mod h1:tO/5UvQ/uKigUjQBPqzstj6uxd3fUIjddi19DxGJeWg= github.com/golang/example v0.0.0-20170904185048-46695d81d1fa/go.mod h1:tO/5UvQ/uKigUjQBPqzstj6uxd3fUIjddi19DxGJeWg=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
@@ -106,6 +111,7 @@ github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3 h1:/UewZcckqhvnnS
github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
@@ -173,12 +179,15 @@ github.com/sirupsen/logrus v1.2.0 h1:juTguoYk5qI21pwyTXY3B3Y5cOTH3ZUyZCg1v/mihuo
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/spf13/pflag v1.0.1 h1:aCvUg6QPl3ibpQUxyLkrEkCHtPqYJL4x9AuhqVqFis4= github.com/spf13/pflag v1.0.1 h1:aCvUg6QPl3ibpQUxyLkrEkCHtPqYJL4x9AuhqVqFis4=
github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/stretchr/objx v0.1.1 h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w= github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/ulikunitz/xz v0.0.0-20180703112113-636d36a76670 h1:HQWT4ta3wW5GZ790GaqLCS+w1dvuA3rMfEQxLi+UOYU= github.com/ulikunitz/xz v0.0.0-20180703112113-636d36a76670 h1:HQWT4ta3wW5GZ790GaqLCS+w1dvuA3rMfEQxLi+UOYU=
github.com/ulikunitz/xz v0.0.0-20180703112113-636d36a76670/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= github.com/ulikunitz/xz v0.0.0-20180703112113-636d36a76670/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8=
github.com/urfave/cli v1.20.0 h1:fDqGv3UG/4jbVl/QkFwEdddtEDjh/5Ov6X+0B/3bPaw=
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
github.com/wcharczuk/go-chart v2.0.1+incompatible h1:0pz39ZAycJFF7ju/1mepnk26RLVLBCWz1STcD3doU0A=
github.com/wcharczuk/go-chart v2.0.1+incompatible/go.mod h1:PF5tmL4EIx/7Wf+hEkpCqYi5He4u90sw+0+6FhrryuE= github.com/wcharczuk/go-chart v2.0.1+incompatible/go.mod h1:PF5tmL4EIx/7Wf+hEkpCqYi5He4u90sw+0+6FhrryuE=
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
go.opencensus.io v0.18.0 h1:Mk5rgZcggtbvtAun5aJzAtjKKN/t0R3jJPlWILlv938= go.opencensus.io v0.18.0 h1:Mk5rgZcggtbvtAun5aJzAtjKKN/t0R3jJPlWILlv938=
@@ -193,6 +202,7 @@ go.uber.org/zap v1.9.1 h1:XCJQEf3W6eZaVwhRBof6ImoYGJSITeKWsyeh3HFu/5o=
go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793 h1:u+LnwYTOOW7Ukr/fppxEb1Nwz0AtPflrblfvUudpo+I= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793 h1:u+LnwYTOOW7Ukr/fppxEb1Nwz0AtPflrblfvUudpo+I=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/image v0.0.0-20190321063152-3fc05d484e9f h1:FO4MZ3N56GnxbqxGKqh+YTzUWQ2sDwtFQEZgLOxh9Jc=
golang.org/x/image v0.0.0-20190321063152-3fc05d484e9f/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190321063152-3fc05d484e9f/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
@@ -230,6 +240,7 @@ google.golang.org/api v0.0.0-20181220000619-583d854617af/go.mod h1:4mhQ8q/RsB7i+
google.golang.org/api v0.0.0-20190123234818-8001663557ac h1:cb/4gikrQnypAmwdJ80ZtUI2bY4iWg6PNxlMSW+iOoQ= google.golang.org/api v0.0.0-20190123234818-8001663557ac h1:cb/4gikrQnypAmwdJ80ZtUI2bY4iWg6PNxlMSW+iOoQ=
google.golang.org/api v0.0.0-20190123234818-8001663557ac/go.mod h1:UGEZY7KEX120AnNLIHFMKIo4obdJhkp2tPbaPlQx13Y= google.golang.org/api v0.0.0-20190123234818-8001663557ac/go.mod h1:UGEZY7KEX120AnNLIHFMKIo4obdJhkp2tPbaPlQx13Y=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.3.0 h1:FBSsiFRMz3LBeXIomRnVzrQwSDj4ibvcRexLG0LZGQk=
google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
+12 -19
View File
@@ -3,7 +3,7 @@
set -e set -e
#set -x #set -x
DIR=$(realpath $(dirname $0))/../ DIR=`realpath $(dirname $0)/../`
BUILDDIR=$(realpath $DIR)/build BUILDDIR=$(realpath $DIR)/build
# Build CLI binaries for mac/linux/windows # Build CLI binaries for mac/linux/windows
@@ -26,7 +26,7 @@ build_cli() {
local gitcommit=$5 local gitcommit=$5
arch="amd64" # parameterize if/when we need to arch="amd64" # parameterize if/when we need to
pushd $DIR/fission pushd $DIR/cmd/fission-cli
if [ "$osName" == "windows" ] if [ "$osName" == "windows" ]
then then
@@ -35,7 +35,8 @@ build_cli() {
binary=fission-cli-${osName} binary=fission-cli-${osName}
fi fi
GOOS=$os GOARCH=$arch go build -gcflags=-trimpath=$GOPATH -asmflags=-trimpath=$GOPATH -ldflags "-X github.com/fission/fission.GitCommit=$gitcommit -X github.com/fission/fission.BuildDate=$date -X github.com/fission/fission.Version=$version" -o $binary . GOOS=$os GOARCH=$arch go build -gcflags=-trimpath=$GOPATH -asmflags=-trimpath=$GOPATH \
-ldflags "-X github.com/fission/fission/pkg/info.GitCommit=$gitcommit -X github.com/fission/fission/pkg/info.BuildDate=$date -X github.com/fission/fission/pkg/info.Version=$version" -o $binary .
outdir=$BUILDDIR/cli/$osName/ outdir=$BUILDDIR/cli/$osName/
mkdir -p $outdir mkdir -p $outdir
@@ -52,7 +53,8 @@ build_fission_bundle_image() {
local tag=fission/fission-bundle:$version local tag=fission/fission-bundle:$version
docker build -t $tag -f $ROOT/fission-bundle/Dockerfile.fission-bundle --build-arg GITCOMMIT=$gitcommit --build-arg BUILDDATE=$date --build-arg BUILDVERSION=$version . docker build -t $tag -f $DIR/cmd/fission-bundle/Dockerfile.fission-bundle --build-arg GITCOMMIT=$gitcommit \
--build-arg BUILDDATE=$date --build-arg BUILDVERSION=$version $DIR
docker tag $tag fission/fission-bundle:latest docker tag $tag fission/fission-bundle:latest
} }
@@ -62,12 +64,9 @@ build_fetcher_image() {
local gitcommit=$3 local gitcommit=$3
local tag=fission/fetcher:$version local tag=fission/fetcher:$version
pushd $DIR/environments/fetcher/cmd docker build -t $tag -f $DIR/cmd/fetcher/Dockerfile.fission-fetcher --build-arg GITCOMMIT=$gitcommit \
--build-arg BUILDDATE=$date --build-arg BUILDVERSION=$version $DIR
docker build -t $tag -f $ROOT/environments/fetcher/cmd/Dockerfile.fission-fetcher --build-arg GITCOMMIT=$gitcommit --build-arg BUILDDATE=$date --build-arg BUILDVERSION=$version .
docker tag $tag fission/fetcher:latest docker tag $tag fission/fetcher:latest
popd
} }
push_fetcher_image() { push_fetcher_image() {
@@ -81,12 +80,9 @@ build_builder_image() {
local gitcommit=$3 local gitcommit=$3
local tag=fission/builder:$version local tag=fission/builder:$version
pushd $DIR/builder/cmd docker build -t $tag -f $DIR/cmd/builder/Dockerfile.fission-builder --build-arg GITCOMMIT=$gitcommit \
--build-arg BUILDDATE=$date --build-arg BUILDVERSION=$version $DIR
docker build -t $tag -f $ROOT/builder/cmd/Dockerfile.fission-builder --build-arg GITCOMMIT=$gitcommit --build-arg BUILDDATE=$date --build-arg BUILDVERSION=$version .
docker tag $tag fission/builder:latest docker tag $tag fission/builder:latest
popd
} }
build_env_image() { build_env_image() {
@@ -126,12 +122,9 @@ build_pre_upgrade_checks_image() {
local tag=fission/pre-upgrade-checks:$version local tag=fission/pre-upgrade-checks:$version
pushd $DIR/preupgradechecks docker build -t $tag -f $DIR/cmd/preupgradechecks/Dockerfile.fission-preupgradechecks \
--build-arg GITCOMMIT=$gitcommit --build-arg BUILDDATE=$date --build-arg BUILDVERSION=$version $DIR
docker build -t $tag -f $ROOT/preupgradechecks/Dockerfile.fission-preupgradechecks --build-arg GITCOMMIT=$gitcommit --build-arg BUILDDATE=$date --build-arg BUILDVERSION=$version .
docker tag $tag fission/pre-upgrade-checks:latest docker tag $tag fission/pre-upgrade-checks:latest
popd
} }
build_all_envs() { build_all_envs() {
+1
View File
@@ -325,6 +325,7 @@ fi
release_environment_check $version $chartsrepo release_environment_check $version $chartsrepo
go mod vendor go mod vendor
# Build release-builder image # Build release-builder image
docker build -t fission-release-builder -f $GOPATH/src/github.com/fission/fission/hack/Dockerfile . docker build -t fission-release-builder -f $GOPATH/src/github.com/fission/fission/hack/Dockerfile .
@@ -34,7 +34,7 @@ import (
"github.com/pkg/errors" "github.com/pkg/errors"
"go.uber.org/zap" "go.uber.org/zap"
"github.com/fission/fission" "github.com/fission/fission/pkg/info"
) )
const ( const (
@@ -74,7 +74,7 @@ func MakeBuilder(logger *zap.Logger, sharedVolumePath string) *Builder {
func (builder *Builder) VersionHandler(w http.ResponseWriter, r *http.Request) { func (builder *Builder) VersionHandler(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json; charset=utf-8") w.Header().Set("Content-Type", "application/json; charset=utf-8")
fmt.Fprintf(w, fission.BuildInfo().String()) fmt.Fprintf(w, info.BuildInfo().String())
} }
func (builder *Builder) Handler(w http.ResponseWriter, r *http.Request) { func (builder *Builder) Handler(w http.ResponseWriter, r *http.Request) {
@@ -27,8 +27,8 @@ import (
"github.com/pkg/errors" "github.com/pkg/errors"
"go.uber.org/zap" "go.uber.org/zap"
"github.com/fission/fission" builder "github.com/fission/fission/pkg/builder"
builder "github.com/fission/fission/builder" ferror "github.com/fission/fission/pkg/error"
) )
type ( type (
@@ -61,7 +61,7 @@ func (c *Client) Build(req *builder.PackageBuildRequest) (*builder.PackageBuildR
if resp.StatusCode == 200 { if resp.StatusCode == 200 {
break break
} }
err = fission.MakeErrorFromHTTP(resp) err = ferror.MakeErrorFromHTTP(resp)
} }
if i < maxRetries-1 { if i < maxRetries-1 {
@@ -88,5 +88,5 @@ func (c *Client) Build(req *builder.PackageBuildRequest) (*builder.PackageBuildR
return nil, err return nil, err
} }
return &pkgBuildResp, fission.MakeErrorFromHTTP(resp) return &pkgBuildResp, ferror.MakeErrorFromHTTP(resp)
} }
@@ -20,8 +20,8 @@ import (
"github.com/pkg/errors" "github.com/pkg/errors"
"go.uber.org/zap" "go.uber.org/zap"
"github.com/fission/fission/crd" "github.com/fission/fission/pkg/crd"
fetcherConfig "github.com/fission/fission/environments/fetcher/config" fetcherConfig "github.com/fission/fission/pkg/fetcher/config"
) )
// Start the buildermgr service. // Start the buildermgr service.
@@ -26,11 +26,13 @@ import (
"github.com/pkg/errors" "github.com/pkg/errors"
"go.uber.org/zap" "go.uber.org/zap"
"github.com/fission/fission" fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
"github.com/fission/fission/builder" "github.com/fission/fission/pkg/builder"
builderClient "github.com/fission/fission/builder/client" builderClient "github.com/fission/fission/pkg/builder/client"
"github.com/fission/fission/crd" "github.com/fission/fission/pkg/crd"
fetcherClient "github.com/fission/fission/environments/fetcher/client" ferror "github.com/fission/fission/pkg/error"
fetcherClient "github.com/fission/fission/pkg/fetcher/client"
"github.com/fission/fission/pkg/types"
) )
// buildPackage helps to build source package into deployment package. // buildPackage helps to build source package into deployment package.
@@ -41,14 +43,14 @@ import (
// 4. Return upload response and build logs. // 4. Return upload response and build logs.
// *. Return build logs and error if any one of steps above failed. // *. Return build logs and error if any one of steps above failed.
func buildPackage(ctx context.Context, logger *zap.Logger, fissionClient *crd.FissionClient, envBuilderNamespace string, func buildPackage(ctx context.Context, logger *zap.Logger, fissionClient *crd.FissionClient, envBuilderNamespace string,
storageSvcUrl string, pkg *crd.Package) (uploadResp *fission.ArchiveUploadResponse, buildLogs string, err error) { storageSvcUrl string, pkg *fv1.Package) (uploadResp *types.ArchiveUploadResponse, buildLogs string, err error) {
env, err := fissionClient.Environments(pkg.Spec.Environment.Namespace).Get(pkg.Spec.Environment.Name) env, err := fissionClient.Environments(pkg.Spec.Environment.Namespace).Get(pkg.Spec.Environment.Name)
if err != nil { if err != nil {
e := "error getting environment CRD info" e := "error getting environment CRD info"
logger.Error(e, zap.Error(err)) logger.Error(e, zap.Error(err))
e = fmt.Sprintf("%s: %v", e, err) e = fmt.Sprintf("%s: %v", e, err)
return nil, e, fission.MakeError(http.StatusInternalServerError, e) return nil, e, ferror.MakeError(http.StatusInternalServerError, e)
} }
svcName := fmt.Sprintf("%v-%v.%v", env.Metadata.Name, env.Metadata.ResourceVersion, envBuilderNamespace) svcName := fmt.Sprintf("%v-%v.%v", env.Metadata.Name, env.Metadata.ResourceVersion, envBuilderNamespace)
@@ -56,8 +58,8 @@ func buildPackage(ctx context.Context, logger *zap.Logger, fissionClient *crd.Fi
fetcherC := fetcherClient.MakeClient(logger, fmt.Sprintf("http://%v:8000", svcName)) fetcherC := fetcherClient.MakeClient(logger, fmt.Sprintf("http://%v:8000", svcName))
builderC := builderClient.MakeClient(logger, fmt.Sprintf("http://%v:8001", svcName)) builderC := builderClient.MakeClient(logger, fmt.Sprintf("http://%v:8001", svcName))
fetchReq := &fission.FunctionFetchRequest{ fetchReq := &types.FunctionFetchRequest{
FetchType: fission.FETCH_SOURCE, FetchType: types.FETCH_SOURCE,
Package: pkg.Metadata, Package: pkg.Metadata,
Filename: srcPkgFilename, Filename: srcPkgFilename,
KeepArchive: false, KeepArchive: false,
@@ -69,7 +71,7 @@ func buildPackage(ctx context.Context, logger *zap.Logger, fissionClient *crd.Fi
e := "error fetching source package" e := "error fetching source package"
logger.Error(e, zap.Error(err)) logger.Error(e, zap.Error(err))
e = fmt.Sprintf("%s: %v", e, err) e = fmt.Sprintf("%s: %v", e, err)
return nil, e, fission.MakeError(http.StatusInternalServerError, e) return nil, e, ferror.MakeError(http.StatusInternalServerError, e)
} }
buildCmd := pkg.Spec.BuildCommand buildCmd := pkg.Spec.BuildCommand
@@ -92,14 +94,14 @@ func buildPackage(ctx context.Context, logger *zap.Logger, fissionClient *crd.Fi
buildLogs = buildResp.BuildLogs buildLogs = buildResp.BuildLogs
} }
buildLogs += fmt.Sprintf("%v\n", e) buildLogs += fmt.Sprintf("%v\n", e)
return nil, buildLogs, fission.MakeError(http.StatusInternalServerError, e) return nil, buildLogs, ferror.MakeError(http.StatusInternalServerError, e)
} }
logger.Info("build succeed", zap.String("source_package", srcPkgFilename), zap.String("deployment_package", buildResp.ArtifactFilename)) logger.Info("build succeed", zap.String("source_package", srcPkgFilename), zap.String("deployment_package", buildResp.ArtifactFilename))
archivePackage := !env.Spec.KeepArchive archivePackage := !env.Spec.KeepArchive
uploadReq := &fission.ArchiveUploadRequest{ uploadReq := &types.ArchiveUploadRequest{
Filename: buildResp.ArtifactFilename, Filename: buildResp.ArtifactFilename,
StorageSvcUrl: storageSvcUrl, StorageSvcUrl: storageSvcUrl,
ArchivePackage: archivePackage, ArchivePackage: archivePackage,
@@ -111,24 +113,24 @@ func buildPackage(ctx context.Context, logger *zap.Logger, fissionClient *crd.Fi
if err != nil { if err != nil {
e := fmt.Sprintf("Error uploading deployment package: %v", err) e := fmt.Sprintf("Error uploading deployment package: %v", err)
buildResp.BuildLogs += fmt.Sprintf("%v\n", e) buildResp.BuildLogs += fmt.Sprintf("%v\n", e)
return nil, buildResp.BuildLogs, fission.MakeError(http.StatusInternalServerError, e) return nil, buildResp.BuildLogs, ferror.MakeError(http.StatusInternalServerError, e)
} }
return uploadResp, buildResp.BuildLogs, nil return uploadResp, buildResp.BuildLogs, nil
} }
func updatePackage(logger *zap.Logger, fissionClient *crd.FissionClient, func updatePackage(logger *zap.Logger, fissionClient *crd.FissionClient,
pkg *crd.Package, status fission.BuildStatus, buildLogs string, pkg *fv1.Package, status fv1.BuildStatus, buildLogs string,
uploadResp *fission.ArchiveUploadResponse) (*crd.Package, error) { uploadResp *types.ArchiveUploadResponse) (*fv1.Package, error) {
pkg.Status = fission.PackageStatus{ pkg.Status = fv1.PackageStatus{
BuildStatus: status, BuildStatus: status,
BuildLog: buildLogs, BuildLog: buildLogs,
} }
if uploadResp != nil { if uploadResp != nil {
pkg.Spec.Deployment = fission.Archive{ pkg.Spec.Deployment = fv1.Archive{
Type: fission.ArchiveTypeUrl, Type: types.ArchiveTypeUrl,
URL: uploadResp.ArchiveDownloadUrl, URL: uploadResp.ArchiveDownloadUrl,
Checksum: uploadResp.Checksum, Checksum: uploadResp.Checksum,
} }
@@ -32,10 +32,12 @@ import (
"k8s.io/apimachinery/pkg/watch" "k8s.io/apimachinery/pkg/watch"
"k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes"
"github.com/fission/fission" fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
"github.com/fission/fission/crd" "github.com/fission/fission/pkg/crd"
fetcherConfig "github.com/fission/fission/environments/fetcher/config" "github.com/fission/fission/pkg/executor/util"
"github.com/fission/fission/executor/util" fetcherConfig "github.com/fission/fission/pkg/fetcher/config"
"github.com/fission/fission/pkg/types"
"github.com/fission/fission/pkg/utils"
) )
type requestType int type requestType int
@@ -65,8 +67,8 @@ type (
envwRequest struct { envwRequest struct {
requestType requestType
env *crd.Environment env *fv1.Environment
envList []crd.Environment envList []fv1.Environment
respChan chan envwResponse respChan chan envwResponse
} }
@@ -106,7 +108,7 @@ func makeEnvironmentWatcher(
useIstio = istio useIstio = istio
} }
builderImagePullPolicy := fission.GetImagePullPolicy(os.Getenv("BUILDER_IMAGE_PULL_POLICY")) builderImagePullPolicy := utils.GetImagePullPolicy(os.Getenv("BUILDER_IMAGE_PULL_POLICY"))
envWatcher := &environmentWatcher{ envWatcher := &environmentWatcher{
logger: logger.Named("environment_watcher"), logger: logger.Named("environment_watcher"),
@@ -151,7 +153,7 @@ func (envw *environmentWatcher) watchEnvironments() {
ResourceVersion: rv, ResourceVersion: rv,
}) })
if err != nil { if err != nil {
if fission.IsNetworkError(err) { if utils.IsNetworkError(err) {
envw.logger.Error("encountered network error, retrying later", zap.Error(err)) envw.logger.Error("encountered network error, retrying later", zap.Error(err))
time.Sleep(5 * time.Second) time.Sleep(5 * time.Second)
continue continue
@@ -171,7 +173,7 @@ func (envw *environmentWatcher) watchEnvironments() {
time.Sleep(time.Second) time.Sleep(time.Second)
break break
} }
env := ev.Object.(*crd.Environment) env := ev.Object.(*fv1.Environment)
rv = env.Metadata.ResourceVersion rv = env.Metadata.ResourceVersion
envw.sync() envw.sync()
} }
@@ -183,7 +185,7 @@ func (envw *environmentWatcher) sync() {
for i := 0; i < maxRetries; i++ { for i := 0; i < maxRetries; i++ {
envList, err := envw.fissionClient.Environments(metav1.NamespaceAll).List(metav1.ListOptions{}) envList, err := envw.fissionClient.Environments(metav1.NamespaceAll).List(metav1.ListOptions{})
if err != nil { if err != nil {
if fission.IsNetworkError(err) { if utils.IsNetworkError(err) {
envw.logger.Error("error syncing environment CRD resources due to network error, retrying later", zap.Error(err)) envw.logger.Error("error syncing environment CRD resources due to network error, retrying later", zap.Error(err))
time.Sleep(50 * time.Duration(2*i) * time.Millisecond) time.Sleep(50 * time.Duration(2*i) * time.Millisecond)
continue continue
@@ -236,7 +238,7 @@ func (envw *environmentWatcher) service() {
req.respChan <- envwResponse{builderInfo: builderInfo} req.respChan <- envwResponse{builderInfo: builderInfo}
case CLEANUP_BUILDERS: case CLEANUP_BUILDERS:
latestEnvList := make(map[string]*crd.Environment) latestEnvList := make(map[string]*fv1.Environment)
for i := range req.envList { for i := range req.envList {
env := req.envList[i] env := req.envList[i]
// In order to support backward compatibility, for all builder images created in default // In order to support backward compatibility, for all builder images created in default
@@ -298,7 +300,7 @@ func (envw *environmentWatcher) service() {
} }
} }
func (envw *environmentWatcher) getEnvBuilder(env *crd.Environment) (*builderInfo, error) { func (envw *environmentWatcher) getEnvBuilder(env *fv1.Environment) (*builderInfo, error) {
respChan := make(chan envwResponse) respChan := make(chan envwResponse)
envw.requestChan <- envwRequest{ envw.requestChan <- envwRequest{
requestType: GET_BUILDER, requestType: GET_BUILDER,
@@ -309,14 +311,14 @@ func (envw *environmentWatcher) getEnvBuilder(env *crd.Environment) (*builderInf
return resp.builderInfo, resp.err return resp.builderInfo, resp.err
} }
func (envw *environmentWatcher) cleanupEnvBuilders(envs []crd.Environment) { func (envw *environmentWatcher) cleanupEnvBuilders(envs []fv1.Environment) {
envw.requestChan <- envwRequest{ envw.requestChan <- envwRequest{
requestType: CLEANUP_BUILDERS, requestType: CLEANUP_BUILDERS,
envList: envs, envList: envs,
} }
} }
func (envw *environmentWatcher) createBuilder(env *crd.Environment, ns string) (*builderInfo, error) { func (envw *environmentWatcher) createBuilder(env *fv1.Environment, ns string) (*builderInfo, error) {
var svc *apiv1.Service var svc *apiv1.Service
var deploy *v1beta1.Deployment var deploy *v1beta1.Deployment
@@ -345,9 +347,9 @@ func (envw *environmentWatcher) createBuilder(env *crd.Environment, ns string) (
// there should be only one deploy in deployList // there should be only one deploy in deployList
if len(deployList) == 0 { if len(deployList) == 0 {
// create builder SA in this ns, if not already created // create builder SA in this ns, if not already created
_, err := fission.SetupSA(envw.kubernetesClient, fission.FissionBuilderSA, ns) _, err := utils.SetupSA(envw.kubernetesClient, types.FissionBuilderSA, ns)
if err != nil { if err != nil {
return nil, errors.Wrapf(err, "error creating %q in ns: %s", fission.FissionBuilderSA, ns) return nil, errors.Wrapf(err, "error creating %q in ns: %s", types.FissionBuilderSA, ns)
} }
deploy, err = envw.createBuilderDeployment(env, ns) deploy, err = envw.createBuilderDeployment(env, ns)
@@ -432,7 +434,7 @@ func (envw *environmentWatcher) getBuilderServiceList(sel map[string]string, ns
return svcList.Items, nil return svcList.Items, nil
} }
func (envw *environmentWatcher) createBuilderService(env *crd.Environment, ns string) (*apiv1.Service, error) { func (envw *environmentWatcher) createBuilderService(env *fv1.Environment, ns string) (*apiv1.Service, error) {
name := fmt.Sprintf("%v-%v", env.Metadata.Name, env.Metadata.ResourceVersion) name := fmt.Sprintf("%v-%v", env.Metadata.Name, env.Metadata.ResourceVersion)
sel := envw.getLabels(env.Metadata.Name, ns, env.Metadata.ResourceVersion) sel := envw.getLabels(env.Metadata.Name, ns, env.Metadata.ResourceVersion)
service := apiv1.Service{ service := apiv1.Service{
@@ -485,7 +487,7 @@ func (envw *environmentWatcher) getBuilderDeploymentList(sel map[string]string,
return deployList.Items, nil return deployList.Items, nil
} }
func (envw *environmentWatcher) createBuilderDeployment(env *crd.Environment, ns string) (*v1beta1.Deployment, error) { func (envw *environmentWatcher) createBuilderDeployment(env *fv1.Environment, ns string) (*v1beta1.Deployment, error) {
name := fmt.Sprintf("%v-%v", env.Metadata.Name, env.Metadata.ResourceVersion) name := fmt.Sprintf("%v-%v", env.Metadata.Name, env.Metadata.ResourceVersion)
sel := envw.getLabels(env.Metadata.Name, ns, env.Metadata.ResourceVersion) sel := envw.getLabels(env.Metadata.Name, ns, env.Metadata.ResourceVersion)
var replicas int32 = 1 var replicas int32 = 1
@@ -29,9 +29,11 @@ import (
"k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes"
k8sCache "k8s.io/client-go/tools/cache" k8sCache "k8s.io/client-go/tools/cache"
"github.com/fission/fission" fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
"github.com/fission/fission/cache" "github.com/fission/fission/pkg/cache"
"github.com/fission/fission/crd" "github.com/fission/fission/pkg/crd"
"github.com/fission/fission/pkg/types"
"github.com/fission/fission/pkg/utils"
) )
type ( type (
@@ -73,10 +75,10 @@ func makePackageWatcher(logger *zap.Logger, fissionClient *crd.FissionClient, k8
// 5. Update package resource in package ref of functions that share the same package // 5. Update package resource in package ref of functions that share the same package
// 6. Update package status to succeed state // 6. Update package status to succeed state
// *. Update package status to failed state,if any one of steps above failed/time out // *. Update package status to failed state,if any one of steps above failed/time out
func (pkgw *packageWatcher) build(buildCache *cache.Cache, srcpkg *crd.Package) { func (pkgw *packageWatcher) build(buildCache *cache.Cache, srcpkg *fv1.Package) {
// Ignore non-pending state packages. // Ignore non-pending state packages.
if srcpkg.Status.BuildStatus != fission.BuildStatusPending { if srcpkg.Status.BuildStatus != fv1.BuildStatusPending {
return return
} }
@@ -90,7 +92,7 @@ func (pkgw *packageWatcher) build(buildCache *cache.Cache, srcpkg *crd.Package)
pkgw.logger.Info("starting build for package", zap.String("package_name", srcpkg.Metadata.Name), zap.String("resource_version", srcpkg.Metadata.ResourceVersion)) pkgw.logger.Info("starting build for package", zap.String("package_name", srcpkg.Metadata.Name), zap.String("resource_version", srcpkg.Metadata.ResourceVersion))
pkg, err := updatePackage(pkgw.logger, pkgw.fissionClient, srcpkg, fission.BuildStatusRunning, "", nil) pkg, err := updatePackage(pkgw.logger, pkgw.fissionClient, srcpkg, fv1.BuildStatusRunning, "", nil)
if err != nil { if err != nil {
pkgw.logger.Error("error setting package pending state", zap.Error(err)) pkgw.logger.Error("error setting package pending state", zap.Error(err))
return return
@@ -101,7 +103,7 @@ func (pkgw *packageWatcher) build(buildCache *cache.Cache, srcpkg *crd.Package)
e := "environment does not exist" e := "environment does not exist"
pkgw.logger.Error(e, zap.String("environment", pkg.Spec.Environment.Name)) pkgw.logger.Error(e, zap.String("environment", pkg.Spec.Environment.Name))
updatePackage(pkgw.logger, pkgw.fissionClient, pkg, updatePackage(pkgw.logger, pkgw.fissionClient, pkg,
fission.BuildStatusFailed, fmt.Sprintf("%s: %q", e, pkg.Spec.Environment.Name), nil) fv1.BuildStatusFailed, fmt.Sprintf("%s: %q", e, pkg.Spec.Environment.Name), nil)
return return
} }
@@ -155,17 +157,17 @@ func (pkgw *packageWatcher) build(buildCache *cache.Cache, srcpkg *crd.Package)
// Add the package getter rolebinding to builder sa // Add the package getter rolebinding to builder sa
// we continue here if role binding was not setup succeesffully. this is because without this, the fetcher wont be able to fetch the source pkg into the container and // we continue here if role binding was not setup succeesffully. this is because without this, the fetcher wont be able to fetch the source pkg into the container and
// the build will fail eventually // the build will fail eventually
err := fission.SetupRoleBinding(pkgw.logger, pkgw.k8sClient, fission.PackageGetterRB, pkg.Metadata.Namespace, fission.PackageGetterCR, fission.ClusterRole, fission.FissionBuilderSA, builderNs) err := utils.SetupRoleBinding(pkgw.logger, pkgw.k8sClient, types.PackageGetterRB, pkg.Metadata.Namespace, types.PackageGetterCR, types.ClusterRole, types.FissionBuilderSA, builderNs)
if err != nil { if err != nil {
pkgw.logger.Error("error setting up role binding for package", pkgw.logger.Error("error setting up role binding for package",
zap.Error(err), zap.Error(err),
zap.String("role_binding", fission.PackageGetterRB), zap.String("role_binding", types.PackageGetterRB),
zap.String("package_name", pkg.Metadata.Name), zap.String("package_name", pkg.Metadata.Name),
zap.String("package_namespace", pkg.Metadata.Namespace)) zap.String("package_namespace", pkg.Metadata.Namespace))
continue continue
} else { } else {
pkgw.logger.Info("setup rolebinding for sa package", pkgw.logger.Info("setup rolebinding for sa package",
zap.String("sa", fmt.Sprintf("%s.%s", fission.FissionBuilderSA, builderNs)), zap.String("sa", fmt.Sprintf("%s.%s", types.FissionBuilderSA, builderNs)),
zap.String("package", fmt.Sprintf("%s.%s", pkg.Metadata.Name, pkg.Metadata.Namespace))) zap.String("package", fmt.Sprintf("%s.%s", pkg.Metadata.Name, pkg.Metadata.Namespace)))
} }
@@ -173,7 +175,7 @@ func (pkgw *packageWatcher) build(buildCache *cache.Cache, srcpkg *crd.Package)
uploadResp, buildLogs, err := buildPackage(ctx, pkgw.logger, pkgw.fissionClient, builderNs, pkgw.storageSvcUrl, pkg) uploadResp, buildLogs, err := buildPackage(ctx, pkgw.logger, pkgw.fissionClient, builderNs, pkgw.storageSvcUrl, pkg)
if err != nil { if err != nil {
pkgw.logger.Error("error building package", zap.Error(err), zap.String("package_name", pkg.Metadata.Name)) pkgw.logger.Error("error building package", zap.Error(err), zap.String("package_name", pkg.Metadata.Name))
updatePackage(pkgw.logger, pkgw.fissionClient, pkg, fission.BuildStatusFailed, buildLogs, nil) updatePackage(pkgw.logger, pkgw.fissionClient, pkg, types.BuildStatusFailed, buildLogs, nil)
return return
} }
@@ -185,7 +187,7 @@ func (pkgw *packageWatcher) build(buildCache *cache.Cache, srcpkg *crd.Package)
e := "error getting function list" e := "error getting function list"
pkgw.logger.Error(e, zap.Error(err)) pkgw.logger.Error(e, zap.Error(err))
buildLogs += fmt.Sprintf("%s: %v\n", e, err) buildLogs += fmt.Sprintf("%s: %v\n", e, err)
updatePackage(pkgw.logger, pkgw.fissionClient, pkg, fission.BuildStatusFailed, buildLogs, nil) updatePackage(pkgw.logger, pkgw.fissionClient, pkg, fv1.BuildStatusFailed, buildLogs, nil)
} }
// A package may be used by multiple functions. Update // A package may be used by multiple functions. Update
@@ -201,17 +203,17 @@ func (pkgw *packageWatcher) build(buildCache *cache.Cache, srcpkg *crd.Package)
e := "error updating function package resource version" e := "error updating function package resource version"
pkgw.logger.Error(e, zap.Error(err)) pkgw.logger.Error(e, zap.Error(err))
buildLogs += fmt.Sprintf("%s: %v\n", e, err) buildLogs += fmt.Sprintf("%s: %v\n", e, err)
updatePackage(pkgw.logger, pkgw.fissionClient, pkg, fission.BuildStatusFailed, buildLogs, nil) updatePackage(pkgw.logger, pkgw.fissionClient, pkg, fv1.BuildStatusFailed, buildLogs, nil)
return return
} }
} }
} }
_, err = updatePackage(pkgw.logger, pkgw.fissionClient, pkg, _, err = updatePackage(pkgw.logger, pkgw.fissionClient, pkg,
fission.BuildStatusSucceeded, buildLogs, uploadResp) types.BuildStatusSucceeded, buildLogs, uploadResp)
if err != nil { if err != nil {
pkgw.logger.Error("error updating package info", zap.Error(err), zap.String("package_name", pkg.Metadata.Name)) pkgw.logger.Error("error updating package info", zap.Error(err), zap.String("package_name", pkg.Metadata.Name))
updatePackage(pkgw.logger, pkgw.fissionClient, pkg, fission.BuildStatusFailed, buildLogs, nil) updatePackage(pkgw.logger, pkgw.fissionClient, pkg, types.BuildStatusFailed, buildLogs, nil)
return return
} }
@@ -221,7 +223,7 @@ func (pkgw *packageWatcher) build(buildCache *cache.Cache, srcpkg *crd.Package)
} }
// build timeout // build timeout
updatePackage(pkgw.logger, pkgw.fissionClient, pkg, updatePackage(pkgw.logger, pkgw.fissionClient, pkg,
fission.BuildStatusFailed, "Build timeout due to environment builder not ready", nil) types.BuildStatusFailed, "Build timeout due to environment builder not ready", nil)
pkgw.logger.Error("max retries exceeded in building source package, timeout due to environment builder not ready", pkgw.logger.Error("max retries exceeded in building source package, timeout due to environment builder not ready",
zap.String("package", fmt.Sprintf("%s.%s", pkg.Metadata.Name, pkg.Metadata.Namespace))) zap.String("package", fmt.Sprintf("%s.%s", pkg.Metadata.Name, pkg.Metadata.Namespace)))
@@ -233,13 +235,13 @@ func (pkgw *packageWatcher) watchPackages(fissionClient *crd.FissionClient,
kubernetesClient *kubernetes.Clientset, builderNamespace string) { kubernetesClient *kubernetes.Clientset, builderNamespace string) {
buildCache := cache.MakeCache(0, 0) buildCache := cache.MakeCache(0, 0)
lw := k8sCache.NewListWatchFromClient(pkgw.fissionClient.GetCrdClient(), "packages", apiv1.NamespaceAll, fields.Everything()) lw := k8sCache.NewListWatchFromClient(pkgw.fissionClient.GetCrdClient(), "packages", apiv1.NamespaceAll, fields.Everything())
pkgStore, controller := k8sCache.NewInformer(lw, &crd.Package{}, 60*time.Second, k8sCache.ResourceEventHandlerFuncs{ pkgStore, controller := k8sCache.NewInformer(lw, &fv1.Package{}, 60*time.Second, k8sCache.ResourceEventHandlerFuncs{
AddFunc: func(obj interface{}) { AddFunc: func(obj interface{}) {
pkg := obj.(*crd.Package) pkg := obj.(*fv1.Package)
go pkgw.build(buildCache, pkg) go pkgw.build(buildCache, pkg)
}, },
UpdateFunc: func(oldObj, newObj interface{}) { UpdateFunc: func(oldObj, newObj interface{}) {
pkg := newObj.(*crd.Package) pkg := newObj.(*fv1.Package)
go pkgw.build(buildCache, pkg) go pkgw.build(buildCache, pkg)
}, },
}) })
+5 -5
View File
@@ -20,7 +20,7 @@ import (
"fmt" "fmt"
"time" "time"
"github.com/fission/fission" ferror "github.com/fission/fission/pkg/error"
) )
type requestType int type requestType int
@@ -94,10 +94,10 @@ func (c *Cache) service() {
case GET: case GET:
val, ok := c.cache[req.key] val, ok := c.cache[req.key]
if !ok { if !ok {
resp.error = fission.MakeError(fission.ErrorNotFound, resp.error = ferror.MakeError(ferror.ErrorNotFound,
fmt.Sprintf("key '%v' not found", req.key)) fmt.Sprintf("key '%v' not found", req.key))
} else if c.IsOld(val) { } else if c.IsOld(val) {
resp.error = fission.MakeError(fission.ErrorNotFound, resp.error = ferror.MakeError(ferror.ErrorNotFound,
fmt.Sprintf("key '%v' expired (atime %v)", req.key, val.atime)) fmt.Sprintf("key '%v' expired (atime %v)", req.key, val.atime))
delete(c.cache, req.key) delete(c.cache, req.key)
} else { } else {
@@ -113,7 +113,7 @@ func (c *Cache) service() {
val := c.cache[req.key] val := c.cache[req.key]
val.atime = time.Now() val.atime = time.Now()
resp.existingValue = val.value resp.existingValue = val.value
resp.error = fission.MakeError(fission.ErrorNameExists, "key already exists") resp.error = ferror.MakeError(ferror.ErrorNameExists, "key already exists")
} else { } else {
c.cache[req.key] = &Value{ c.cache[req.key] = &Value{
value: req.value, value: req.value,
@@ -139,7 +139,7 @@ func (c *Cache) service() {
} }
req.responseChannel <- resp req.responseChannel <- resp
default: default:
resp.error = fission.MakeError(fission.ErrorInvalidArgument, resp.error = ferror.MakeError(ferror.ErrorInvalidArgument,
fmt.Sprintf("invalid request type: %v", req.requestType)) fmt.Sprintf("invalid request type: %v", req.requestType))
req.responseChannel <- resp req.responseChannel <- resp
} }
View File
@@ -22,7 +22,7 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"github.com/fission/fission/cache" "github.com/fission/fission/pkg/cache"
) )
type ( type (
@@ -33,8 +33,13 @@ import (
"k8s.io/client-go/rest" "k8s.io/client-go/rest"
k8sCache "k8s.io/client-go/tools/cache" k8sCache "k8s.io/client-go/tools/cache"
"github.com/fission/fission" fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
"github.com/fission/fission/crd" "github.com/fission/fission/pkg/crd"
"github.com/fission/fission/pkg/types"
)
const (
maxRetries = 10
) )
type canaryConfigMgr struct { type canaryConfigMgr struct {
@@ -99,23 +104,23 @@ func MakeCanaryConfigMgr(logger *zap.Logger, fissionClient *crd.FissionClient, k
func (canaryCfgMgr *canaryConfigMgr) initCanaryConfigController() (k8sCache.Store, k8sCache.Controller) { func (canaryCfgMgr *canaryConfigMgr) initCanaryConfigController() (k8sCache.Store, k8sCache.Controller) {
resyncPeriod := 30 * time.Second resyncPeriod := 30 * time.Second
listWatch := k8sCache.NewListWatchFromClient(canaryCfgMgr.crdClient, "canaryconfigs", metav1.NamespaceAll, fields.Everything()) listWatch := k8sCache.NewListWatchFromClient(canaryCfgMgr.crdClient, "canaryconfigs", metav1.NamespaceAll, fields.Everything())
store, controller := k8sCache.NewInformer(listWatch, &crd.CanaryConfig{}, resyncPeriod, store, controller := k8sCache.NewInformer(listWatch, &fv1.CanaryConfig{}, resyncPeriod,
k8sCache.ResourceEventHandlerFuncs{ k8sCache.ResourceEventHandlerFuncs{
AddFunc: func(obj interface{}) { AddFunc: func(obj interface{}) {
canaryConfig := obj.(*crd.CanaryConfig) canaryConfig := obj.(*fv1.CanaryConfig)
if canaryConfig.Status.Status == fission.CanaryConfigStatusPending { if canaryConfig.Status.Status == types.CanaryConfigStatusPending {
go canaryCfgMgr.addCanaryConfig(canaryConfig) go canaryCfgMgr.addCanaryConfig(canaryConfig)
} }
}, },
DeleteFunc: func(obj interface{}) { DeleteFunc: func(obj interface{}) {
canaryConfig := obj.(*crd.CanaryConfig) canaryConfig := obj.(*fv1.CanaryConfig)
go canaryCfgMgr.deleteCanaryConfig(canaryConfig) go canaryCfgMgr.deleteCanaryConfig(canaryConfig)
}, },
UpdateFunc: func(oldObj interface{}, newObj interface{}) { UpdateFunc: func(oldObj interface{}, newObj interface{}) {
oldConfig := oldObj.(*crd.CanaryConfig) oldConfig := oldObj.(*fv1.CanaryConfig)
newConfig := newObj.(*crd.CanaryConfig) newConfig := newObj.(*fv1.CanaryConfig)
if oldConfig.Metadata.ResourceVersion != newConfig.Metadata.ResourceVersion && if oldConfig.Metadata.ResourceVersion != newConfig.Metadata.ResourceVersion &&
newConfig.Status.Status == fission.CanaryConfigStatusPending { newConfig.Status.Status == types.CanaryConfigStatusPending {
canaryCfgMgr.logger.Info("update canary config invoked", canaryCfgMgr.logger.Info("update canary config invoked",
zap.String("name", newConfig.Metadata.Name), zap.String("name", newConfig.Metadata.Name),
zap.String("namespace", newConfig.Metadata.Namespace), zap.String("namespace", newConfig.Metadata.Namespace),
@@ -135,7 +140,7 @@ func (canaryCfgMgr *canaryConfigMgr) Run(ctx context.Context) {
canaryCfgMgr.logger.Info("started canary configmgr controller") canaryCfgMgr.logger.Info("started canary configmgr controller")
} }
func (canaryCfgMgr *canaryConfigMgr) addCanaryConfig(canaryConfig *crd.CanaryConfig) { func (canaryCfgMgr *canaryConfigMgr) addCanaryConfig(canaryConfig *fv1.CanaryConfig) {
canaryCfgMgr.logger.Info("addCanaryConfig called", zap.String("canary_config", canaryConfig.Metadata.Name)) canaryCfgMgr.logger.Info("addCanaryConfig called", zap.String("canary_config", canaryConfig.Metadata.Name))
// for each canary config, create a ticker with increment interval // for each canary config, create a ticker with increment interval
@@ -171,7 +176,7 @@ func (canaryCfgMgr *canaryConfigMgr) addCanaryConfig(canaryConfig *crd.CanaryCon
canaryCfgMgr.processCanaryConfig(&ctx, canaryConfig, ticker) canaryCfgMgr.processCanaryConfig(&ctx, canaryConfig, ticker)
} }
func (canaryCfgMgr *canaryConfigMgr) processCanaryConfig(ctx *context.Context, canaryConfig *crd.CanaryConfig, ticker *time.Ticker) { func (canaryCfgMgr *canaryConfigMgr) processCanaryConfig(ctx *context.Context, canaryConfig *fv1.CanaryConfig, ticker *time.Ticker) {
quit := make(chan struct{}) quit := make(chan struct{})
for { for {
@@ -222,7 +227,7 @@ func (canaryCfgMgr *canaryConfigMgr) processCanaryConfig(ctx *context.Context, c
} }
} }
func (canaryCfgMgr *canaryConfigMgr) RollForwardOrBack(canaryConfig *crd.CanaryConfig, quit chan struct{}, ticker *time.Ticker) { func (canaryCfgMgr *canaryConfigMgr) RollForwardOrBack(canaryConfig *fv1.CanaryConfig, quit chan struct{}, ticker *time.Ticker) {
// handle race between delete event and notification on ticker.C // handle race between delete event and notification on ticker.C
_, err := canaryCfgMgr.canaryCfgCancelFuncMap.lookup(&canaryConfig.Metadata) _, err := canaryCfgMgr.canaryCfgCancelFuncMap.lookup(&canaryConfig.Metadata)
if err != nil { if err != nil {
@@ -258,7 +263,7 @@ func (canaryCfgMgr *canaryConfigMgr) RollForwardOrBack(canaryConfig *crd.CanaryC
} }
// handle a race between ticker.Stop and receiving a notification on ticker.C // handle a race between ticker.Stop and receiving a notification on ticker.C
if canaryConfig.Status.Status != fission.CanaryConfigStatusPending { if canaryConfig.Status.Status != types.CanaryConfigStatusPending {
canaryCfgMgr.logger.Info("no need of processing the config, not pending anymore", canaryCfgMgr.logger.Info("no need of processing the config, not pending anymore",
zap.String("name", canaryConfig.Metadata.Name), zap.String("name", canaryConfig.Metadata.Name),
zap.String("namespace", canaryConfig.Metadata.Namespace), zap.String("namespace", canaryConfig.Metadata.Namespace),
@@ -266,7 +271,7 @@ func (canaryCfgMgr *canaryConfigMgr) RollForwardOrBack(canaryConfig *crd.CanaryC
return return
} }
if triggerObj.Spec.FunctionReference.Type == fission.FunctionReferenceTypeFunctionWeights && if triggerObj.Spec.FunctionReference.Type == types.FunctionReferenceTypeFunctionWeights &&
triggerObj.Spec.FunctionReference.FunctionWeights[canaryConfig.Spec.NewFunction] != 0 { triggerObj.Spec.FunctionReference.FunctionWeights[canaryConfig.Spec.NewFunction] != 0 {
failurePercent, err := canaryCfgMgr.promClient.GetFunctionFailurePercentage(triggerObj.Spec.RelativeURL, triggerObj.Spec.Method, failurePercent, err := canaryCfgMgr.promClient.GetFunctionFailurePercentage(triggerObj.Spec.RelativeURL, triggerObj.Spec.Method,
canaryConfig.Spec.NewFunction, canaryConfig.Metadata.Namespace, canaryConfig.Spec.WeightIncrementDuration) canaryConfig.Spec.NewFunction, canaryConfig.Metadata.Namespace, canaryConfig.Spec.WeightIncrementDuration)
@@ -331,7 +336,7 @@ func (canaryCfgMgr *canaryConfigMgr) RollForwardOrBack(canaryConfig *crd.CanaryC
// update the status of canary config as done processing, we dont care if we arent able to update because // update the status of canary config as done processing, we dont care if we arent able to update because
// resync takes care of the update // resync takes care of the update
err = canaryCfgMgr.updateCanaryConfigStatusWithRetries(canaryConfig.Metadata.Name, canaryConfig.Metadata.Namespace, err = canaryCfgMgr.updateCanaryConfigStatusWithRetries(canaryConfig.Metadata.Name, canaryConfig.Metadata.Namespace,
fission.CanaryConfigStatusSucceeded) types.CanaryConfigStatusSucceeded)
if err != nil { if err != nil {
// cant do much after max retries other than logging it. // cant do much after max retries other than logging it.
canaryCfgMgr.logger.Error("error updating canary config after max retries", canaryCfgMgr.logger.Error("error updating canary config after max retries",
@@ -351,7 +356,7 @@ func (canaryCfgMgr *canaryConfigMgr) RollForwardOrBack(canaryConfig *crd.CanaryC
} }
func (canaryCfgMgr *canaryConfigMgr) updateHttpTriggerWithRetries(triggerName, triggerNamespace string, fnWeights map[string]int) (err error) { func (canaryCfgMgr *canaryConfigMgr) updateHttpTriggerWithRetries(triggerName, triggerNamespace string, fnWeights map[string]int) (err error) {
for i := 0; i < fission.MaxRetries; i++ { for i := 0; i < maxRetries; i++ {
triggerObj, err := canaryCfgMgr.fissionClient.HTTPTriggers(triggerNamespace).Get(triggerName) triggerObj, err := canaryCfgMgr.fissionClient.HTTPTriggers(triggerNamespace).Get(triggerName)
if err != nil { if err != nil {
e := "error getting http trigger object" e := "error getting http trigger object"
@@ -386,7 +391,7 @@ func (canaryCfgMgr *canaryConfigMgr) updateHttpTriggerWithRetries(triggerName, t
} }
func (canaryCfgMgr *canaryConfigMgr) updateCanaryConfigStatusWithRetries(cfgName, cfgNamespace string, status string) (err error) { func (canaryCfgMgr *canaryConfigMgr) updateCanaryConfigStatusWithRetries(cfgName, cfgNamespace string, status string) (err error) {
for i := 0; i < fission.MaxRetries; i++ { for i := 0; i < maxRetries; i++ {
canaryCfgObj, err := canaryCfgMgr.fissionClient.CanaryConfigs(cfgNamespace).Get(cfgName) canaryCfgObj, err := canaryCfgMgr.fissionClient.CanaryConfigs(cfgNamespace).Get(cfgName)
if err != nil { if err != nil {
e := "error getting http canary config object" e := "error getting http canary config object"
@@ -431,7 +436,7 @@ func (canaryCfgMgr *canaryConfigMgr) updateCanaryConfigStatusWithRetries(cfgName
return err return err
} }
func (canaryCfgMgr *canaryConfigMgr) rollback(canaryConfig *crd.CanaryConfig, trigger *crd.HTTPTrigger) error { func (canaryCfgMgr *canaryConfigMgr) rollback(canaryConfig *fv1.CanaryConfig, trigger *fv1.HTTPTrigger) error {
functionWeights := trigger.Spec.FunctionReference.FunctionWeights functionWeights := trigger.Spec.FunctionReference.FunctionWeights
functionWeights[canaryConfig.Spec.NewFunction] = 0 functionWeights[canaryConfig.Spec.NewFunction] = 0
functionWeights[canaryConfig.Spec.OldFunction] = 100 functionWeights[canaryConfig.Spec.OldFunction] = 100
@@ -439,12 +444,12 @@ func (canaryCfgMgr *canaryConfigMgr) rollback(canaryConfig *crd.CanaryConfig, tr
err := canaryCfgMgr.updateHttpTriggerWithRetries(trigger.Metadata.Name, trigger.Metadata.Namespace, functionWeights) err := canaryCfgMgr.updateHttpTriggerWithRetries(trigger.Metadata.Name, trigger.Metadata.Namespace, functionWeights)
err = canaryCfgMgr.updateCanaryConfigStatusWithRetries(canaryConfig.Metadata.Name, canaryConfig.Metadata.Namespace, err = canaryCfgMgr.updateCanaryConfigStatusWithRetries(canaryConfig.Metadata.Name, canaryConfig.Metadata.Namespace,
fission.CanaryConfigStatusFailed) types.CanaryConfigStatusFailed)
return err return err
} }
func (canaryCfgMgr *canaryConfigMgr) rollForward(canaryConfig *crd.CanaryConfig, trigger *crd.HTTPTrigger) (bool, error) { func (canaryCfgMgr *canaryConfigMgr) rollForward(canaryConfig *fv1.CanaryConfig, trigger *fv1.HTTPTrigger) (bool, error) {
doneProcessingCanaryConfig := false doneProcessingCanaryConfig := false
functionWeights := trigger.Spec.FunctionReference.FunctionWeights functionWeights := trigger.Spec.FunctionReference.FunctionWeights
@@ -469,9 +474,9 @@ func (canaryCfgMgr *canaryConfigMgr) rollForward(canaryConfig *crd.CanaryConfig,
func (canaryCfgMgr *canaryConfigMgr) reSyncCanaryConfigs() { func (canaryCfgMgr *canaryConfigMgr) reSyncCanaryConfigs() {
for _, obj := range canaryCfgMgr.canaryConfigStore.List() { for _, obj := range canaryCfgMgr.canaryConfigStore.List() {
canaryConfig := obj.(*crd.CanaryConfig) canaryConfig := obj.(*fv1.CanaryConfig)
_, err := canaryCfgMgr.canaryCfgCancelFuncMap.lookup(&canaryConfig.Metadata) _, err := canaryCfgMgr.canaryCfgCancelFuncMap.lookup(&canaryConfig.Metadata)
if err != nil && canaryConfig.Status.Status == fission.CanaryConfigStatusPending { if err != nil && canaryConfig.Status.Status == types.CanaryConfigStatusPending {
canaryCfgMgr.logger.Info("adding canary config from resync loop", canaryCfgMgr.logger.Info("adding canary config from resync loop",
zap.String("name", canaryConfig.Metadata.Name), zap.String("name", canaryConfig.Metadata.Name),
zap.String("namespace", canaryConfig.Metadata.Namespace), zap.String("namespace", canaryConfig.Metadata.Namespace),
@@ -483,7 +488,7 @@ func (canaryCfgMgr *canaryConfigMgr) reSyncCanaryConfigs() {
} }
} }
func (canaryCfgMgr *canaryConfigMgr) deleteCanaryConfig(canaryConfig *crd.CanaryConfig) { func (canaryCfgMgr *canaryConfigMgr) deleteCanaryConfig(canaryConfig *fv1.CanaryConfig) {
canaryCfgMgr.logger.Info("delete event received for canary config", canaryCfgMgr.logger.Info("delete event received for canary config",
zap.String("name", canaryConfig.Metadata.Name), zap.String("name", canaryConfig.Metadata.Name),
zap.String("namespace", canaryConfig.Metadata.Namespace), zap.String("namespace", canaryConfig.Metadata.Namespace),
@@ -503,7 +508,7 @@ func (canaryCfgMgr *canaryConfigMgr) deleteCanaryConfig(canaryConfig *crd.Canary
(*canaryProcessingInfo.CancelFunc)() (*canaryProcessingInfo.CancelFunc)()
} }
func (canaryCfgMgr *canaryConfigMgr) updateCanaryConfig(oldCanaryConfig *crd.CanaryConfig, newCanaryConfig *crd.CanaryConfig) { func (canaryCfgMgr *canaryConfigMgr) updateCanaryConfig(oldCanaryConfig *fv1.CanaryConfig, newCanaryConfig *fv1.CanaryConfig) {
// before removing the object from cache, we need to get it's cancel func and cancel it // before removing the object from cache, we need to get it's cancel func and cancel it
canaryCfgMgr.deleteCanaryConfig(oldCanaryConfig) canaryCfgMgr.deleteCanaryConfig(oldCanaryConfig)
+9 -7
View File
@@ -30,9 +30,11 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes"
"github.com/fission/fission" "github.com/fission/fission/pkg/crd"
"github.com/fission/fission/crd" ferror "github.com/fission/fission/pkg/error"
"github.com/fission/fission/fission/logdb" "github.com/fission/fission/pkg/fission-cli/logdb"
"github.com/fission/fission/pkg/info"
"github.com/fission/fission/pkg/utils"
) )
var podNamespace string var podNamespace string
@@ -119,7 +121,7 @@ func (api *API) respondWithError(w http.ResponseWriter, err error) {
return return
} }
code, msg := fission.GetHTTPError(err) code, msg := ferror.GetHTTPError(err)
api.logger.Error(msg, zap.Int("code", code)) api.logger.Error(msg, zap.Int("code", code))
http.Error(w, msg, code) http.Error(w, msg, code)
} }
@@ -168,11 +170,11 @@ func (api *API) getLogDBConfig(dbType string) logDBConfig {
func (api *API) HomeHandler(w http.ResponseWriter, r *http.Request) { func (api *API) HomeHandler(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json; charset=utf-8") w.Header().Set("Content-Type", "application/json; charset=utf-8")
fmt.Fprintf(w, fission.ApiInfo().String()) fmt.Fprintf(w, info.ApiInfo().String())
} }
func (api *API) ApiVersionMismatchHandler(w http.ResponseWriter, r *http.Request) { func (api *API) ApiVersionMismatchHandler(w http.ResponseWriter, r *http.Request) {
err := fission.MakeError(fission.ErrorNotFound, "Fission server supports API v2 only -- v1 is not supported. Please upgrade your Fission client/CLI.") err := ferror.MakeError(ferror.ErrorNotFound, "Fission server supports API v2 only -- v1 is not supported. Please upgrade your Fission client/CLI.")
api.respondWithError(w, err) api.respondWithError(w, err)
} }
@@ -272,7 +274,7 @@ func (api *API) Serve(port int) {
address := fmt.Sprintf(":%v", port) address := fmt.Sprintf(":%v", port)
api.logger.Info("server started", zap.Int("port", port)) api.logger.Info("server started", zap.Int("port", port))
r.Use(fission.LoggingMiddleware(api.logger)) r.Use(utils.LoggingMiddleware(api.logger))
err := http.ListenAndServe(address, r) err := http.ListenAndServe(address, r)
api.logger.Fatal("done listening", zap.Error(err)) api.logger.Fatal("done listening", zap.Error(err))
} }
@@ -32,9 +32,9 @@ import (
"k8s.io/api/core/v1" "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"github.com/fission/fission" fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
"github.com/fission/fission/controller/client" "github.com/fission/fission/pkg/controller/client"
"github.com/fission/fission/crd" ferror "github.com/fission/fission/pkg/error"
) )
var g struct { var g struct {
@@ -55,16 +55,16 @@ func assert(c bool, msg string) {
func assertNameReuseFailure(err error, name string) { func assertNameReuseFailure(err error, name string) {
assert(err != nil, "recreating "+name+" with same name must fail") assert(err != nil, "recreating "+name+" with same name must fail")
fe, ok := err.(fission.Error) fe, ok := err.(ferror.Error)
assert(ok, "error must be a fission Error") assert(ok, "error must be a fission Error")
assert(fe.Code == fission.ErrorNameExists, "error must be a name exists error") assert(fe.Code == ferror.ErrorNameExists, "error must be a name exists error")
} }
func assertNotFoundFailure(err error, name string) { func assertNotFoundFailure(err error, name string) {
assert(err != nil, "requesting a non-existent "+name+" must fail") assert(err != nil, "requesting a non-existent "+name+" must fail")
fe, ok := err.(fission.Error) fe, ok := err.(ferror.Error)
assert(ok, "error must be a fission Error") assert(ok, "error must be a fission Error")
if fe.Code != fission.ErrorNotFound { if fe.Code != ferror.ErrorNotFound {
log.Fatalf("error must be a not found error: %v", fe) log.Fatalf("error must be a not found error: %v", fe)
} }
} }
@@ -76,19 +76,19 @@ func assertCronSpecFails(err error) {
} }
func TestFunctionApi(t *testing.T) { func TestFunctionApi(t *testing.T) {
testFunc := &crd.Function{ testFunc := &fv1.Function{
Metadata: metav1.ObjectMeta{ Metadata: metav1.ObjectMeta{
Name: "foo", Name: "foo",
Namespace: metav1.NamespaceDefault, Namespace: metav1.NamespaceDefault,
}, },
Spec: fission.FunctionSpec{ Spec: fv1.FunctionSpec{
Environment: fission.EnvironmentReference{ Environment: fv1.EnvironmentReference{
Name: "nodejs", Name: "nodejs",
Namespace: metav1.NamespaceDefault, Namespace: metav1.NamespaceDefault,
}, },
Package: fission.FunctionPackageRef{ Package: fv1.FunctionPackageRef{
FunctionName: "xxx", FunctionName: "xxx",
PackageRef: fission.PackageRef{ PackageRef: fv1.PackageRef{
Namespace: metav1.NamespaceDefault, Namespace: metav1.NamespaceDefault,
Name: "xxx", Name: "xxx",
ResourceVersion: "12345", ResourceVersion: "12345",
@@ -143,16 +143,16 @@ func TestFunctionApi(t *testing.T) {
} }
func TestHTTPTriggerApi(t *testing.T) { func TestHTTPTriggerApi(t *testing.T) {
testTrigger := &crd.HTTPTrigger{ testTrigger := &fv1.HTTPTrigger{
Metadata: metav1.ObjectMeta{ Metadata: metav1.ObjectMeta{
Name: "foo", Name: "foo",
Namespace: metav1.NamespaceDefault, Namespace: metav1.NamespaceDefault,
}, },
Spec: fission.HTTPTriggerSpec{ Spec: fv1.HTTPTriggerSpec{
Method: http.MethodGet, Method: http.MethodGet,
RelativeURL: "/hello", RelativeURL: "/hello",
FunctionReference: fission.FunctionReference{ FunctionReference: fv1.FunctionReference{
Type: fission.FunctionReferenceTypeFunctionName, Type: fv1.FunctionReferenceTypeFunctionName,
Name: "foo", Name: "foo",
}, },
}, },
@@ -199,13 +199,13 @@ func TestHTTPTriggerApi(t *testing.T) {
func TestEnvironmentApi(t *testing.T) { func TestEnvironmentApi(t *testing.T) {
testEnv := &crd.Environment{ testEnv := &fv1.Environment{
Metadata: metav1.ObjectMeta{ Metadata: metav1.ObjectMeta{
Name: "foo", Name: "foo",
Namespace: metav1.NamespaceDefault, Namespace: metav1.NamespaceDefault,
}, },
Spec: fission.EnvironmentSpec{ Spec: fv1.EnvironmentSpec{
Runtime: fission.Runtime{ Runtime: fv1.Runtime{
Image: "gcr.io/xyz", Image: "gcr.io/xyz",
}, },
Resources: v1.ResourceRequirements{}, Resources: v1.ResourceRequirements{},
@@ -245,16 +245,16 @@ func TestEnvironmentApi(t *testing.T) {
} }
func TestWatchApi(t *testing.T) { func TestWatchApi(t *testing.T) {
testWatch := &crd.KubernetesWatchTrigger{ testWatch := &fv1.KubernetesWatchTrigger{
Metadata: metav1.ObjectMeta{ Metadata: metav1.ObjectMeta{
Name: "xxx", Name: "xxx",
Namespace: metav1.NamespaceDefault, Namespace: metav1.NamespaceDefault,
}, },
Spec: fission.KubernetesWatchTriggerSpec{ Spec: fv1.KubernetesWatchTriggerSpec{
Namespace: "default", Namespace: "default",
Type: "pod", Type: "pod",
FunctionReference: fission.FunctionReference{ FunctionReference: fv1.FunctionReference{
Type: fission.FunctionReferenceTypeFunctionName, Type: fv1.FunctionReferenceTypeFunctionName,
Name: "foo", Name: "foo",
}, },
}, },
@@ -290,15 +290,15 @@ func TestWatchApi(t *testing.T) {
} }
func TestTimeTriggerApi(t *testing.T) { func TestTimeTriggerApi(t *testing.T) {
testTrigger := &crd.TimeTrigger{ testTrigger := &fv1.TimeTrigger{
Metadata: metav1.ObjectMeta{ Metadata: metav1.ObjectMeta{
Name: "xxx", Name: "xxx",
Namespace: metav1.NamespaceDefault, Namespace: metav1.NamespaceDefault,
}, },
Spec: fission.TimeTriggerSpec{ Spec: fv1.TimeTriggerSpec{
Cron: "0 30 * * * *", Cron: "0 30 * * * *",
FunctionReference: fission.FunctionReference{ FunctionReference: fv1.FunctionReference{
Type: fission.FunctionReferenceTypeFunctionName, Type: fv1.FunctionReferenceTypeFunctionName,
Name: "asdf", Name: "asdf",
}, },
}, },
@@ -26,15 +26,15 @@ import (
"go.uber.org/zap" "go.uber.org/zap"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"github.com/fission/fission" fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
"github.com/fission/fission/crd" ferror "github.com/fission/fission/pkg/error"
config "github.com/fission/fission/featureconfig" config "github.com/fission/fission/pkg/featureconfig"
) )
func (a *API) CanaryConfigApiCreate(w http.ResponseWriter, r *http.Request) { func (a *API) CanaryConfigApiCreate(w http.ResponseWriter, r *http.Request) {
featureErr := a.featureStatus[config.CanaryFeature] featureErr := a.featureStatus[config.CanaryFeature]
if len(featureErr) > 0 { if len(featureErr) > 0 {
a.respondWithError(w, fission.MakeError(http.StatusInternalServerError, fmt.Sprintf("Error enabling canary feature: %v", featureErr))) a.respondWithError(w, ferror.MakeError(http.StatusInternalServerError, fmt.Sprintf("Error enabling canary feature: %v", featureErr)))
return return
} }
@@ -44,7 +44,7 @@ func (a *API) CanaryConfigApiCreate(w http.ResponseWriter, r *http.Request) {
return return
} }
var canaryCfg crd.CanaryConfig var canaryCfg fv1.CanaryConfig
err = json.Unmarshal(body, &canaryCfg) err = json.Unmarshal(body, &canaryCfg)
if err != nil { if err != nil {
a.logger.Error("failed to unmarshal request body", zap.Error(err), zap.Binary("body", body)) a.logger.Error("failed to unmarshal request body", zap.Error(err), zap.Binary("body", body))
@@ -71,7 +71,7 @@ func (a *API) CanaryConfigApiCreate(w http.ResponseWriter, r *http.Request) {
func (a *API) CanaryConfigApiGet(w http.ResponseWriter, r *http.Request) { func (a *API) CanaryConfigApiGet(w http.ResponseWriter, r *http.Request) {
featureErr := a.featureStatus[config.CanaryFeature] featureErr := a.featureStatus[config.CanaryFeature]
if len(featureErr) > 0 { if len(featureErr) > 0 {
a.respondWithError(w, fission.MakeError(http.StatusInternalServerError, fmt.Sprintf("Error enabling canary feature: %v", featureErr))) a.respondWithError(w, ferror.MakeError(http.StatusInternalServerError, fmt.Sprintf("Error enabling canary feature: %v", featureErr)))
return return
} }
@@ -101,7 +101,7 @@ func (a *API) CanaryConfigApiGet(w http.ResponseWriter, r *http.Request) {
func (a *API) CanaryConfigApiList(w http.ResponseWriter, r *http.Request) { func (a *API) CanaryConfigApiList(w http.ResponseWriter, r *http.Request) {
featureErr := a.featureStatus[config.CanaryFeature] featureErr := a.featureStatus[config.CanaryFeature]
if len(featureErr) > 0 { if len(featureErr) > 0 {
a.respondWithError(w, fission.MakeError(http.StatusInternalServerError, fmt.Sprintf("Error enabling canary feature: %v", featureErr))) a.respondWithError(w, ferror.MakeError(http.StatusInternalServerError, fmt.Sprintf("Error enabling canary feature: %v", featureErr)))
return return
} }
@@ -128,7 +128,7 @@ func (a *API) CanaryConfigApiList(w http.ResponseWriter, r *http.Request) {
func (a *API) CanaryConfigApiUpdate(w http.ResponseWriter, r *http.Request) { func (a *API) CanaryConfigApiUpdate(w http.ResponseWriter, r *http.Request) {
featureErr := a.featureStatus[config.CanaryFeature] featureErr := a.featureStatus[config.CanaryFeature]
if len(featureErr) > 0 { if len(featureErr) > 0 {
a.respondWithError(w, fission.MakeError(http.StatusInternalServerError, fmt.Sprintf("Error enabling canary feature: %v", featureErr))) a.respondWithError(w, ferror.MakeError(http.StatusInternalServerError, fmt.Sprintf("Error enabling canary feature: %v", featureErr)))
return return
} }
@@ -138,7 +138,7 @@ func (a *API) CanaryConfigApiUpdate(w http.ResponseWriter, r *http.Request) {
return return
} }
var c crd.CanaryConfig var c fv1.CanaryConfig
err = json.Unmarshal(body, &c) err = json.Unmarshal(body, &c)
if err != nil { if err != nil {
a.respondWithError(w, err) a.respondWithError(w, err)
@@ -163,7 +163,7 @@ func (a *API) CanaryConfigApiUpdate(w http.ResponseWriter, r *http.Request) {
func (a *API) CanaryConfigApiDelete(w http.ResponseWriter, r *http.Request) { func (a *API) CanaryConfigApiDelete(w http.ResponseWriter, r *http.Request) {
featureErr := a.featureStatus[config.CanaryFeature] featureErr := a.featureStatus[config.CanaryFeature]
if len(featureErr) > 0 { if len(featureErr) > 0 {
a.respondWithError(w, fission.MakeError(http.StatusInternalServerError, fmt.Sprintf("Error enabling canary feature: %v", featureErr))) a.respondWithError(w, ferror.MakeError(http.StatusInternalServerError, fmt.Sprintf("Error enabling canary feature: %v", featureErr)))
return return
} }
@@ -24,10 +24,10 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"github.com/fission/fission/crd" fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
) )
func (c *Client) CanaryConfigCreate(canaryConf *crd.CanaryConfig) (*metav1.ObjectMeta, error) { func (c *Client) CanaryConfigCreate(canaryConf *fv1.CanaryConfig) (*metav1.ObjectMeta, error) {
reqbody, err := json.Marshal(canaryConf) reqbody, err := json.Marshal(canaryConf)
if err != nil { if err != nil {
return nil, err return nil, err
@@ -53,7 +53,7 @@ func (c *Client) CanaryConfigCreate(canaryConf *crd.CanaryConfig) (*metav1.Objec
return &m, nil return &m, nil
} }
func (c *Client) CanaryConfigGet(m *metav1.ObjectMeta) (*crd.CanaryConfig, error) { func (c *Client) CanaryConfigGet(m *metav1.ObjectMeta) (*fv1.CanaryConfig, error) {
relativeUrl := fmt.Sprintf("canaryconfigs/%v", m.Name) relativeUrl := fmt.Sprintf("canaryconfigs/%v", m.Name)
relativeUrl += fmt.Sprintf("?namespace=%v", m.Namespace) relativeUrl += fmt.Sprintf("?namespace=%v", m.Namespace)
@@ -68,7 +68,7 @@ func (c *Client) CanaryConfigGet(m *metav1.ObjectMeta) (*crd.CanaryConfig, error
return nil, err return nil, err
} }
var canaryCfg crd.CanaryConfig var canaryCfg fv1.CanaryConfig
err = json.Unmarshal(body, &canaryCfg) err = json.Unmarshal(body, &canaryCfg)
if err != nil { if err != nil {
return nil, err return nil, err
@@ -77,7 +77,7 @@ func (c *Client) CanaryConfigGet(m *metav1.ObjectMeta) (*crd.CanaryConfig, error
return &canaryCfg, nil return &canaryCfg, nil
} }
func (c *Client) CanaryConfigUpdate(canaryConf *crd.CanaryConfig) (*metav1.ObjectMeta, error) { func (c *Client) CanaryConfigUpdate(canaryConf *fv1.CanaryConfig) (*metav1.ObjectMeta, error) {
reqbody, err := json.Marshal(canaryConf) reqbody, err := json.Marshal(canaryConf)
if err != nil { if err != nil {
return nil, err return nil, err
@@ -110,7 +110,7 @@ func (c *Client) CanaryConfigDelete(m *metav1.ObjectMeta) error {
return c.delete(relativeUrl) return c.delete(relativeUrl)
} }
func (c *Client) CanaryConfigList(ns string) ([]crd.CanaryConfig, error) { func (c *Client) CanaryConfigList(ns string) ([]fv1.CanaryConfig, error) {
relativeUrl := fmt.Sprintf("canaryconfigs?namespace=%v", ns) relativeUrl := fmt.Sprintf("canaryconfigs?namespace=%v", ns)
resp, err := http.Get(c.url(relativeUrl)) resp, err := http.Get(c.url(relativeUrl))
if err != nil { if err != nil {
@@ -123,7 +123,7 @@ func (c *Client) CanaryConfigList(ns string) ([]crd.CanaryConfig, error) {
return nil, err return nil, err
} }
canaryCfgs := make([]crd.CanaryConfig, 0) canaryCfgs := make([]fv1.CanaryConfig, 0)
err = json.Unmarshal(body, &canaryCfgs) err = json.Unmarshal(body, &canaryCfgs)
if err != nil { if err != nil {
return nil, err return nil, err
@@ -25,7 +25,8 @@ import (
"net/http" "net/http"
"strings" "strings"
"github.com/fission/fission" ferror "github.com/fission/fission/pkg/error"
"github.com/fission/fission/pkg/info"
) )
type ( type (
@@ -77,7 +78,7 @@ func (c *Client) url(relativeUrl string) string {
func (c *Client) handleResponse(resp *http.Response) ([]byte, error) { func (c *Client) handleResponse(resp *http.Response) ([]byte, error) {
if resp.StatusCode != 200 { if resp.StatusCode != 200 {
return nil, fission.MakeErrorFromHTTP(resp) return nil, ferror.MakeErrorFromHTTP(resp)
} }
body, err := ioutil.ReadAll(resp.Body) body, err := ioutil.ReadAll(resp.Body)
return body, err return body, err
@@ -85,13 +86,13 @@ func (c *Client) handleResponse(resp *http.Response) ([]byte, error) {
func (c *Client) handleCreateResponse(resp *http.Response) ([]byte, error) { func (c *Client) handleCreateResponse(resp *http.Response) ([]byte, error) {
if resp.StatusCode != 201 { if resp.StatusCode != 201 {
return nil, fission.MakeErrorFromHTTP(resp) return nil, ferror.MakeErrorFromHTTP(resp)
} }
body, err := ioutil.ReadAll(resp.Body) body, err := ioutil.ReadAll(resp.Body)
return body, err return body, err
} }
func (c *Client) ServerInfo() (*fission.ServerInfo, error) { func (c *Client) ServerInfo() (*info.ServerInfo, error) {
url := fmt.Sprintf(c.Url) url := fmt.Sprintf(c.Url)
resp, err := http.Get(url) resp, err := http.Get(url)
if err != nil { if err != nil {
@@ -104,7 +105,7 @@ func (c *Client) ServerInfo() (*fission.ServerInfo, error) {
return nil, err return nil, err
} }
info := &fission.ServerInfo{} info := &info.ServerInfo{}
err = json.Unmarshal(body, info) err = json.Unmarshal(body, info)
if err != nil { if err != nil {
return nil, err return nil, err
@@ -24,11 +24,10 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"github.com/fission/fission/crd"
fv1 "github.com/fission/fission/pkg/apis/fission.io/v1" fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
) )
func (c *Client) EnvironmentCreate(env *crd.Environment) (*metav1.ObjectMeta, error) { func (c *Client) EnvironmentCreate(env *fv1.Environment) (*metav1.ObjectMeta, error) {
err := env.Validate() err := env.Validate()
if err != nil { if err != nil {
return nil, fv1.AggregateValidationErrors("Environment", err) return nil, fv1.AggregateValidationErrors("Environment", err)
@@ -59,7 +58,7 @@ func (c *Client) EnvironmentCreate(env *crd.Environment) (*metav1.ObjectMeta, er
return &m, nil return &m, nil
} }
func (c *Client) EnvironmentGet(m *metav1.ObjectMeta) (*crd.Environment, error) { func (c *Client) EnvironmentGet(m *metav1.ObjectMeta) (*fv1.Environment, error) {
relativeUrl := fmt.Sprintf("environments/%v", m.Name) relativeUrl := fmt.Sprintf("environments/%v", m.Name)
relativeUrl += fmt.Sprintf("?namespace=%v", m.Namespace) relativeUrl += fmt.Sprintf("?namespace=%v", m.Namespace)
@@ -74,7 +73,7 @@ func (c *Client) EnvironmentGet(m *metav1.ObjectMeta) (*crd.Environment, error)
return nil, err return nil, err
} }
var env crd.Environment var env fv1.Environment
err = json.Unmarshal(body, &env) err = json.Unmarshal(body, &env)
if err != nil { if err != nil {
return nil, err return nil, err
@@ -83,7 +82,7 @@ func (c *Client) EnvironmentGet(m *metav1.ObjectMeta) (*crd.Environment, error)
return &env, nil return &env, nil
} }
func (c *Client) EnvironmentUpdate(env *crd.Environment) (*metav1.ObjectMeta, error) { func (c *Client) EnvironmentUpdate(env *fv1.Environment) (*metav1.ObjectMeta, error) {
err := env.Validate() err := env.Validate()
if err != nil { if err != nil {
return nil, fv1.AggregateValidationErrors("Environment", err) return nil, fv1.AggregateValidationErrors("Environment", err)
@@ -121,7 +120,7 @@ func (c *Client) EnvironmentDelete(m *metav1.ObjectMeta) error {
return c.delete(relativeUrl) return c.delete(relativeUrl)
} }
func (c *Client) EnvironmentList(ns string) ([]crd.Environment, error) { func (c *Client) EnvironmentList(ns string) ([]fv1.Environment, error) {
relativeUrl := fmt.Sprintf("environments?namespace=%v", ns) relativeUrl := fmt.Sprintf("environments?namespace=%v", ns)
resp, err := http.Get(c.url(relativeUrl)) resp, err := http.Get(c.url(relativeUrl))
if err != nil { if err != nil {
@@ -134,7 +133,7 @@ func (c *Client) EnvironmentList(ns string) ([]crd.Environment, error) {
return nil, err return nil, err
} }
envs := make([]crd.Environment, 0) envs := make([]fv1.Environment, 0)
err = json.Unmarshal(body, &envs) err = json.Unmarshal(body, &envs)
if err != nil { if err != nil {
return nil, err return nil, err
@@ -24,11 +24,10 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"github.com/fission/fission/crd"
fv1 "github.com/fission/fission/pkg/apis/fission.io/v1" fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
) )
func (c *Client) FunctionCreate(f *crd.Function) (*metav1.ObjectMeta, error) { func (c *Client) FunctionCreate(f *fv1.Function) (*metav1.ObjectMeta, error) {
err := f.Validate() err := f.Validate()
if err != nil { if err != nil {
return nil, fv1.AggregateValidationErrors("Function", err) return nil, fv1.AggregateValidationErrors("Function", err)
@@ -59,7 +58,7 @@ func (c *Client) FunctionCreate(f *crd.Function) (*metav1.ObjectMeta, error) {
return &m, nil return &m, nil
} }
func (c *Client) FunctionGet(m *metav1.ObjectMeta) (*crd.Function, error) { func (c *Client) FunctionGet(m *metav1.ObjectMeta) (*fv1.Function, error) {
relativeUrl := fmt.Sprintf("functions/%v", m.Name) relativeUrl := fmt.Sprintf("functions/%v", m.Name)
relativeUrl += fmt.Sprintf("?namespace=%v", m.Namespace) relativeUrl += fmt.Sprintf("?namespace=%v", m.Namespace)
@@ -74,7 +73,7 @@ func (c *Client) FunctionGet(m *metav1.ObjectMeta) (*crd.Function, error) {
return nil, err return nil, err
} }
var f crd.Function var f fv1.Function
err = json.Unmarshal(body, &f) err = json.Unmarshal(body, &f)
if err != nil { if err != nil {
return nil, err return nil, err
@@ -97,7 +96,7 @@ func (c *Client) FunctionGetRawDeployment(m *metav1.ObjectMeta) ([]byte, error)
return c.handleResponse(resp) return c.handleResponse(resp)
} }
func (c *Client) FunctionUpdate(f *crd.Function) (*metav1.ObjectMeta, error) { func (c *Client) FunctionUpdate(f *fv1.Function) (*metav1.ObjectMeta, error) {
err := f.Validate() err := f.Validate()
if err != nil { if err != nil {
return nil, fv1.AggregateValidationErrors("Function", err) return nil, fv1.AggregateValidationErrors("Function", err)
@@ -134,7 +133,7 @@ func (c *Client) FunctionDelete(m *metav1.ObjectMeta) error {
return c.delete(relativeUrl) return c.delete(relativeUrl)
} }
func (c *Client) FunctionList(functionNamespace string) ([]crd.Function, error) { func (c *Client) FunctionList(functionNamespace string) ([]fv1.Function, error) {
relativeUrl := fmt.Sprintf("functions?namespace=%v", functionNamespace) relativeUrl := fmt.Sprintf("functions?namespace=%v", functionNamespace)
resp, err := http.Get(c.url(relativeUrl)) resp, err := http.Get(c.url(relativeUrl))
if err != nil { if err != nil {
@@ -147,7 +146,7 @@ func (c *Client) FunctionList(functionNamespace string) ([]crd.Function, error)
return nil, err return nil, err
} }
funcs := make([]crd.Function, 0) funcs := make([]fv1.Function, 0)
err = json.Unmarshal(body, &funcs) err = json.Unmarshal(body, &funcs)
if err != nil { if err != nil {
return nil, err return nil, err
@@ -24,11 +24,10 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"github.com/fission/fission/crd"
fv1 "github.com/fission/fission/pkg/apis/fission.io/v1" fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
) )
func (c *Client) HTTPTriggerCreate(t *crd.HTTPTrigger) (*metav1.ObjectMeta, error) { func (c *Client) HTTPTriggerCreate(t *fv1.HTTPTrigger) (*metav1.ObjectMeta, error) {
err := t.Validate() err := t.Validate()
if err != nil { if err != nil {
return nil, fv1.AggregateValidationErrors("HTTPTrigger", err) return nil, fv1.AggregateValidationErrors("HTTPTrigger", err)
@@ -59,7 +58,7 @@ func (c *Client) HTTPTriggerCreate(t *crd.HTTPTrigger) (*metav1.ObjectMeta, erro
return &m, nil return &m, nil
} }
func (c *Client) HTTPTriggerGet(m *metav1.ObjectMeta) (*crd.HTTPTrigger, error) { func (c *Client) HTTPTriggerGet(m *metav1.ObjectMeta) (*fv1.HTTPTrigger, error) {
relativeUrl := fmt.Sprintf("triggers/http/%v", m.Name) relativeUrl := fmt.Sprintf("triggers/http/%v", m.Name)
relativeUrl += fmt.Sprintf("?namespace=%v", m.Namespace) relativeUrl += fmt.Sprintf("?namespace=%v", m.Namespace)
@@ -74,7 +73,7 @@ func (c *Client) HTTPTriggerGet(m *metav1.ObjectMeta) (*crd.HTTPTrigger, error)
return nil, err return nil, err
} }
var t crd.HTTPTrigger var t fv1.HTTPTrigger
err = json.Unmarshal(body, &t) err = json.Unmarshal(body, &t)
if err != nil { if err != nil {
return nil, err return nil, err
@@ -83,7 +82,7 @@ func (c *Client) HTTPTriggerGet(m *metav1.ObjectMeta) (*crd.HTTPTrigger, error)
return &t, nil return &t, nil
} }
func (c *Client) HTTPTriggerUpdate(t *crd.HTTPTrigger) (*metav1.ObjectMeta, error) { func (c *Client) HTTPTriggerUpdate(t *fv1.HTTPTrigger) (*metav1.ObjectMeta, error) {
err := t.Validate() err := t.Validate()
if err != nil { if err != nil {
return nil, fv1.AggregateValidationErrors("HTTPTrigger", err) return nil, fv1.AggregateValidationErrors("HTTPTrigger", err)
@@ -120,7 +119,7 @@ func (c *Client) HTTPTriggerDelete(m *metav1.ObjectMeta) error {
return c.delete(relativeUrl) return c.delete(relativeUrl)
} }
func (c *Client) HTTPTriggerList(triggerNamespace string) ([]crd.HTTPTrigger, error) { func (c *Client) HTTPTriggerList(triggerNamespace string) ([]fv1.HTTPTrigger, error) {
relativeUrl := fmt.Sprintf("triggers/http?namespace=%v", triggerNamespace) relativeUrl := fmt.Sprintf("triggers/http?namespace=%v", triggerNamespace)
resp, err := http.Get(c.url(relativeUrl)) resp, err := http.Get(c.url(relativeUrl))
if err != nil { if err != nil {
@@ -133,7 +132,7 @@ func (c *Client) HTTPTriggerList(triggerNamespace string) ([]crd.HTTPTrigger, er
return nil, err return nil, err
} }
triggers := make([]crd.HTTPTrigger, 0) triggers := make([]fv1.HTTPTrigger, 0)
err = json.Unmarshal(body, &triggers) err = json.Unmarshal(body, &triggers)
if err != nil { if err != nil {
return nil, err return nil, err
@@ -24,12 +24,11 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"github.com/fission/fission"
"github.com/fission/fission/crd"
fv1 "github.com/fission/fission/pkg/apis/fission.io/v1" fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
ferror "github.com/fission/fission/pkg/error"
) )
func (c *Client) WatchCreate(w *crd.KubernetesWatchTrigger) (*metav1.ObjectMeta, error) { func (c *Client) WatchCreate(w *fv1.KubernetesWatchTrigger) (*metav1.ObjectMeta, error) {
err := w.Validate() err := w.Validate()
if err != nil { if err != nil {
return nil, fv1.AggregateValidationErrors("KubernetesWatchTrigger", err) return nil, fv1.AggregateValidationErrors("KubernetesWatchTrigger", err)
@@ -60,7 +59,7 @@ func (c *Client) WatchCreate(w *crd.KubernetesWatchTrigger) (*metav1.ObjectMeta,
return &m, nil return &m, nil
} }
func (c *Client) WatchGet(m *metav1.ObjectMeta) (*crd.KubernetesWatchTrigger, error) { func (c *Client) WatchGet(m *metav1.ObjectMeta) (*fv1.KubernetesWatchTrigger, error) {
relativeUrl := fmt.Sprintf("watches/%v", m.Name) relativeUrl := fmt.Sprintf("watches/%v", m.Name)
relativeUrl += fmt.Sprintf("?namespace=%v", m.Namespace) relativeUrl += fmt.Sprintf("?namespace=%v", m.Namespace)
@@ -75,7 +74,7 @@ func (c *Client) WatchGet(m *metav1.ObjectMeta) (*crd.KubernetesWatchTrigger, er
return nil, err return nil, err
} }
var w crd.KubernetesWatchTrigger var w fv1.KubernetesWatchTrigger
err = json.Unmarshal(body, &w) err = json.Unmarshal(body, &w)
if err != nil { if err != nil {
return nil, err return nil, err
@@ -84,8 +83,8 @@ func (c *Client) WatchGet(m *metav1.ObjectMeta) (*crd.KubernetesWatchTrigger, er
return &w, nil return &w, nil
} }
func (c *Client) WatchUpdate(w *crd.KubernetesWatchTrigger) (*metav1.ObjectMeta, error) { func (c *Client) WatchUpdate(w *fv1.KubernetesWatchTrigger) (*metav1.ObjectMeta, error) {
return nil, fission.MakeError(fission.ErrorNotImplmented, return nil, ferror.MakeError(ferror.ErrorNotImplmented,
"watch update not implemented") "watch update not implemented")
} }
@@ -95,7 +94,7 @@ func (c *Client) WatchDelete(m *metav1.ObjectMeta) error {
return c.delete(relativeUrl) return c.delete(relativeUrl)
} }
func (c *Client) WatchList(ns string) ([]crd.KubernetesWatchTrigger, error) { func (c *Client) WatchList(ns string) ([]fv1.KubernetesWatchTrigger, error) {
relativeUrl := fmt.Sprintf("watches?namespace=%v", ns) relativeUrl := fmt.Sprintf("watches?namespace=%v", ns)
resp, err := http.Get(c.url(relativeUrl)) resp, err := http.Get(c.url(relativeUrl))
if err != nil { if err != nil {
@@ -108,7 +107,7 @@ func (c *Client) WatchList(ns string) ([]crd.KubernetesWatchTrigger, error) {
return nil, err return nil, err
} }
watches := make([]crd.KubernetesWatchTrigger, 0) watches := make([]fv1.KubernetesWatchTrigger, 0)
err = json.Unmarshal(body, &watches) err = json.Unmarshal(body, &watches)
if err != nil { if err != nil {
return nil, err return nil, err
@@ -24,11 +24,10 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"github.com/fission/fission/crd"
fv1 "github.com/fission/fission/pkg/apis/fission.io/v1" fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
) )
func (c *Client) MessageQueueTriggerCreate(t *crd.MessageQueueTrigger) (*metav1.ObjectMeta, error) { func (c *Client) MessageQueueTriggerCreate(t *fv1.MessageQueueTrigger) (*metav1.ObjectMeta, error) {
err := t.Validate() err := t.Validate()
if err != nil { if err != nil {
return nil, fv1.AggregateValidationErrors("MessageQueueTrigger", err) return nil, fv1.AggregateValidationErrors("MessageQueueTrigger", err)
@@ -59,7 +58,7 @@ func (c *Client) MessageQueueTriggerCreate(t *crd.MessageQueueTrigger) (*metav1.
return &m, nil return &m, nil
} }
func (c *Client) MessageQueueTriggerGet(m *metav1.ObjectMeta) (*crd.MessageQueueTrigger, error) { func (c *Client) MessageQueueTriggerGet(m *metav1.ObjectMeta) (*fv1.MessageQueueTrigger, error) {
relativeUrl := fmt.Sprintf("triggers/messagequeue/%v", m.Name) relativeUrl := fmt.Sprintf("triggers/messagequeue/%v", m.Name)
relativeUrl += fmt.Sprintf("?namespace=%v", m.Namespace) relativeUrl += fmt.Sprintf("?namespace=%v", m.Namespace)
@@ -74,7 +73,7 @@ func (c *Client) MessageQueueTriggerGet(m *metav1.ObjectMeta) (*crd.MessageQueue
return nil, err return nil, err
} }
var t crd.MessageQueueTrigger var t fv1.MessageQueueTrigger
err = json.Unmarshal(body, &t) err = json.Unmarshal(body, &t)
if err != nil { if err != nil {
return nil, err return nil, err
@@ -83,7 +82,7 @@ func (c *Client) MessageQueueTriggerGet(m *metav1.ObjectMeta) (*crd.MessageQueue
return &t, nil return &t, nil
} }
func (c *Client) MessageQueueTriggerUpdate(mqTrigger *crd.MessageQueueTrigger) (*metav1.ObjectMeta, error) { func (c *Client) MessageQueueTriggerUpdate(mqTrigger *fv1.MessageQueueTrigger) (*metav1.ObjectMeta, error) {
err := mqTrigger.Validate() err := mqTrigger.Validate()
if err != nil { if err != nil {
return nil, fv1.AggregateValidationErrors("MessageQueueTrigger", err) return nil, fv1.AggregateValidationErrors("MessageQueueTrigger", err)
@@ -120,7 +119,7 @@ func (c *Client) MessageQueueTriggerDelete(m *metav1.ObjectMeta) error {
return c.delete(relativeUrl) return c.delete(relativeUrl)
} }
func (c *Client) MessageQueueTriggerList(mqType string, ns string) ([]crd.MessageQueueTrigger, error) { func (c *Client) MessageQueueTriggerList(mqType string, ns string) ([]fv1.MessageQueueTrigger, error) {
relativeUrl := "triggers/messagequeue" relativeUrl := "triggers/messagequeue"
if len(mqType) > 0 { if len(mqType) > 0 {
// TODO remove this, replace with field selector // TODO remove this, replace with field selector
@@ -138,7 +137,7 @@ func (c *Client) MessageQueueTriggerList(mqType string, ns string) ([]crd.Messag
return nil, err return nil, err
} }
triggers := make([]crd.MessageQueueTrigger, 0) triggers := make([]fv1.MessageQueueTrigger, 0)
err = json.Unmarshal(body, &triggers) err = json.Unmarshal(body, &triggers)
if err != nil { if err != nil {
return nil, err return nil, err
@@ -24,11 +24,10 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"github.com/fission/fission/crd"
fv1 "github.com/fission/fission/pkg/apis/fission.io/v1" fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
) )
func (c *Client) PackageCreate(f *crd.Package) (*metav1.ObjectMeta, error) { func (c *Client) PackageCreate(f *fv1.Package) (*metav1.ObjectMeta, error) {
err := f.Validate() err := f.Validate()
if err != nil { if err != nil {
return nil, fv1.AggregateValidationErrors("Package", err) return nil, fv1.AggregateValidationErrors("Package", err)
@@ -59,7 +58,7 @@ func (c *Client) PackageCreate(f *crd.Package) (*metav1.ObjectMeta, error) {
return &m, nil return &m, nil
} }
func (c *Client) PackageGet(m *metav1.ObjectMeta) (*crd.Package, error) { func (c *Client) PackageGet(m *metav1.ObjectMeta) (*fv1.Package, error) {
relativeUrl := fmt.Sprintf("packages/%v", m.Name) relativeUrl := fmt.Sprintf("packages/%v", m.Name)
relativeUrl += fmt.Sprintf("?namespace=%v", m.Namespace) relativeUrl += fmt.Sprintf("?namespace=%v", m.Namespace)
@@ -74,7 +73,7 @@ func (c *Client) PackageGet(m *metav1.ObjectMeta) (*crd.Package, error) {
return nil, err return nil, err
} }
var f crd.Package var f fv1.Package
err = json.Unmarshal(body, &f) err = json.Unmarshal(body, &f)
if err != nil { if err != nil {
return nil, err return nil, err
@@ -83,7 +82,7 @@ func (c *Client) PackageGet(m *metav1.ObjectMeta) (*crd.Package, error) {
return &f, nil return &f, nil
} }
func (c *Client) PackageUpdate(f *crd.Package) (*metav1.ObjectMeta, error) { func (c *Client) PackageUpdate(f *fv1.Package) (*metav1.ObjectMeta, error) {
err := f.Validate() err := f.Validate()
if err != nil { if err != nil {
return nil, fv1.AggregateValidationErrors("Package", err) return nil, fv1.AggregateValidationErrors("Package", err)
@@ -120,7 +119,7 @@ func (c *Client) PackageDelete(m *metav1.ObjectMeta) error {
return c.delete(relativeUrl) return c.delete(relativeUrl)
} }
func (c *Client) PackageList(pkgNamespace string) ([]crd.Package, error) { func (c *Client) PackageList(pkgNamespace string) ([]fv1.Package, error) {
relativeUrl := fmt.Sprintf("packages?namespace=%v", pkgNamespace) relativeUrl := fmt.Sprintf("packages?namespace=%v", pkgNamespace)
resp, err := http.Get(c.url(relativeUrl)) resp, err := http.Get(c.url(relativeUrl))
if err != nil { if err != nil {
@@ -133,7 +132,7 @@ func (c *Client) PackageList(pkgNamespace string) ([]crd.Package, error) {
return nil, err return nil, err
} }
funcs := make([]crd.Package, 0) funcs := make([]fv1.Package, 0)
err = json.Unmarshal(body, &funcs) err = json.Unmarshal(body, &funcs)
if err != nil { if err != nil {
return nil, err return nil, err
@@ -24,12 +24,11 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"github.com/fission/fission/crd"
fv1 "github.com/fission/fission/pkg/apis/fission.io/v1" fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
"github.com/fission/fission/redis/build/gen" "github.com/fission/fission/pkg/redis/build/gen"
) )
func (c *Client) RecorderCreate(r *crd.Recorder) (*metav1.ObjectMeta, error) { func (c *Client) RecorderCreate(r *fv1.Recorder) (*metav1.ObjectMeta, error) {
err := r.Validate() err := r.Validate()
if err != nil { if err != nil {
return nil, fv1.AggregateValidationErrors("Recorder", err) return nil, fv1.AggregateValidationErrors("Recorder", err)
@@ -60,7 +59,7 @@ func (c *Client) RecorderCreate(r *crd.Recorder) (*metav1.ObjectMeta, error) {
return &m, nil return &m, nil
} }
func (c *Client) RecorderGet(m *metav1.ObjectMeta) (*crd.Recorder, error) { func (c *Client) RecorderGet(m *metav1.ObjectMeta) (*fv1.Recorder, error) {
relativeUrl := fmt.Sprintf("recorders/%v", m.Name) relativeUrl := fmt.Sprintf("recorders/%v", m.Name)
relativeUrl += fmt.Sprintf("?namespace=%v", m.Namespace) relativeUrl += fmt.Sprintf("?namespace=%v", m.Namespace)
@@ -75,7 +74,7 @@ func (c *Client) RecorderGet(m *metav1.ObjectMeta) (*crd.Recorder, error) {
return nil, err return nil, err
} }
var r crd.Recorder var r fv1.Recorder
err = json.Unmarshal(body, &r) err = json.Unmarshal(body, &r)
if err != nil { if err != nil {
return nil, err return nil, err
@@ -84,7 +83,7 @@ func (c *Client) RecorderGet(m *metav1.ObjectMeta) (*crd.Recorder, error) {
return &r, nil return &r, nil
} }
func (c *Client) RecorderUpdate(recorder *crd.Recorder) (*metav1.ObjectMeta, error) { func (c *Client) RecorderUpdate(recorder *fv1.Recorder) (*metav1.ObjectMeta, error) {
err := recorder.Validate() err := recorder.Validate()
if err != nil { if err != nil {
return nil, fv1.AggregateValidationErrors("Recorder", err) return nil, fv1.AggregateValidationErrors("Recorder", err)
@@ -121,7 +120,7 @@ func (c *Client) RecorderDelete(m *metav1.ObjectMeta) error {
return c.delete(relativeUrl) return c.delete(relativeUrl)
} }
func (c *Client) RecorderList(ns string) ([]crd.Recorder, error) { func (c *Client) RecorderList(ns string) ([]fv1.Recorder, error) {
relativeUrl := "recorders" relativeUrl := "recorders"
resp, err := http.Get(c.url(relativeUrl)) resp, err := http.Get(c.url(relativeUrl))
@@ -135,7 +134,7 @@ func (c *Client) RecorderList(ns string) ([]crd.Recorder, error) {
return nil, err return nil, err
} }
recorders := make([]crd.Recorder, 0) recorders := make([]fv1.Recorder, 0)
err = json.Unmarshal(body, &recorders) err = json.Unmarshal(body, &recorders)
if err != nil { if err != nil {
return nil, err return nil, err
@@ -24,11 +24,10 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"github.com/fission/fission/crd"
fv1 "github.com/fission/fission/pkg/apis/fission.io/v1" fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
) )
func (c *Client) TimeTriggerCreate(t *crd.TimeTrigger) (*metav1.ObjectMeta, error) { func (c *Client) TimeTriggerCreate(t *fv1.TimeTrigger) (*metav1.ObjectMeta, error) {
err := t.Validate() err := t.Validate()
if err != nil { if err != nil {
return nil, fv1.AggregateValidationErrors("TimeTrigger", err) return nil, fv1.AggregateValidationErrors("TimeTrigger", err)
@@ -59,7 +58,7 @@ func (c *Client) TimeTriggerCreate(t *crd.TimeTrigger) (*metav1.ObjectMeta, erro
return &m, nil return &m, nil
} }
func (c *Client) TimeTriggerGet(m *metav1.ObjectMeta) (*crd.TimeTrigger, error) { func (c *Client) TimeTriggerGet(m *metav1.ObjectMeta) (*fv1.TimeTrigger, error) {
relativeUrl := fmt.Sprintf("triggers/time/%v", m.Name) relativeUrl := fmt.Sprintf("triggers/time/%v", m.Name)
relativeUrl += fmt.Sprintf("?namespace=%v", m.Namespace) relativeUrl += fmt.Sprintf("?namespace=%v", m.Namespace)
@@ -74,7 +73,7 @@ func (c *Client) TimeTriggerGet(m *metav1.ObjectMeta) (*crd.TimeTrigger, error)
return nil, err return nil, err
} }
var t crd.TimeTrigger var t fv1.TimeTrigger
err = json.Unmarshal(body, &t) err = json.Unmarshal(body, &t)
if err != nil { if err != nil {
return nil, err return nil, err
@@ -83,7 +82,7 @@ func (c *Client) TimeTriggerGet(m *metav1.ObjectMeta) (*crd.TimeTrigger, error)
return &t, nil return &t, nil
} }
func (c *Client) TimeTriggerUpdate(t *crd.TimeTrigger) (*metav1.ObjectMeta, error) { func (c *Client) TimeTriggerUpdate(t *fv1.TimeTrigger) (*metav1.ObjectMeta, error) {
err := t.Validate() err := t.Validate()
if err != nil { if err != nil {
return nil, fv1.AggregateValidationErrors("TimeTrigger", err) return nil, fv1.AggregateValidationErrors("TimeTrigger", err)
@@ -120,7 +119,7 @@ func (c *Client) TimeTriggerDelete(m *metav1.ObjectMeta) error {
return c.delete(relativeUrl) return c.delete(relativeUrl)
} }
func (c *Client) TimeTriggerList(ns string) ([]crd.TimeTrigger, error) { func (c *Client) TimeTriggerList(ns string) ([]fv1.TimeTrigger, error) {
relativeUrl := fmt.Sprintf("triggers/time?namespace=%v", ns) relativeUrl := fmt.Sprintf("triggers/time?namespace=%v", ns)
resp, err := http.Get(c.url(relativeUrl)) resp, err := http.Get(c.url(relativeUrl))
if err != nil { if err != nil {
@@ -133,7 +132,7 @@ func (c *Client) TimeTriggerList(ns string) ([]crd.TimeTrigger, error) {
return nil, err return nil, err
} }
triggers := make([]crd.TimeTrigger, 0) triggers := make([]fv1.TimeTrigger, 0)
err = json.Unmarshal(body, &triggers) err = json.Unmarshal(body, &triggers)
if err != nil { if err != nil {
return nil, err return nil, err
@@ -23,9 +23,9 @@ import (
"go.uber.org/zap" "go.uber.org/zap"
"k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes"
"github.com/fission/fission/canaryconfigmgr" "github.com/fission/fission/pkg/canaryconfigmgr"
"github.com/fission/fission/crd" "github.com/fission/fission/pkg/crd"
config "github.com/fission/fission/featureconfig" config "github.com/fission/fission/pkg/featureconfig"
) )
func ConfigCanaryFeature(context context.Context, logger *zap.Logger, fissionClient *crd.FissionClient, kubeClient *kubernetes.Clientset, featureConfig *config.FeatureConfig, featureStatus map[string]string) error { func ConfigCanaryFeature(context context.Context, logger *zap.Logger, fissionClient *crd.FissionClient, kubeClient *kubernetes.Clientset, featureConfig *config.FeatureConfig, featureStatus map[string]string) error {
@@ -21,14 +21,14 @@ import (
"go.uber.org/zap" "go.uber.org/zap"
"github.com/fission/fission" "github.com/fission/fission/pkg/crd"
"github.com/fission/fission/crd" "github.com/fission/fission/pkg/utils"
) )
func Start(logger *zap.Logger, port int, unitTestFlag bool) { func Start(logger *zap.Logger, port int, unitTestFlag bool) {
cLogger := logger.Named("controller") cLogger := logger.Named("controller")
// setup a signal handler for SIGTERM // setup a signal handler for SIGTERM
fission.SetupStackTraceHandler() utils.SetupStackTraceHandler()
fc, kc, apiExtClient, err := crd.MakeFissionClient() fc, kc, apiExtClient, err := crd.MakeFissionClient()
if err != nil { if err != nil {
+1 -1
View File
@@ -19,7 +19,7 @@ package controller
import ( import (
"go.uber.org/zap" "go.uber.org/zap"
"github.com/fission/fission/crd" "github.com/fission/fission/pkg/crd"
) )
func makeCRDBackedAPI(logger *zap.Logger) (*API, error) { func makeCRDBackedAPI(logger *zap.Logger) (*API, error) {
@@ -25,8 +25,8 @@ import (
"go.uber.org/zap" "go.uber.org/zap"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"github.com/fission/fission" fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
"github.com/fission/fission/crd" ferror "github.com/fission/fission/pkg/error"
) )
func (a *API) EnvironmentApiList(w http.ResponseWriter, r *http.Request) { func (a *API) EnvironmentApiList(w http.ResponseWriter, r *http.Request) {
@@ -57,7 +57,7 @@ func (a *API) EnvironmentApiCreate(w http.ResponseWriter, r *http.Request) {
return return
} }
var env crd.Environment var env fv1.Environment
err = json.Unmarshal(body, &env) err = json.Unmarshal(body, &env)
if err != nil { if err != nil {
a.logger.Error("failed to unmarshal request body", zap.Error(err), zap.Binary("body", body)) a.logger.Error("failed to unmarshal request body", zap.Error(err), zap.Binary("body", body))
@@ -122,7 +122,7 @@ func (a *API) EnvironmentApiUpdate(w http.ResponseWriter, r *http.Request) {
return return
} }
var env crd.Environment var env fv1.Environment
err = json.Unmarshal(body, &env) err = json.Unmarshal(body, &env)
if err != nil { if err != nil {
a.respondWithError(w, err) a.respondWithError(w, err)
@@ -130,7 +130,7 @@ func (a *API) EnvironmentApiUpdate(w http.ResponseWriter, r *http.Request) {
} }
if name != env.Metadata.Name { if name != env.Metadata.Name {
err = fission.MakeError(fission.ErrorInvalidArgument, "Environment name doesn't match URL") err = ferror.MakeError(ferror.ErrorInvalidArgument, "Environment name doesn't match URL")
a.respondWithError(w, err) a.respondWithError(w, err)
return return
} }
@@ -32,8 +32,8 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
restclient "k8s.io/client-go/rest" restclient "k8s.io/client-go/rest"
"github.com/fission/fission" fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
"github.com/fission/fission/crd" ferror "github.com/fission/fission/pkg/error"
) )
func (a *API) getIstioServiceLabels(fnName string) map[string]string { func (a *API) getIstioServiceLabels(fnName string) map[string]string {
@@ -70,7 +70,7 @@ func (a *API) FunctionApiCreate(w http.ResponseWriter, r *http.Request) {
return return
} }
var f crd.Function var f fv1.Function
err = json.Unmarshal(body, &f) err = json.Unmarshal(body, &f)
if err != nil { if err != nil {
a.respondWithError(w, err) a.respondWithError(w, err)
@@ -132,7 +132,7 @@ func (a *API) FunctionApiUpdate(w http.ResponseWriter, r *http.Request) {
return return
} }
var f crd.Function var f fv1.Function
err = json.Unmarshal(body, &f) err = json.Unmarshal(body, &f)
if err != nil { if err != nil {
a.respondWithError(w, err) a.respondWithError(w, err)
@@ -140,7 +140,7 @@ func (a *API) FunctionApiUpdate(w http.ResponseWriter, r *http.Request) {
} }
if name != f.Metadata.Name { if name != f.Metadata.Name {
err = fission.MakeError(fission.ErrorInvalidArgument, "Function name doesn't match URL") err = ferror.MakeError(ferror.ErrorInvalidArgument, "Function name doesn't match URL")
a.respondWithError(w, err) a.respondWithError(w, err)
return return
} }
@@ -25,8 +25,8 @@ import (
"github.com/gorilla/mux" "github.com/gorilla/mux"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"github.com/fission/fission" fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
"github.com/fission/fission/crd" ferror "github.com/fission/fission/pkg/error"
) )
func (a *API) HTTPTriggerApiList(w http.ResponseWriter, r *http.Request) { func (a *API) HTTPTriggerApiList(w http.ResponseWriter, r *http.Request) {
@@ -51,7 +51,7 @@ func (a *API) HTTPTriggerApiList(w http.ResponseWriter, r *http.Request) {
} }
// checkHTTPTriggerDuplicates checks whether the tuple (Method, Host, URL) is duplicate or not. // checkHTTPTriggerDuplicates checks whether the tuple (Method, Host, URL) is duplicate or not.
func (a *API) checkHTTPTriggerDuplicates(t *crd.HTTPTrigger) error { func (a *API) checkHTTPTriggerDuplicates(t *fv1.HTTPTrigger) error {
triggers, err := a.fissionClient.HTTPTriggers(metav1.NamespaceAll).List(metav1.ListOptions{}) triggers, err := a.fissionClient.HTTPTriggers(metav1.NamespaceAll).List(metav1.ListOptions{})
if err != nil { if err != nil {
return err return err
@@ -62,7 +62,7 @@ func (a *API) checkHTTPTriggerDuplicates(t *crd.HTTPTrigger) error {
continue continue
} }
if ht.Spec.RelativeURL == t.Spec.RelativeURL && ht.Spec.Method == t.Spec.Method && ht.Spec.Host == t.Spec.Host { if ht.Spec.RelativeURL == t.Spec.RelativeURL && ht.Spec.Method == t.Spec.Method && ht.Spec.Host == t.Spec.Host {
return fission.MakeError(fission.ErrorNameExists, return ferror.MakeError(ferror.ErrorNameExists,
fmt.Sprintf("HTTPTrigger with same Host, URL & method already exists (%v)", fmt.Sprintf("HTTPTrigger with same Host, URL & method already exists (%v)",
ht.Metadata.Name)) ht.Metadata.Name))
} }
@@ -77,7 +77,7 @@ func (a *API) HTTPTriggerApiCreate(w http.ResponseWriter, r *http.Request) {
return return
} }
var t crd.HTTPTrigger var t fv1.HTTPTrigger
err = json.Unmarshal(body, &t) err = json.Unmarshal(body, &t)
if err != nil { if err != nil {
a.respondWithError(w, err) a.respondWithError(w, err)
@@ -147,7 +147,7 @@ func (a *API) HTTPTriggerApiUpdate(w http.ResponseWriter, r *http.Request) {
return return
} }
var t crd.HTTPTrigger var t fv1.HTTPTrigger
err = json.Unmarshal(body, &t) err = json.Unmarshal(body, &t)
if err != nil { if err != nil {
a.respondWithError(w, err) a.respondWithError(w, err)
@@ -155,7 +155,7 @@ func (a *API) HTTPTriggerApiUpdate(w http.ResponseWriter, r *http.Request) {
} }
if name != t.Metadata.Name { if name != t.Metadata.Name {
err = fission.MakeError(fission.ErrorInvalidArgument, "HTTPTrigger name doesn't match URL") err = ferror.MakeError(ferror.ErrorInvalidArgument, "HTTPTrigger name doesn't match URL")
a.respondWithError(w, err) a.respondWithError(w, err)
return return
} }
@@ -24,8 +24,8 @@ import (
"github.com/gorilla/mux" "github.com/gorilla/mux"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"github.com/fission/fission" fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
"github.com/fission/fission/crd" ferror "github.com/fission/fission/pkg/error"
) )
func (a *API) MessageQueueTriggerApiList(w http.ResponseWriter, r *http.Request) { func (a *API) MessageQueueTriggerApiList(w http.ResponseWriter, r *http.Request) {
@@ -55,7 +55,7 @@ func (a *API) MessageQueueTriggerApiCreate(w http.ResponseWriter, r *http.Reques
return return
} }
var mqTrigger crd.MessageQueueTrigger var mqTrigger fv1.MessageQueueTrigger
err = json.Unmarshal(body, &mqTrigger) err = json.Unmarshal(body, &mqTrigger)
if err != nil { if err != nil {
a.respondWithError(w, err) a.respondWithError(w, err)
@@ -115,7 +115,7 @@ func (a *API) MessageQueueTriggerApiUpdate(w http.ResponseWriter, r *http.Reques
return return
} }
var mqTrigger crd.MessageQueueTrigger var mqTrigger fv1.MessageQueueTrigger
err = json.Unmarshal(body, &mqTrigger) err = json.Unmarshal(body, &mqTrigger)
if err != nil { if err != nil {
a.respondWithError(w, err) a.respondWithError(w, err)
@@ -123,7 +123,7 @@ func (a *API) MessageQueueTriggerApiUpdate(w http.ResponseWriter, r *http.Reques
} }
if name != mqTrigger.Metadata.Name { if name != mqTrigger.Metadata.Name {
err = fission.MakeError(fission.ErrorInvalidArgument, "Message queue trigger name doesn't match URL") err = ferror.MakeError(ferror.ErrorInvalidArgument, "Message queue trigger name doesn't match URL")
a.respondWithError(w, err) a.respondWithError(w, err)
return return
} }
@@ -23,11 +23,12 @@ import (
"net/http" "net/http"
"github.com/dustin/go-humanize" "github.com/dustin/go-humanize"
"github.com/fission/fission/pkg/types"
"github.com/gorilla/mux" "github.com/gorilla/mux"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"github.com/fission/fission" fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
"github.com/fission/fission/crd" ferror "github.com/fission/fission/pkg/error"
) )
func (a *API) PackageApiList(w http.ResponseWriter, r *http.Request) { func (a *API) PackageApiList(w http.ResponseWriter, r *http.Request) {
@@ -57,7 +58,7 @@ func (a *API) PackageApiCreate(w http.ResponseWriter, r *http.Request) {
return return
} }
var f crd.Package var f fv1.Package
err = json.Unmarshal(body, &f) err = json.Unmarshal(body, &f)
if err != nil { if err != nil {
a.respondWithError(w, err) a.respondWithError(w, err)
@@ -65,15 +66,15 @@ func (a *API) PackageApiCreate(w http.ResponseWriter, r *http.Request) {
} }
// Ensure size limits // Ensure size limits
if len(f.Spec.Source.Literal) > int(fission.ArchiveLiteralSizeLimit) { if len(f.Spec.Source.Literal) > int(types.ArchiveLiteralSizeLimit) {
err := fission.MakeError(fission.ErrorInvalidArgument, err := ferror.MakeError(ferror.ErrorInvalidArgument,
fmt.Sprintf("Package literal larger than %s", humanize.Bytes(uint64(fission.ArchiveLiteralSizeLimit)))) fmt.Sprintf("Package literal larger than %s", humanize.Bytes(uint64(types.ArchiveLiteralSizeLimit))))
a.respondWithError(w, err) a.respondWithError(w, err)
return return
} }
if len(f.Spec.Deployment.Literal) > int(fission.ArchiveLiteralSizeLimit) { if len(f.Spec.Deployment.Literal) > int(types.ArchiveLiteralSizeLimit) {
err := fission.MakeError(fission.ErrorInvalidArgument, err := ferror.MakeError(ferror.ErrorInvalidArgument,
fmt.Sprintf("Package literal larger than %s", humanize.Bytes(uint64(fission.ArchiveLiteralSizeLimit)))) fmt.Sprintf("Package literal larger than %s", humanize.Bytes(uint64(types.ArchiveLiteralSizeLimit))))
a.respondWithError(w, err) a.respondWithError(w, err)
return return
} }
@@ -139,7 +140,7 @@ func (a *API) PackageApiUpdate(w http.ResponseWriter, r *http.Request) {
return return
} }
var f crd.Package var f fv1.Package
err = json.Unmarshal(body, &f) err = json.Unmarshal(body, &f)
if err != nil { if err != nil {
a.respondWithError(w, err) a.respondWithError(w, err)
@@ -147,7 +148,7 @@ func (a *API) PackageApiUpdate(w http.ResponseWriter, r *http.Request) {
} }
if name != f.Metadata.Name { if name != f.Metadata.Name {
err = fission.MakeError(fission.ErrorInvalidArgument, "Package name doesn't match URL") err = ferror.MakeError(ferror.ErrorInvalidArgument, "Package name doesn't match URL")
a.respondWithError(w, err) a.respondWithError(w, err)
return return
} }
@@ -24,8 +24,8 @@ import (
"github.com/gorilla/mux" "github.com/gorilla/mux"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"github.com/fission/fission" fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
"github.com/fission/fission/crd" ferror "github.com/fission/fission/pkg/error"
) )
func (a *API) RecorderApiList(w http.ResponseWriter, r *http.Request) { func (a *API) RecorderApiList(w http.ResponseWriter, r *http.Request) {
@@ -50,7 +50,7 @@ func (a *API) RecorderApiCreate(w http.ResponseWriter, r *http.Request) {
return return
} }
var recorder crd.Recorder var recorder fv1.Recorder
err = json.Unmarshal(body, &recorder) err = json.Unmarshal(body, &recorder)
if err != nil { if err != nil {
a.respondWithError(w, err) a.respondWithError(w, err)
@@ -103,7 +103,7 @@ func (a *API) RecorderApiUpdate(w http.ResponseWriter, r *http.Request) {
return return
} }
var recorder crd.Recorder var recorder fv1.Recorder
err = json.Unmarshal(body, &recorder) err = json.Unmarshal(body, &recorder)
if err != nil { if err != nil {
a.respondWithError(w, err) a.respondWithError(w, err)
@@ -111,7 +111,7 @@ func (a *API) RecorderApiUpdate(w http.ResponseWriter, r *http.Request) {
} }
if name != recorder.Metadata.Name { if name != recorder.Metadata.Name {
err = fission.MakeError(fission.ErrorInvalidArgument, "Recorder name doesn't match URL") err = ferror.MakeError(ferror.ErrorInvalidArgument, "Recorder name doesn't match URL")
a.respondWithError(w, err) a.respondWithError(w, err)
return return
} }
@@ -22,7 +22,7 @@ import (
"github.com/gorilla/mux" "github.com/gorilla/mux"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"github.com/fission/fission/redis" "github.com/fission/fission/pkg/redis"
) )
func (a *API) RecordsApiListAll(w http.ResponseWriter, r *http.Request) { func (a *API) RecordsApiListAll(w http.ResponseWriter, r *http.Request) {
@@ -22,7 +22,7 @@ import (
"github.com/gorilla/mux" "github.com/gorilla/mux"
"github.com/fission/fission/redis" "github.com/fission/fission/pkg/redis"
) )
func (a *API) ReplayByReqUID(w http.ResponseWriter, r *http.Request) { func (a *API) ReplayByReqUID(w http.ResponseWriter, r *http.Request) {
@@ -25,8 +25,8 @@ import (
"github.com/robfig/cron" "github.com/robfig/cron"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"github.com/fission/fission" fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
"github.com/fission/fission/crd" ferror "github.com/fission/fission/pkg/error"
) )
func (a *API) TimeTriggerApiList(w http.ResponseWriter, r *http.Request) { func (a *API) TimeTriggerApiList(w http.ResponseWriter, r *http.Request) {
@@ -57,7 +57,7 @@ func (a *API) TimeTriggerApiCreate(w http.ResponseWriter, r *http.Request) {
return return
} }
var t crd.TimeTrigger var t fv1.TimeTrigger
err = json.Unmarshal(body, &t) err = json.Unmarshal(body, &t)
if err != nil { if err != nil {
a.respondWithError(w, err) a.respondWithError(w, err)
@@ -67,7 +67,7 @@ func (a *API) TimeTriggerApiCreate(w http.ResponseWriter, r *http.Request) {
// validate // validate
_, err = cron.Parse(t.Spec.Cron) _, err = cron.Parse(t.Spec.Cron)
if err != nil { if err != nil {
err = fission.MakeError(fission.ErrorInvalidArgument, "TimeTrigger cron spec is not valid") err = ferror.MakeError(ferror.ErrorInvalidArgument, "TimeTrigger cron spec is not valid")
a.respondWithError(w, err) a.respondWithError(w, err)
return return
} }
@@ -128,7 +128,7 @@ func (a *API) TimeTriggerApiUpdate(w http.ResponseWriter, r *http.Request) {
return return
} }
var t crd.TimeTrigger var t fv1.TimeTrigger
err = json.Unmarshal(body, &t) err = json.Unmarshal(body, &t)
if err != nil { if err != nil {
a.respondWithError(w, err) a.respondWithError(w, err)
@@ -136,14 +136,14 @@ func (a *API) TimeTriggerApiUpdate(w http.ResponseWriter, r *http.Request) {
} }
if name != t.Metadata.Name { if name != t.Metadata.Name {
err = fission.MakeError(fission.ErrorInvalidArgument, "TimeTrigger name doesn't match URL") err = ferror.MakeError(ferror.ErrorInvalidArgument, "TimeTrigger name doesn't match URL")
a.respondWithError(w, err) a.respondWithError(w, err)
return return
} }
_, err = cron.Parse(t.Spec.Cron) _, err = cron.Parse(t.Spec.Cron)
if err != nil { if err != nil {
err = fission.MakeError(fission.ErrorInvalidArgument, "TimeTrigger cron spec is not valid") err = ferror.MakeError(ferror.ErrorInvalidArgument, "TimeTrigger cron spec is not valid")
a.respondWithError(w, err) a.respondWithError(w, err)
return return
} }
@@ -24,8 +24,8 @@ import (
"github.com/gorilla/mux" "github.com/gorilla/mux"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"github.com/fission/fission" fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
"github.com/fission/fission/crd" ferror "github.com/fission/fission/pkg/error"
) )
func (a *API) WatchApiList(w http.ResponseWriter, r *http.Request) { func (a *API) WatchApiList(w http.ResponseWriter, r *http.Request) {
@@ -56,7 +56,7 @@ func (a *API) WatchApiCreate(w http.ResponseWriter, r *http.Request) {
return return
} }
var watch crd.KubernetesWatchTrigger var watch fv1.KubernetesWatchTrigger
err = json.Unmarshal(body, &watch) err = json.Unmarshal(body, &watch)
if err != nil { if err != nil {
a.respondWithError(w, err) a.respondWithError(w, err)
@@ -112,7 +112,7 @@ func (a *API) WatchApiGet(w http.ResponseWriter, r *http.Request) {
} }
func (a *API) WatchApiUpdate(w http.ResponseWriter, r *http.Request) { func (a *API) WatchApiUpdate(w http.ResponseWriter, r *http.Request) {
a.respondWithError(w, fission.MakeError(fission.ErrorNotImplmented, a.respondWithError(w, ferror.MakeError(ferror.ErrorNotImplmented,
"Not implemented")) "Not implemented"))
} }
+14 -12
View File
@@ -21,15 +21,17 @@ import (
"k8s.io/apimachinery/pkg/watch" "k8s.io/apimachinery/pkg/watch"
"k8s.io/client-go/kubernetes/scheme" "k8s.io/client-go/kubernetes/scheme"
"k8s.io/client-go/rest" "k8s.io/client-go/rest"
fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
) )
type ( type (
CanaryConfigInterface interface { CanaryConfigInterface interface {
Create(*CanaryConfig) (*CanaryConfig, error) Create(*fv1.CanaryConfig) (*fv1.CanaryConfig, error)
Get(name string) (*CanaryConfig, error) Get(name string) (*fv1.CanaryConfig, error)
Update(*CanaryConfig) (*CanaryConfig, error) Update(*fv1.CanaryConfig) (*fv1.CanaryConfig, error)
Delete(name string, options *metav1.DeleteOptions) error Delete(name string, options *metav1.DeleteOptions) error
List(opts metav1.ListOptions) (*CanaryConfigList, error) List(opts metav1.ListOptions) (*fv1.CanaryConfigList, error)
Watch(opts metav1.ListOptions) (watch.Interface, error) Watch(opts metav1.ListOptions) (watch.Interface, error)
} }
@@ -46,8 +48,8 @@ func MakeCanaryConfigInterface(crdClient *rest.RESTClient, namespace string) Can
} }
} }
func (c *canaryConfigClient) Create(f *CanaryConfig) (*CanaryConfig, error) { func (c *canaryConfigClient) Create(f *fv1.CanaryConfig) (*fv1.CanaryConfig, error) {
var result CanaryConfig var result fv1.CanaryConfig
err := c.client.Post(). err := c.client.Post().
Resource("canaryconfigs"). Resource("canaryconfigs").
Namespace(c.namespace). Namespace(c.namespace).
@@ -59,8 +61,8 @@ func (c *canaryConfigClient) Create(f *CanaryConfig) (*CanaryConfig, error) {
return &result, nil return &result, nil
} }
func (c *canaryConfigClient) Get(name string) (*CanaryConfig, error) { func (c *canaryConfigClient) Get(name string) (*fv1.CanaryConfig, error) {
var result CanaryConfig var result fv1.CanaryConfig
err := c.client.Get(). err := c.client.Get().
Resource("canaryconfigs"). Resource("canaryconfigs").
Namespace(c.namespace). Namespace(c.namespace).
@@ -72,8 +74,8 @@ func (c *canaryConfigClient) Get(name string) (*CanaryConfig, error) {
return &result, nil return &result, nil
} }
func (c *canaryConfigClient) Update(f *CanaryConfig) (*CanaryConfig, error) { func (c *canaryConfigClient) Update(f *fv1.CanaryConfig) (*fv1.CanaryConfig, error) {
var result CanaryConfig var result fv1.CanaryConfig
err := c.client.Put(). err := c.client.Put().
Resource("canaryconfigs"). Resource("canaryconfigs").
Namespace(c.namespace). Namespace(c.namespace).
@@ -96,8 +98,8 @@ func (c *canaryConfigClient) Delete(name string, opts *metav1.DeleteOptions) err
Error() Error()
} }
func (c *canaryConfigClient) List(opts metav1.ListOptions) (*CanaryConfigList, error) { func (c *canaryConfigClient) List(opts metav1.ListOptions) (*fv1.CanaryConfigList, error) {
var result CanaryConfigList var result fv1.CanaryConfigList
err := c.client.Get(). err := c.client.Get().
Namespace(c.namespace). Namespace(c.namespace).
Resource("canaryconfigs"). Resource("canaryconfigs").
+20 -18
View File
@@ -31,6 +31,8 @@ import (
_ "k8s.io/client-go/plugin/pkg/client/auth" _ "k8s.io/client-go/plugin/pkg/client/auth"
"k8s.io/client-go/rest" "k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd" "k8s.io/client-go/tools/clientcmd"
fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
) )
type ( type (
@@ -106,64 +108,64 @@ func configureClient(config *rest.Config) {
func(scheme *runtime.Scheme) error { func(scheme *runtime.Scheme) error {
scheme.AddKnownTypes( scheme.AddKnownTypes(
groupversion, groupversion,
&Function{}, &fv1.Function{},
&FunctionList{}, &fv1.FunctionList{},
&metav1.ListOptions{}, &metav1.ListOptions{},
&metav1.DeleteOptions{}, &metav1.DeleteOptions{},
) )
scheme.AddKnownTypes( scheme.AddKnownTypes(
groupversion, groupversion,
&Environment{}, &fv1.Environment{},
&EnvironmentList{}, &fv1.EnvironmentList{},
&metav1.ListOptions{}, &metav1.ListOptions{},
&metav1.DeleteOptions{}, &metav1.DeleteOptions{},
) )
scheme.AddKnownTypes( scheme.AddKnownTypes(
groupversion, groupversion,
&HTTPTrigger{}, &fv1.HTTPTrigger{},
&HTTPTriggerList{}, &fv1.HTTPTriggerList{},
&metav1.ListOptions{}, &metav1.ListOptions{},
&metav1.DeleteOptions{}, &metav1.DeleteOptions{},
) )
scheme.AddKnownTypes( scheme.AddKnownTypes(
groupversion, groupversion,
&KubernetesWatchTrigger{}, &fv1.KubernetesWatchTrigger{},
&KubernetesWatchTriggerList{}, &fv1.KubernetesWatchTriggerList{},
&metav1.ListOptions{}, &metav1.ListOptions{},
&metav1.DeleteOptions{}, &metav1.DeleteOptions{},
) )
scheme.AddKnownTypes( scheme.AddKnownTypes(
groupversion, groupversion,
&TimeTrigger{}, &fv1.TimeTrigger{},
&TimeTriggerList{}, &fv1.TimeTriggerList{},
&metav1.ListOptions{}, &metav1.ListOptions{},
&metav1.DeleteOptions{}, &metav1.DeleteOptions{},
) )
scheme.AddKnownTypes( scheme.AddKnownTypes(
groupversion, groupversion,
&MessageQueueTrigger{}, &fv1.MessageQueueTrigger{},
&MessageQueueTriggerList{}, &fv1.MessageQueueTriggerList{},
&metav1.ListOptions{}, &metav1.ListOptions{},
&metav1.DeleteOptions{}, &metav1.DeleteOptions{},
) )
scheme.AddKnownTypes( scheme.AddKnownTypes(
groupversion, groupversion,
&Package{}, &fv1.Package{},
&PackageList{}, &fv1.PackageList{},
&metav1.ListOptions{}, &metav1.ListOptions{},
&metav1.DeleteOptions{}, &metav1.DeleteOptions{},
) )
scheme.AddKnownTypes( scheme.AddKnownTypes(
groupversion, groupversion,
&Recorder{}, &fv1.Recorder{},
&RecorderList{}, &fv1.RecorderList{},
&metav1.ListOptions{}, &metav1.ListOptions{},
&metav1.DeleteOptions{}, &metav1.DeleteOptions{},
) )
scheme.AddKnownTypes( scheme.AddKnownTypes(
groupversion, groupversion,
&CanaryConfig{}, &fv1.CanaryConfig{},
&CanaryConfigList{}, &fv1.CanaryConfigList{},
&metav1.ListOptions{}, &metav1.ListOptions{},
&metav1.DeleteOptions{}, &metav1.DeleteOptions{},
) )
View File
+26 -26
View File
@@ -26,7 +26,7 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/rest" "k8s.io/client-go/rest"
"github.com/fission/fission" fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
) )
func panicIf(err error) { func panicIf(err error) {
@@ -37,24 +37,24 @@ func panicIf(err error) {
func functionTests(crdClient *rest.RESTClient) { func functionTests(crdClient *rest.RESTClient) {
// sample function object // sample function object
function := &Function{ function := &fv1.Function{
TypeMeta: metav1.TypeMeta{ TypeMeta: metav1.TypeMeta{
Kind: "Function", Kind: "Function",
APIVersion: "fission.io/v1", APIVersion: "fv1.io/v1",
}, },
Metadata: metav1.ObjectMeta{ Metadata: metav1.ObjectMeta{
Name: "hello", Name: "hello",
Namespace: metav1.NamespaceDefault, Namespace: metav1.NamespaceDefault,
}, },
Spec: fission.FunctionSpec{ Spec: fv1.FunctionSpec{
Package: fission.FunctionPackageRef{ Package: fv1.FunctionPackageRef{
PackageRef: fission.PackageRef{ PackageRef: fv1.PackageRef{
Name: "foo", Name: "foo",
Namespace: "bar", Namespace: "bar",
}, },
FunctionName: "hello", FunctionName: "hello",
}, },
Environment: fission.EnvironmentReference{ Environment: fv1.EnvironmentReference{
Name: "xxx", Name: "xxx",
}, },
}, },
@@ -122,7 +122,7 @@ func functionTests(crdClient *rest.RESTClient) {
log.Panicf("Didn't get watch event") log.Panicf("Didn't get watch event")
} }
case ev := <-wi.ResultChan(): case ev := <-wi.ResultChan():
wf, ok := ev.Object.(*Function) wf, ok := ev.Object.(*fv1.Function)
if !ok { if !ok {
log.Panicf("Can't cast to Function") log.Panicf("Can't cast to Function")
} }
@@ -137,20 +137,20 @@ func functionTests(crdClient *rest.RESTClient) {
func environmentTests(crdClient *rest.RESTClient) { func environmentTests(crdClient *rest.RESTClient) {
// sample environment object // sample environment object
environment := &Environment{ environment := &fv1.Environment{
TypeMeta: metav1.TypeMeta{ TypeMeta: metav1.TypeMeta{
Kind: "Environment", Kind: "Environment",
APIVersion: "fission.io/v1", APIVersion: "fv1.io/v1",
}, },
Metadata: metav1.ObjectMeta{ Metadata: metav1.ObjectMeta{
Name: "hello", Name: "hello",
Namespace: metav1.NamespaceDefault, Namespace: metav1.NamespaceDefault,
}, },
Spec: fission.EnvironmentSpec{ Spec: fv1.EnvironmentSpec{
Runtime: fission.Runtime{ Runtime: fv1.Runtime{
Image: "xxx", Image: "xxx",
}, },
Builder: fission.Builder{ Builder: fv1.Builder{
Image: "yyy", Image: "yyy",
Command: "zzz", Command: "zzz",
}, },
@@ -215,7 +215,7 @@ func environmentTests(crdClient *rest.RESTClient) {
log.Panicf("Didn't get watch event") log.Panicf("Didn't get watch event")
} }
case ev := <-wi.ResultChan(): case ev := <-wi.ResultChan():
obj, ok := ev.Object.(*Environment) obj, ok := ev.Object.(*fv1.Environment)
if !ok { if !ok {
log.Panicf("Can't cast to Environment") log.Panicf("Can't cast to Environment")
} }
@@ -230,20 +230,20 @@ func environmentTests(crdClient *rest.RESTClient) {
func httpTriggerTests(crdClient *rest.RESTClient) { func httpTriggerTests(crdClient *rest.RESTClient) {
// sample httpTrigger object // sample httpTrigger object
httpTrigger := &HTTPTrigger{ httpTrigger := &fv1.HTTPTrigger{
TypeMeta: metav1.TypeMeta{ TypeMeta: metav1.TypeMeta{
Kind: "HTTPTrigger", Kind: "HTTPTrigger",
APIVersion: "fission.io/v1", APIVersion: "fv1.io/v1",
}, },
Metadata: metav1.ObjectMeta{ Metadata: metav1.ObjectMeta{
Name: "hello", Name: "hello",
Namespace: metav1.NamespaceDefault, Namespace: metav1.NamespaceDefault,
}, },
Spec: fission.HTTPTriggerSpec{ Spec: fv1.HTTPTriggerSpec{
RelativeURL: "/hi", RelativeURL: "/hi",
Method: "GET", Method: "GET",
FunctionReference: fission.FunctionReference{ FunctionReference: fv1.FunctionReference{
Type: fission.FunctionReferenceTypeFunctionName, Type: fv1.FunctionReferenceTypeFunctionName,
Name: "hello", Name: "hello",
}, },
}, },
@@ -307,7 +307,7 @@ func httpTriggerTests(crdClient *rest.RESTClient) {
log.Panicf("Didn't get watch event") log.Panicf("Didn't get watch event")
} }
case ev := <-wi.ResultChan(): case ev := <-wi.ResultChan():
obj, ok := ev.Object.(*HTTPTrigger) obj, ok := ev.Object.(*fv1.HTTPTrigger)
if !ok { if !ok {
log.Panicf("Can't cast to HTTPTrigger") log.Panicf("Can't cast to HTTPTrigger")
} }
@@ -322,23 +322,23 @@ func httpTriggerTests(crdClient *rest.RESTClient) {
func kubernetesWatchTriggerTests(crdClient *rest.RESTClient) { func kubernetesWatchTriggerTests(crdClient *rest.RESTClient) {
// sample kubernetesWatchTrigger object // sample kubernetesWatchTrigger object
kubernetesWatchTrigger := &KubernetesWatchTrigger{ kubernetesWatchTrigger := &fv1.KubernetesWatchTrigger{
TypeMeta: metav1.TypeMeta{ TypeMeta: metav1.TypeMeta{
Kind: "KubernetesWatchTrigger", Kind: "KubernetesWatchTrigger",
APIVersion: "fission.io/v1", APIVersion: "fv1.io/v1",
}, },
Metadata: metav1.ObjectMeta{ Metadata: metav1.ObjectMeta{
Name: "hello", Name: "hello",
Namespace: metav1.NamespaceDefault, Namespace: metav1.NamespaceDefault,
}, },
Spec: fission.KubernetesWatchTriggerSpec{ Spec: fv1.KubernetesWatchTriggerSpec{
Namespace: "foo", Namespace: "foo",
Type: "pod", Type: "pod",
LabelSelector: map[string]string{ LabelSelector: map[string]string{
"x": "y", "x": "y",
}, },
FunctionReference: fission.FunctionReference{ FunctionReference: fv1.FunctionReference{
Type: fission.FunctionReferenceTypeFunctionName, Type: fv1.FunctionReferenceTypeFunctionName,
Name: "foo", Name: "foo",
}, },
}, },
@@ -402,7 +402,7 @@ func kubernetesWatchTriggerTests(crdClient *rest.RESTClient) {
log.Panicf("Didn't get watch event") log.Panicf("Didn't get watch event")
} }
case ev := <-wi.ResultChan(): case ev := <-wi.ResultChan():
obj, ok := ev.Object.(*KubernetesWatchTrigger) obj, ok := ev.Object.(*fv1.KubernetesWatchTrigger)
if !ok { if !ok {
log.Panicf("Can't cast to KubernetesWatchTrigger") log.Panicf("Can't cast to KubernetesWatchTrigger")
} }
+14 -12
View File
@@ -21,15 +21,17 @@ import (
"k8s.io/apimachinery/pkg/watch" "k8s.io/apimachinery/pkg/watch"
"k8s.io/client-go/kubernetes/scheme" "k8s.io/client-go/kubernetes/scheme"
"k8s.io/client-go/rest" "k8s.io/client-go/rest"
fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
) )
type ( type (
EnvironmentInterface interface { EnvironmentInterface interface {
Create(*Environment) (*Environment, error) Create(*fv1.Environment) (*fv1.Environment, error)
Get(name string) (*Environment, error) Get(name string) (*fv1.Environment, error)
Update(*Environment) (*Environment, error) Update(*fv1.Environment) (*fv1.Environment, error)
Delete(name string, options *metav1.DeleteOptions) error Delete(name string, options *metav1.DeleteOptions) error
List(opts metav1.ListOptions) (*EnvironmentList, error) List(opts metav1.ListOptions) (*fv1.EnvironmentList, error)
Watch(opts metav1.ListOptions) (watch.Interface, error) Watch(opts metav1.ListOptions) (watch.Interface, error)
} }
@@ -46,8 +48,8 @@ func MakeEnvironmentInterface(crdClient *rest.RESTClient, namespace string) Envi
} }
} }
func (ec *environmentClient) Create(e *Environment) (*Environment, error) { func (ec *environmentClient) Create(e *fv1.Environment) (*fv1.Environment, error) {
var result Environment var result fv1.Environment
err := ec.client.Post(). err := ec.client.Post().
Resource("environments"). Resource("environments").
Namespace(ec.namespace). Namespace(ec.namespace).
@@ -59,8 +61,8 @@ func (ec *environmentClient) Create(e *Environment) (*Environment, error) {
return &result, nil return &result, nil
} }
func (ec *environmentClient) Get(name string) (*Environment, error) { func (ec *environmentClient) Get(name string) (*fv1.Environment, error) {
var result Environment var result fv1.Environment
err := ec.client.Get(). err := ec.client.Get().
Resource("environments"). Resource("environments").
Namespace(ec.namespace). Namespace(ec.namespace).
@@ -72,8 +74,8 @@ func (ec *environmentClient) Get(name string) (*Environment, error) {
return &result, nil return &result, nil
} }
func (ec *environmentClient) Update(e *Environment) (*Environment, error) { func (ec *environmentClient) Update(e *fv1.Environment) (*fv1.Environment, error) {
var result Environment var result fv1.Environment
err := ec.client.Put(). err := ec.client.Put().
Resource("environments"). Resource("environments").
Namespace(ec.namespace). Namespace(ec.namespace).
@@ -96,8 +98,8 @@ func (ec *environmentClient) Delete(name string, opts *metav1.DeleteOptions) err
Error() Error()
} }
func (ec *environmentClient) List(opts metav1.ListOptions) (*EnvironmentList, error) { func (ec *environmentClient) List(opts metav1.ListOptions) (*fv1.EnvironmentList, error) {
var result EnvironmentList var result fv1.EnvironmentList
err := ec.client.Get(). err := ec.client.Get().
Namespace(ec.namespace). Namespace(ec.namespace).
Resource("environments"). Resource("environments").
+14 -12
View File
@@ -21,15 +21,17 @@ import (
"k8s.io/apimachinery/pkg/watch" "k8s.io/apimachinery/pkg/watch"
"k8s.io/client-go/kubernetes/scheme" "k8s.io/client-go/kubernetes/scheme"
"k8s.io/client-go/rest" "k8s.io/client-go/rest"
fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
) )
type ( type (
FunctionInterface interface { FunctionInterface interface {
Create(*Function) (*Function, error) Create(*fv1.Function) (*fv1.Function, error)
Get(name string) (*Function, error) Get(name string) (*fv1.Function, error)
Update(*Function) (*Function, error) Update(*fv1.Function) (*fv1.Function, error)
Delete(name string, options *metav1.DeleteOptions) error Delete(name string, options *metav1.DeleteOptions) error
List(opts metav1.ListOptions) (*FunctionList, error) List(opts metav1.ListOptions) (*fv1.FunctionList, error)
Watch(opts metav1.ListOptions) (watch.Interface, error) Watch(opts metav1.ListOptions) (watch.Interface, error)
} }
@@ -46,8 +48,8 @@ func MakeFunctionInterface(crdClient *rest.RESTClient, namespace string) Functio
} }
} }
func (fc *functionClient) Create(f *Function) (*Function, error) { func (fc *functionClient) Create(f *fv1.Function) (*fv1.Function, error) {
var result Function var result fv1.Function
err := fc.client.Post(). err := fc.client.Post().
Resource("functions"). Resource("functions").
Namespace(fc.namespace). Namespace(fc.namespace).
@@ -59,8 +61,8 @@ func (fc *functionClient) Create(f *Function) (*Function, error) {
return &result, nil return &result, nil
} }
func (fc *functionClient) Get(name string) (*Function, error) { func (fc *functionClient) Get(name string) (*fv1.Function, error) {
var result Function var result fv1.Function
err := fc.client.Get(). err := fc.client.Get().
Resource("functions"). Resource("functions").
Namespace(fc.namespace). Namespace(fc.namespace).
@@ -72,8 +74,8 @@ func (fc *functionClient) Get(name string) (*Function, error) {
return &result, nil return &result, nil
} }
func (fc *functionClient) Update(f *Function) (*Function, error) { func (fc *functionClient) Update(f *fv1.Function) (*fv1.Function, error) {
var result Function var result fv1.Function
err := fc.client.Put(). err := fc.client.Put().
Resource("functions"). Resource("functions").
Namespace(fc.namespace). Namespace(fc.namespace).
@@ -96,8 +98,8 @@ func (fc *functionClient) Delete(name string, opts *metav1.DeleteOptions) error
Error() Error()
} }
func (fc *functionClient) List(opts metav1.ListOptions) (*FunctionList, error) { func (fc *functionClient) List(opts metav1.ListOptions) (*fv1.FunctionList, error) {
var result FunctionList var result fv1.FunctionList
err := fc.client.Get(). err := fc.client.Get().
Namespace(fc.namespace). Namespace(fc.namespace).
Resource("functions"). Resource("functions").
+14 -12
View File
@@ -21,15 +21,17 @@ import (
"k8s.io/apimachinery/pkg/watch" "k8s.io/apimachinery/pkg/watch"
"k8s.io/client-go/kubernetes/scheme" "k8s.io/client-go/kubernetes/scheme"
"k8s.io/client-go/rest" "k8s.io/client-go/rest"
fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
) )
type ( type (
HTTPTriggerInterface interface { HTTPTriggerInterface interface {
Create(*HTTPTrigger) (*HTTPTrigger, error) Create(*fv1.HTTPTrigger) (*fv1.HTTPTrigger, error)
Get(name string) (*HTTPTrigger, error) Get(name string) (*fv1.HTTPTrigger, error)
Update(*HTTPTrigger) (*HTTPTrigger, error) Update(*fv1.HTTPTrigger) (*fv1.HTTPTrigger, error)
Delete(name string, options *metav1.DeleteOptions) error Delete(name string, options *metav1.DeleteOptions) error
List(opts metav1.ListOptions) (*HTTPTriggerList, error) List(opts metav1.ListOptions) (*fv1.HTTPTriggerList, error)
Watch(opts metav1.ListOptions) (watch.Interface, error) Watch(opts metav1.ListOptions) (watch.Interface, error)
} }
@@ -46,8 +48,8 @@ func MakeHTTPTriggerInterface(crdClient *rest.RESTClient, namespace string) HTTP
} }
} }
func (c *httpTriggerClient) Create(obj *HTTPTrigger) (*HTTPTrigger, error) { func (c *httpTriggerClient) Create(obj *fv1.HTTPTrigger) (*fv1.HTTPTrigger, error) {
var result HTTPTrigger var result fv1.HTTPTrigger
err := c.client.Post(). err := c.client.Post().
Resource("httptriggers"). Resource("httptriggers").
Namespace(c.namespace). Namespace(c.namespace).
@@ -59,8 +61,8 @@ func (c *httpTriggerClient) Create(obj *HTTPTrigger) (*HTTPTrigger, error) {
return &result, nil return &result, nil
} }
func (c *httpTriggerClient) Get(name string) (*HTTPTrigger, error) { func (c *httpTriggerClient) Get(name string) (*fv1.HTTPTrigger, error) {
var result HTTPTrigger var result fv1.HTTPTrigger
err := c.client.Get(). err := c.client.Get().
Resource("httptriggers"). Resource("httptriggers").
Namespace(c.namespace). Namespace(c.namespace).
@@ -72,8 +74,8 @@ func (c *httpTriggerClient) Get(name string) (*HTTPTrigger, error) {
return &result, nil return &result, nil
} }
func (c *httpTriggerClient) Update(obj *HTTPTrigger) (*HTTPTrigger, error) { func (c *httpTriggerClient) Update(obj *fv1.HTTPTrigger) (*fv1.HTTPTrigger, error) {
var result HTTPTrigger var result fv1.HTTPTrigger
err := c.client.Put(). err := c.client.Put().
Resource("httptriggers"). Resource("httptriggers").
Namespace(c.namespace). Namespace(c.namespace).
@@ -96,8 +98,8 @@ func (c *httpTriggerClient) Delete(name string, opts *metav1.DeleteOptions) erro
Error() Error()
} }
func (c *httpTriggerClient) List(opts metav1.ListOptions) (*HTTPTriggerList, error) { func (c *httpTriggerClient) List(opts metav1.ListOptions) (*fv1.HTTPTriggerList, error) {
var result HTTPTriggerList var result fv1.HTTPTriggerList
err := c.client.Get(). err := c.client.Get().
Namespace(c.namespace). Namespace(c.namespace).
Resource("httptriggers"). Resource("httptriggers").
View File
@@ -21,15 +21,17 @@ import (
"k8s.io/apimachinery/pkg/watch" "k8s.io/apimachinery/pkg/watch"
"k8s.io/client-go/kubernetes/scheme" "k8s.io/client-go/kubernetes/scheme"
"k8s.io/client-go/rest" "k8s.io/client-go/rest"
fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
) )
type ( type (
KubernetesWatchTriggerInterface interface { KubernetesWatchTriggerInterface interface {
Create(*KubernetesWatchTrigger) (*KubernetesWatchTrigger, error) Create(*fv1.KubernetesWatchTrigger) (*fv1.KubernetesWatchTrigger, error)
Get(name string) (*KubernetesWatchTrigger, error) Get(name string) (*fv1.KubernetesWatchTrigger, error)
Update(*KubernetesWatchTrigger) (*KubernetesWatchTrigger, error) Update(*fv1.KubernetesWatchTrigger) (*fv1.KubernetesWatchTrigger, error)
Delete(name string, options *metav1.DeleteOptions) error Delete(name string, options *metav1.DeleteOptions) error
List(opts metav1.ListOptions) (*KubernetesWatchTriggerList, error) List(opts metav1.ListOptions) (*fv1.KubernetesWatchTriggerList, error)
Watch(opts metav1.ListOptions) (watch.Interface, error) Watch(opts metav1.ListOptions) (watch.Interface, error)
} }
@@ -46,8 +48,8 @@ func MakeKubernetesWatchTriggerInterface(crdClient *rest.RESTClient, namespace s
} }
} }
func (c *kubernetesWatchTriggerClient) Create(obj *KubernetesWatchTrigger) (*KubernetesWatchTrigger, error) { func (c *kubernetesWatchTriggerClient) Create(obj *fv1.KubernetesWatchTrigger) (*fv1.KubernetesWatchTrigger, error) {
var result KubernetesWatchTrigger var result fv1.KubernetesWatchTrigger
err := c.client.Post(). err := c.client.Post().
Resource("kuberneteswatchtriggers"). Resource("kuberneteswatchtriggers").
Namespace(c.namespace). Namespace(c.namespace).
@@ -59,8 +61,8 @@ func (c *kubernetesWatchTriggerClient) Create(obj *KubernetesWatchTrigger) (*Kub
return &result, nil return &result, nil
} }
func (c *kubernetesWatchTriggerClient) Get(name string) (*KubernetesWatchTrigger, error) { func (c *kubernetesWatchTriggerClient) Get(name string) (*fv1.KubernetesWatchTrigger, error) {
var result KubernetesWatchTrigger var result fv1.KubernetesWatchTrigger
err := c.client.Get(). err := c.client.Get().
Resource("kuberneteswatchtriggers"). Resource("kuberneteswatchtriggers").
Namespace(c.namespace). Namespace(c.namespace).
@@ -72,8 +74,8 @@ func (c *kubernetesWatchTriggerClient) Get(name string) (*KubernetesWatchTrigger
return &result, nil return &result, nil
} }
func (c *kubernetesWatchTriggerClient) Update(obj *KubernetesWatchTrigger) (*KubernetesWatchTrigger, error) { func (c *kubernetesWatchTriggerClient) Update(obj *fv1.KubernetesWatchTrigger) (*fv1.KubernetesWatchTrigger, error) {
var result KubernetesWatchTrigger var result fv1.KubernetesWatchTrigger
err := c.client.Put(). err := c.client.Put().
Resource("kuberneteswatchtriggers"). Resource("kuberneteswatchtriggers").
Namespace(c.namespace). Namespace(c.namespace).
@@ -96,8 +98,8 @@ func (c *kubernetesWatchTriggerClient) Delete(name string, opts *metav1.DeleteOp
Error() Error()
} }
func (c *kubernetesWatchTriggerClient) List(opts metav1.ListOptions) (*KubernetesWatchTriggerList, error) { func (c *kubernetesWatchTriggerClient) List(opts metav1.ListOptions) (*fv1.KubernetesWatchTriggerList, error) {
var result KubernetesWatchTriggerList var result fv1.KubernetesWatchTriggerList
err := c.client.Get(). err := c.client.Get().
Namespace(c.namespace). Namespace(c.namespace).
Resource("kuberneteswatchtriggers"). Resource("kuberneteswatchtriggers").
@@ -21,15 +21,17 @@ import (
"k8s.io/apimachinery/pkg/watch" "k8s.io/apimachinery/pkg/watch"
"k8s.io/client-go/kubernetes/scheme" "k8s.io/client-go/kubernetes/scheme"
"k8s.io/client-go/rest" "k8s.io/client-go/rest"
fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
) )
type ( type (
MessageQueueTriggerInterface interface { MessageQueueTriggerInterface interface {
Create(*MessageQueueTrigger) (*MessageQueueTrigger, error) Create(*fv1.MessageQueueTrigger) (*fv1.MessageQueueTrigger, error)
Get(name string) (*MessageQueueTrigger, error) Get(name string) (*fv1.MessageQueueTrigger, error)
Update(*MessageQueueTrigger) (*MessageQueueTrigger, error) Update(*fv1.MessageQueueTrigger) (*fv1.MessageQueueTrigger, error)
Delete(name string, options *metav1.DeleteOptions) error Delete(name string, options *metav1.DeleteOptions) error
List(opts metav1.ListOptions) (*MessageQueueTriggerList, error) List(opts metav1.ListOptions) (*fv1.MessageQueueTriggerList, error)
Watch(opts metav1.ListOptions) (watch.Interface, error) Watch(opts metav1.ListOptions) (watch.Interface, error)
} }
@@ -46,8 +48,8 @@ func MakeMessageQueueTriggerInterface(crdClient *rest.RESTClient, namespace stri
} }
} }
func (fc *messageQueueTriggerClient) Create(f *MessageQueueTrigger) (*MessageQueueTrigger, error) { func (fc *messageQueueTriggerClient) Create(f *fv1.MessageQueueTrigger) (*fv1.MessageQueueTrigger, error) {
var result MessageQueueTrigger var result fv1.MessageQueueTrigger
err := fc.client.Post(). err := fc.client.Post().
Resource("messagequeuetriggers"). Resource("messagequeuetriggers").
Namespace(fc.namespace). Namespace(fc.namespace).
@@ -59,8 +61,8 @@ func (fc *messageQueueTriggerClient) Create(f *MessageQueueTrigger) (*MessageQue
return &result, nil return &result, nil
} }
func (fc *messageQueueTriggerClient) Get(name string) (*MessageQueueTrigger, error) { func (fc *messageQueueTriggerClient) Get(name string) (*fv1.MessageQueueTrigger, error) {
var result MessageQueueTrigger var result fv1.MessageQueueTrigger
err := fc.client.Get(). err := fc.client.Get().
Resource("messagequeuetriggers"). Resource("messagequeuetriggers").
Namespace(fc.namespace). Namespace(fc.namespace).
@@ -72,8 +74,8 @@ func (fc *messageQueueTriggerClient) Get(name string) (*MessageQueueTrigger, err
return &result, nil return &result, nil
} }
func (fc *messageQueueTriggerClient) Update(f *MessageQueueTrigger) (*MessageQueueTrigger, error) { func (fc *messageQueueTriggerClient) Update(f *fv1.MessageQueueTrigger) (*fv1.MessageQueueTrigger, error) {
var result MessageQueueTrigger var result fv1.MessageQueueTrigger
err := fc.client.Put(). err := fc.client.Put().
Resource("messagequeuetriggers"). Resource("messagequeuetriggers").
Namespace(fc.namespace). Namespace(fc.namespace).
@@ -96,8 +98,8 @@ func (fc *messageQueueTriggerClient) Delete(name string, opts *metav1.DeleteOpti
Error() Error()
} }
func (fc *messageQueueTriggerClient) List(opts metav1.ListOptions) (*MessageQueueTriggerList, error) { func (fc *messageQueueTriggerClient) List(opts metav1.ListOptions) (*fv1.MessageQueueTriggerList, error) {
var result MessageQueueTriggerList var result fv1.MessageQueueTriggerList
err := fc.client.Get(). err := fc.client.Get().
Namespace(fc.namespace). Namespace(fc.namespace).
Resource("messagequeuetriggers"). Resource("messagequeuetriggers").
+14 -12
View File
@@ -21,15 +21,17 @@ import (
"k8s.io/apimachinery/pkg/watch" "k8s.io/apimachinery/pkg/watch"
"k8s.io/client-go/kubernetes/scheme" "k8s.io/client-go/kubernetes/scheme"
"k8s.io/client-go/rest" "k8s.io/client-go/rest"
fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
) )
type ( type (
PackageInterface interface { PackageInterface interface {
Create(*Package) (*Package, error) Create(*fv1.Package) (*fv1.Package, error)
Get(name string) (*Package, error) Get(name string) (*fv1.Package, error)
Update(*Package) (*Package, error) Update(*fv1.Package) (*fv1.Package, error)
Delete(name string, options *metav1.DeleteOptions) error Delete(name string, options *metav1.DeleteOptions) error
List(opts metav1.ListOptions) (*PackageList, error) List(opts metav1.ListOptions) (*fv1.PackageList, error)
Watch(opts metav1.ListOptions) (watch.Interface, error) Watch(opts metav1.ListOptions) (watch.Interface, error)
} }
@@ -46,8 +48,8 @@ func MakePackageInterface(crdClient *rest.RESTClient, namespace string) PackageI
} }
} }
func (c *packageClient) Create(f *Package) (*Package, error) { func (c *packageClient) Create(f *fv1.Package) (*fv1.Package, error) {
var result Package var result fv1.Package
err := c.client.Post(). err := c.client.Post().
Resource("packages"). Resource("packages").
Namespace(c.namespace). Namespace(c.namespace).
@@ -59,8 +61,8 @@ func (c *packageClient) Create(f *Package) (*Package, error) {
return &result, nil return &result, nil
} }
func (c *packageClient) Get(name string) (*Package, error) { func (c *packageClient) Get(name string) (*fv1.Package, error) {
var result Package var result fv1.Package
err := c.client.Get(). err := c.client.Get().
Resource("packages"). Resource("packages").
Namespace(c.namespace). Namespace(c.namespace).
@@ -72,8 +74,8 @@ func (c *packageClient) Get(name string) (*Package, error) {
return &result, nil return &result, nil
} }
func (c *packageClient) Update(f *Package) (*Package, error) { func (c *packageClient) Update(f *fv1.Package) (*fv1.Package, error) {
var result Package var result fv1.Package
err := c.client.Put(). err := c.client.Put().
Resource("packages"). Resource("packages").
Namespace(c.namespace). Namespace(c.namespace).
@@ -96,8 +98,8 @@ func (c *packageClient) Delete(name string, opts *metav1.DeleteOptions) error {
Error() Error()
} }
func (c *packageClient) List(opts metav1.ListOptions) (*PackageList, error) { func (c *packageClient) List(opts metav1.ListOptions) (*fv1.PackageList, error) {
var result PackageList var result fv1.PackageList
err := c.client.Get(). err := c.client.Get().
Namespace(c.namespace). Namespace(c.namespace).
Resource("packages"). Resource("packages").
+14 -12
View File
@@ -21,15 +21,17 @@ import (
"k8s.io/apimachinery/pkg/watch" "k8s.io/apimachinery/pkg/watch"
"k8s.io/client-go/kubernetes/scheme" "k8s.io/client-go/kubernetes/scheme"
"k8s.io/client-go/rest" "k8s.io/client-go/rest"
fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
) )
type ( type (
RecorderInterface interface { RecorderInterface interface {
Create(*Recorder) (*Recorder, error) Create(*fv1.Recorder) (*fv1.Recorder, error)
Get(name string) (*Recorder, error) Get(name string) (*fv1.Recorder, error)
Update(*Recorder) (*Recorder, error) Update(*fv1.Recorder) (*fv1.Recorder, error)
Delete(name string, opts *metav1.DeleteOptions) error Delete(name string, opts *metav1.DeleteOptions) error
List(opts metav1.ListOptions) (*RecorderList, error) List(opts metav1.ListOptions) (*fv1.RecorderList, error)
Watch(opts metav1.ListOptions) (watch.Interface, error) Watch(opts metav1.ListOptions) (watch.Interface, error)
} }
@@ -46,8 +48,8 @@ func MakeRecorderInterface(crdClient *rest.RESTClient, namespace string) Recorde
} }
} }
func (rc *recorderClient) Create(r *Recorder) (*Recorder, error) { func (rc *recorderClient) Create(r *fv1.Recorder) (*fv1.Recorder, error) {
var result Recorder var result fv1.Recorder
err := rc.client.Post(). err := rc.client.Post().
Resource("recorders"). Resource("recorders").
Namespace("default"). Namespace("default").
@@ -59,8 +61,8 @@ func (rc *recorderClient) Create(r *Recorder) (*Recorder, error) {
return &result, nil return &result, nil
} }
func (rc *recorderClient) Get(name string) (*Recorder, error) { func (rc *recorderClient) Get(name string) (*fv1.Recorder, error) {
var result Recorder var result fv1.Recorder
err := rc.client.Get(). err := rc.client.Get().
Resource("recorders"). Resource("recorders").
Namespace(rc.namespace). Namespace(rc.namespace).
@@ -72,8 +74,8 @@ func (rc *recorderClient) Get(name string) (*Recorder, error) {
return &result, nil return &result, nil
} }
func (rc *recorderClient) Update(r *Recorder) (*Recorder, error) { func (rc *recorderClient) Update(r *fv1.Recorder) (*fv1.Recorder, error) {
var result Recorder var result fv1.Recorder
err := rc.client.Put(). err := rc.client.Put().
Resource("recorders"). Resource("recorders").
Namespace(rc.namespace). Namespace(rc.namespace).
@@ -96,8 +98,8 @@ func (rc *recorderClient) Delete(name string, opts *metav1.DeleteOptions) error
Error() Error()
} }
func (rc *recorderClient) List(opts metav1.ListOptions) (*RecorderList, error) { func (rc *recorderClient) List(opts metav1.ListOptions) (*fv1.RecorderList, error) {
var result RecorderList var result fv1.RecorderList
err := rc.client.Get(). err := rc.client.Get().
Namespace(rc.namespace). Namespace(rc.namespace).
Resource("recorders"). Resource("recorders").
+14 -12
View File
@@ -21,15 +21,17 @@ import (
"k8s.io/apimachinery/pkg/watch" "k8s.io/apimachinery/pkg/watch"
"k8s.io/client-go/kubernetes/scheme" "k8s.io/client-go/kubernetes/scheme"
"k8s.io/client-go/rest" "k8s.io/client-go/rest"
fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
) )
type ( type (
TimeTriggerInterface interface { TimeTriggerInterface interface {
Create(*TimeTrigger) (*TimeTrigger, error) Create(*fv1.TimeTrigger) (*fv1.TimeTrigger, error)
Get(name string) (*TimeTrigger, error) Get(name string) (*fv1.TimeTrigger, error)
Update(*TimeTrigger) (*TimeTrigger, error) Update(*fv1.TimeTrigger) (*fv1.TimeTrigger, error)
Delete(name string, options *metav1.DeleteOptions) error Delete(name string, options *metav1.DeleteOptions) error
List(opts metav1.ListOptions) (*TimeTriggerList, error) List(opts metav1.ListOptions) (*fv1.TimeTriggerList, error)
Watch(opts metav1.ListOptions) (watch.Interface, error) Watch(opts metav1.ListOptions) (watch.Interface, error)
} }
@@ -46,8 +48,8 @@ func MakeTimeTriggerInterface(crdClient *rest.RESTClient, namespace string) Time
} }
} }
func (fc *timeTriggerClient) Create(f *TimeTrigger) (*TimeTrigger, error) { func (fc *timeTriggerClient) Create(f *fv1.TimeTrigger) (*fv1.TimeTrigger, error) {
var result TimeTrigger var result fv1.TimeTrigger
err := fc.client.Post(). err := fc.client.Post().
Resource("timetriggers"). Resource("timetriggers").
Namespace(fc.namespace). Namespace(fc.namespace).
@@ -59,8 +61,8 @@ func (fc *timeTriggerClient) Create(f *TimeTrigger) (*TimeTrigger, error) {
return &result, nil return &result, nil
} }
func (fc *timeTriggerClient) Get(name string) (*TimeTrigger, error) { func (fc *timeTriggerClient) Get(name string) (*fv1.TimeTrigger, error) {
var result TimeTrigger var result fv1.TimeTrigger
err := fc.client.Get(). err := fc.client.Get().
Resource("timetriggers"). Resource("timetriggers").
Namespace(fc.namespace). Namespace(fc.namespace).
@@ -72,8 +74,8 @@ func (fc *timeTriggerClient) Get(name string) (*TimeTrigger, error) {
return &result, nil return &result, nil
} }
func (fc *timeTriggerClient) Update(f *TimeTrigger) (*TimeTrigger, error) { func (fc *timeTriggerClient) Update(f *fv1.TimeTrigger) (*fv1.TimeTrigger, error) {
var result TimeTrigger var result fv1.TimeTrigger
err := fc.client.Put(). err := fc.client.Put().
Resource("timetriggers"). Resource("timetriggers").
Namespace(fc.namespace). Namespace(fc.namespace).
@@ -96,8 +98,8 @@ func (fc *timeTriggerClient) Delete(name string, opts *metav1.DeleteOptions) err
Error() Error()
} }
func (fc *timeTriggerClient) List(opts metav1.ListOptions) (*TimeTriggerList, error) { func (fc *timeTriggerClient) List(opts metav1.ListOptions) (*fv1.TimeTriggerList, error) {
var result TimeTriggerList var result fv1.TimeTriggerList
err := fc.client.Get(). err := fc.client.Get().
Namespace(fc.namespace). Namespace(fc.namespace).
Resource("timetriggers"). Resource("timetriggers").
+37 -1
View File
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package fission package error
import ( import (
"fmt" "fmt"
@@ -23,6 +23,16 @@ import (
"strings" "strings"
) )
type (
// Errors returned by the Fission API.
Error struct {
Code errorCode `json:"code"`
Message string `json:"message"`
}
errorCode int
)
func (err Error) Error() string { func (err Error) Error() string {
return fmt.Sprintf("%v - %v", err.Description(), err.Message) return fmt.Sprintf("%v - %v", err.Description(), err.Message)
} }
@@ -98,3 +108,29 @@ func (err Error) Description() string {
} }
return errorDescriptions[idx] return errorDescriptions[idx]
} }
const (
ErrorInternal = iota
ErrorNotAuthorized
ErrorNotFound
ErrorNameExists
ErrorInvalidArgument
ErrorNoSpace
ErrorNotImplmented
ErrorChecksumFail
ErrorSizeLimitExceeded
)
// must match order and len of the above const
var errorDescriptions = []string{
"Internal error",
"Not authorized",
"Resource not found",
"Resource exists",
"Invalid argument",
"No space",
"Not implemented",
"Checksum verification failed",
"Size limit exceeded",
}
+4 -3
View File
@@ -24,12 +24,13 @@ import (
"net/http" "net/http"
"strings" "strings"
"github.com/fission/fission/pkg/utils"
"github.com/gorilla/mux" "github.com/gorilla/mux"
"go.opencensus.io/plugin/ochttp" "go.opencensus.io/plugin/ochttp"
"go.uber.org/zap" "go.uber.org/zap"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"github.com/fission/fission" ferror "github.com/fission/fission/pkg/error"
) )
func (executor *Executor) getServiceForFunctionApi(w http.ResponseWriter, r *http.Request) { func (executor *Executor) getServiceForFunctionApi(w http.ResponseWriter, r *http.Request) {
@@ -49,7 +50,7 @@ func (executor *Executor) getServiceForFunctionApi(w http.ResponseWriter, r *htt
serviceName, err := executor.getServiceForFunction(r.Context(), &m) serviceName, err := executor.getServiceForFunction(r.Context(), &m)
if err != nil { if err != nil {
code, msg := fission.GetHTTPError(err) code, msg := ferror.GetHTTPError(err)
executor.logger.Error("error getting service for function", executor.logger.Error("error getting service for function",
zap.Error(err), zap.Error(err),
zap.String("function", m.Name), zap.String("function", m.Name),
@@ -140,7 +141,7 @@ func (executor *Executor) Serve(port int) {
defer cancel() defer cancel()
executor.ndm.Run(ctx) executor.ndm.Run(ctx)
executor.gpm.Run(ctx) executor.gpm.Run(ctx)
r.Use(fission.LoggingMiddleware(executor.logger)) r.Use(utils.LoggingMiddleware(executor.logger))
err := http.ListenAndServe(address, &ochttp.Handler{ err := http.ListenAndServe(address, &ochttp.Handler{
Handler: r, Handler: r,
// Propagation: &b3.HTTPFormat{}, // Propagation: &b3.HTTPFormat{},
@@ -32,7 +32,7 @@ import (
"golang.org/x/net/context/ctxhttp" "golang.org/x/net/context/ctxhttp"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"github.com/fission/fission" ferror "github.com/fission/fission/pkg/error"
) )
type Client struct { type Client struct {
@@ -72,7 +72,7 @@ func (c *Client) GetServiceForFunction(ctx context.Context, metadata *metav1.Obj
defer resp.Body.Close() defer resp.Body.Close()
if resp.StatusCode != 200 { if resp.StatusCode != 200 {
return "", fission.MakeErrorFromHTTP(resp) return "", ferror.MakeErrorFromHTTP(resp)
} }
svcName, err := ioutil.ReadAll(resp.Body) svcName, err := ioutil.ReadAll(resp.Body)
@@ -120,7 +120,7 @@ func (c *Client) _tapService(serviceUrlStr string) error {
} }
defer resp.Body.Close() defer resp.Body.Close()
if resp.StatusCode != 200 { if resp.StatusCode != 200 {
return fission.MakeErrorFromHTTP(resp) return ferror.MakeErrorFromHTTP(resp)
} }
return nil return nil
} }
@@ -30,13 +30,14 @@ import (
"go.uber.org/zap" "go.uber.org/zap"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"github.com/fission/fission" fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
"github.com/fission/fission/crd" "github.com/fission/fission/pkg/crd"
fetcherConfig "github.com/fission/fission/environments/fetcher/config" "github.com/fission/fission/pkg/executor/fscache"
"github.com/fission/fission/executor/fscache" "github.com/fission/fission/pkg/executor/newdeploy"
"github.com/fission/fission/executor/newdeploy" "github.com/fission/fission/pkg/executor/poolmgr"
"github.com/fission/fission/executor/poolmgr" "github.com/fission/fission/pkg/executor/reaper"
"github.com/fission/fission/executor/reaper" fetcherConfig "github.com/fission/fission/pkg/fetcher/config"
"github.com/fission/fission/pkg/utils"
) )
type ( type (
@@ -137,7 +138,7 @@ func (executor *Executor) serveCreateFuncServices() {
} }
} }
func (executor *Executor) getFunctionExecutorType(meta *metav1.ObjectMeta) (fission.ExecutorType, error) { func (executor *Executor) getFunctionExecutorType(meta *metav1.ObjectMeta) (fv1.ExecutorType, error) {
fn, err := executor.fissionClient.Functions(meta.Namespace).Get(meta.Name) fn, err := executor.fissionClient.Functions(meta.Namespace).Get(meta.Name)
if err != nil { if err != nil {
return "", err return "", err
@@ -159,7 +160,7 @@ func (executor *Executor) createServiceForFunction(ctx context.Context, meta *me
var fsvcErr error var fsvcErr error
switch executorType { switch executorType {
case fission.ExecutorTypeNewdeploy: case fv1.ExecutorTypeNewdeploy:
fsvc, fsvcErr = executor.ndm.GetFuncSvc(ctx, meta) fsvc, fsvcErr = executor.ndm.GetFuncSvc(ctx, meta)
default: default:
fsvc, fsvcErr = executor.gpm.GetFuncSvc(ctx, meta) fsvc, fsvcErr = executor.gpm.GetFuncSvc(ctx, meta)
@@ -206,7 +207,7 @@ func serveMetric(logger *zap.Logger) {
// deploymgr and potential future executor types // deploymgr and potential future executor types
func StartExecutor(logger *zap.Logger, fissionNamespace string, functionNamespace string, envBuilderNamespace string, port int) error { func StartExecutor(logger *zap.Logger, fissionNamespace string, functionNamespace string, envBuilderNamespace string, port int) error {
// setup a signal handler for SIGTERM // setup a signal handler for SIGTERM
fission.SetupStackTraceHandler() utils.SetupStackTraceHandler()
fissionClient, kubernetesClient, _, err := crd.MakeFissionClient() fissionClient, kubernetesClient, _, err := crd.MakeFissionClient()
@@ -40,9 +40,9 @@ import (
"k8s.io/apimachinery/pkg/util/intstr" "k8s.io/apimachinery/pkg/util/intstr"
"k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes"
"github.com/fission/fission" fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
"github.com/fission/fission/crd" "github.com/fission/fission/pkg/crd"
"github.com/fission/fission/executor/client" "github.com/fission/fission/pkg/executor/client"
) )
func panicIf(err error) { func panicIf(err error) {
@@ -53,7 +53,7 @@ func panicIf(err error) {
// return the number of pods in the given namespace matching the given labels // return the number of pods in the given namespace matching the given labels
func countPods(kubeClient *kubernetes.Clientset, ns string, labelz map[string]string) int { func countPods(kubeClient *kubernetes.Clientset, ns string, labelz map[string]string) int {
pods, err := kubeClient.Pods(ns).List(metav1.ListOptions{ pods, err := kubeClient.CoreV1().Pods(ns).List(metav1.ListOptions{
LabelSelector: labels.Set(labelz).AsSelector().String(), LabelSelector: labels.Set(labelz).AsSelector().String(),
}) })
if err != nil { if err != nil {
@@ -63,7 +63,7 @@ func countPods(kubeClient *kubernetes.Clientset, ns string, labelz map[string]st
} }
func createTestNamespace(kubeClient *kubernetes.Clientset, ns string) { func createTestNamespace(kubeClient *kubernetes.Clientset, ns string) {
_, err := kubeClient.Namespaces().Create(&apiv1.Namespace{ _, err := kubeClient.CoreV1().Namespaces().Create(&apiv1.Namespace{
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: ns, Name: ns,
}, },
@@ -76,7 +76,7 @@ func createTestNamespace(kubeClient *kubernetes.Clientset, ns string) {
// create a nodeport service // create a nodeport service
func createSvc(kubeClient *kubernetes.Clientset, ns string, name string, targetPort int, nodePort int32, labels map[string]string) *apiv1.Service { func createSvc(kubeClient *kubernetes.Clientset, ns string, name string, targetPort int, nodePort int32, labels map[string]string) *apiv1.Service {
svc, err := kubeClient.Services(ns).Create(&apiv1.Service{ svc, err := kubeClient.CoreV1().Services(ns).Create(&apiv1.Service{
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: name, Name: name,
}, },
@@ -136,10 +136,10 @@ func TestExecutor(t *testing.T) {
// create the test's namespaces // create the test's namespaces
createTestNamespace(kubeClient, fissionNs) createTestNamespace(kubeClient, fissionNs)
defer kubeClient.Namespaces().Delete(fissionNs, nil) defer kubeClient.CoreV1().Namespaces().Delete(fissionNs, nil)
createTestNamespace(kubeClient, functionNs) createTestNamespace(kubeClient, functionNs)
defer kubeClient.Namespaces().Delete(functionNs, nil) defer kubeClient.CoreV1().Namespaces().Delete(functionNs, nil)
logger, err := zap.NewDevelopment() logger, err := zap.NewDevelopment()
panicIf(err) panicIf(err)
@@ -156,17 +156,17 @@ func TestExecutor(t *testing.T) {
} }
// create an env on the cluster // create an env on the cluster
env, err := fissionClient.Environments(fissionNs).Create(&crd.Environment{ env, err := fissionClient.Environments(fissionNs).Create(&fv1.Environment{
Metadata: metav1.ObjectMeta{ Metadata: metav1.ObjectMeta{
Name: "nodejs", Name: "nodejs",
Namespace: fissionNs, Namespace: fissionNs,
}, },
Spec: fission.EnvironmentSpec{ Spec: fv1.EnvironmentSpec{
Version: 1, Version: 1,
Runtime: fission.Runtime{ Runtime: fv1.Runtime{
Image: "fission/node-env", Image: "fission/node-env",
}, },
Builder: fission.Builder{}, Builder: fv1.Builder{},
}, },
}) })
if err != nil { if err != nil {
@@ -188,23 +188,23 @@ func TestExecutor(t *testing.T) {
// waitForPool(functionNs, "nodejs") // waitForPool(functionNs, "nodejs")
time.Sleep(6 * time.Second) time.Sleep(6 * time.Second)
envRef := fission.EnvironmentReference{ envRef := fv1.EnvironmentReference{
Namespace: env.Metadata.Namespace, Namespace: env.Metadata.Namespace,
Name: env.Metadata.Name, Name: env.Metadata.Name,
} }
deployment := fission.Archive{ deployment := fv1.Archive{
Type: fission.ArchiveTypeLiteral, Type: fv1.ArchiveTypeLiteral,
Literal: []byte(`module.exports = async function(context) { return { status: 200, body: "Hello, world!\n" }; }`), Literal: []byte(`module.exports = async function(context) { return { status: 200, body: "Hello, world!\n" }; }`),
} }
// create a package // create a package
p := &crd.Package{ p := &fv1.Package{
Metadata: metav1.ObjectMeta{ Metadata: metav1.ObjectMeta{
Name: "hello", Name: "hello",
Namespace: fissionNs, Namespace: fissionNs,
}, },
Spec: fission.PackageSpec{ Spec: fv1.PackageSpec{
Environment: envRef, Environment: envRef,
Deployment: deployment, Deployment: deployment,
}, },
@@ -215,15 +215,15 @@ func TestExecutor(t *testing.T) {
} }
// create a function // create a function
f := &crd.Function{ f := &fv1.Function{
Metadata: metav1.ObjectMeta{ Metadata: metav1.ObjectMeta{
Name: "hello", Name: "hello",
Namespace: fissionNs, Namespace: fissionNs,
}, },
Spec: fission.FunctionSpec{ Spec: fv1.FunctionSpec{
Environment: envRef, Environment: envRef,
Package: fission.FunctionPackageRef{ Package: fv1.FunctionPackageRef{
PackageRef: fission.PackageRef{ PackageRef: fv1.PackageRef{
Namespace: p.Metadata.Namespace, Namespace: p.Metadata.Namespace,
Name: p.Metadata.Name, Name: p.Metadata.Name,
ResourceVersion: p.Metadata.ResourceVersion, ResourceVersion: p.Metadata.ResourceVersion,
@@ -240,11 +240,11 @@ func TestExecutor(t *testing.T) {
labels := map[string]string{"functionName": f.Metadata.Name} labels := map[string]string{"functionName": f.Metadata.Name}
var fetcherPort int32 = 30001 var fetcherPort int32 = 30001
fetcherSvc := createSvc(kubeClient, functionNs, fmt.Sprintf("%v-%v", f.Metadata.Name, "fetcher"), 8000, fetcherPort, labels) fetcherSvc := createSvc(kubeClient, functionNs, fmt.Sprintf("%v-%v", f.Metadata.Name, "fetcher"), 8000, fetcherPort, labels)
defer kubeClient.Services(functionNs).Delete(fetcherSvc.ObjectMeta.Name, nil) defer kubeClient.CoreV1().Services(functionNs).Delete(fetcherSvc.ObjectMeta.Name, nil)
var funcSvcPort int32 = 30002 var funcSvcPort int32 = 30002
functionSvc := createSvc(kubeClient, functionNs, f.Metadata.Name, 8888, funcSvcPort, labels) functionSvc := createSvc(kubeClient, functionNs, f.Metadata.Name, 8888, funcSvcPort, labels)
defer kubeClient.Services(functionNs).Delete(functionSvc.ObjectMeta.Name, nil) defer kubeClient.CoreV1().Services(functionNs).Delete(functionSvc.ObjectMeta.Name, nil)
// the main test: get a service for a given function // the main test: get a service for a given function
t1 := time.Now() t1 := time.Now()
@@ -26,9 +26,10 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/types"
"github.com/fission/fission" fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
"github.com/fission/fission/cache" "github.com/fission/fission/pkg/cache"
"github.com/fission/fission/crd" "github.com/fission/fission/pkg/crd"
ferror "github.com/fission/fission/pkg/error"
) )
type fscRequestType int type fscRequestType int
@@ -49,7 +50,7 @@ type (
FuncSvc struct { FuncSvc struct {
Name string // Name of object Name string // Name of object
Function *metav1.ObjectMeta // function this pod/service is for Function *metav1.ObjectMeta // function this pod/service is for
Environment *crd.Environment // function's environment Environment *fv1.Environment // function's environment
Address string // Host:Port or IP:Port that the function's service can be reached at. Address string // Host:Port or IP:Port that the function's service can be reached at.
KubernetesObjects []apiv1.ObjectReference // Kubernetes Objects (within the function namespace) KubernetesObjects []apiv1.ObjectReference // Kubernetes Objects (within the function namespace)
Executor executorType Executor executorType
@@ -81,15 +82,15 @@ type (
) )
func IsNotFoundError(err error) bool { func IsNotFoundError(err error) bool {
if fe, ok := err.(fission.Error); ok { if fe, ok := err.(ferror.Error); ok {
return fe.Code == fission.ErrorNotFound return fe.Code == ferror.ErrorNotFound
} }
return false return false
} }
func IsNameExistError(err error) bool { func IsNameExistError(err error) bool {
if fe, ok := err.(fission.Error); ok { if fe, ok := err.(ferror.Error); ok {
return fe.Code == fission.ErrorNameExists return fe.Code == ferror.ErrorNameExists
} }
return false return false
} }
@@ -9,8 +9,7 @@ import (
apiv1 "k8s.io/api/core/v1" apiv1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"github.com/fission/fission" fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
"github.com/fission/fission/crd"
) )
func panicIf(err error) { func panicIf(err error) {
@@ -51,17 +50,17 @@ func TestFunctionServiceCache(t *testing.T) {
Name: "foo", Name: "foo",
UID: "1212", UID: "1212",
}, },
Environment: &crd.Environment{ Environment: &fv1.Environment{
Metadata: metav1.ObjectMeta{ Metadata: metav1.ObjectMeta{
Name: "foo-env", Name: "foo-env",
UID: "2323", UID: "2323",
}, },
Spec: fission.EnvironmentSpec{ Spec: fv1.EnvironmentSpec{
Version: 1, Version: 1,
Runtime: fission.Runtime{ Runtime: fv1.Runtime{
Image: "fission/foo-env", Image: "fission/foo-env",
}, },
Builder: fission.Builder{}, Builder: fv1.Builder{},
}, },
}, },
Address: "xxx", Address: "xxx",
@@ -69,7 +68,7 @@ func TestFunctionServiceCache(t *testing.T) {
Ctime: now, Ctime: now,
Atime: now, Atime: now,
} }
_, err := fsc.Add(*fsvc) _, err = fsc.Add(*fsvc)
if err != nil { if err != nil {
fsc.Log() fsc.Log()
log.Panicf("Failed to add fsvc: %v", err) log.Panicf("Failed to add fsvc: %v", err)
@@ -21,6 +21,9 @@ import (
"fmt" "fmt"
"time" "time"
"github.com/fission/fission/pkg/types"
"github.com/fission/fission/pkg/utils"
multierror "github.com/hashicorp/go-multierror"
"go.uber.org/zap" "go.uber.org/zap"
asv1 "k8s.io/api/autoscaling/v1" asv1 "k8s.io/api/autoscaling/v1"
apiv1 "k8s.io/api/core/v1" apiv1 "k8s.io/api/core/v1"
@@ -30,10 +33,8 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/intstr" "k8s.io/apimachinery/pkg/util/intstr"
"github.com/fission/fission" fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
"github.com/fission/fission/crd" "github.com/fission/fission/pkg/executor/util"
"github.com/fission/fission/executor/util"
multierror "github.com/hashicorp/go-multierror"
) )
const ( const (
@@ -41,7 +42,7 @@ const (
DeploymentVersion = "extensions/v1beta1" DeploymentVersion = "extensions/v1beta1"
) )
func (deploy *NewDeploy) createOrGetDeployment(fn *crd.Function, env *crd.Environment, func (deploy *NewDeploy) createOrGetDeployment(fn *fv1.Function, env *fv1.Environment,
deployName string, deployLabels map[string]string, deployNamespace string, firstcreate bool) (*v1beta1.Deployment, error) { deployName string, deployLabels map[string]string, deployNamespace string, firstcreate bool) (*v1beta1.Deployment, error) {
minScale := int32(fn.Spec.InvokeStrategy.ExecutionStrategy.MinScale) minScale := int32(fn.Spec.InvokeStrategy.ExecutionStrategy.MinScale)
@@ -102,13 +103,13 @@ func (deploy *NewDeploy) createOrGetDeployment(fn *crd.Function, env *crd.Enviro
} }
func (deploy *NewDeploy) setupRBACObjs(deployNamespace string, fn *crd.Function) error { func (deploy *NewDeploy) setupRBACObjs(deployNamespace string, fn *fv1.Function) error {
// create fetcher SA in this ns, if not already created // create fetcher SA in this ns, if not already created
err := deploy.fetcherConfig.SetupServiceAccount(deploy.kubernetesClient, deployNamespace, fn.Metadata) err := deploy.fetcherConfig.SetupServiceAccount(deploy.kubernetesClient, deployNamespace, fn.Metadata)
if err != nil { if err != nil {
deploy.logger.Error("error creating fission fetcher service account for function", deploy.logger.Error("error creating fission fetcher service account for function",
zap.Error(err), zap.Error(err),
zap.String("service_account_name", fission.FissionFetcherSA), zap.String("service_account_name", types.FissionFetcherSA),
zap.String("service_account_namespace", deployNamespace), zap.String("service_account_namespace", deployNamespace),
zap.String("function_name", fn.Metadata.Name), zap.String("function_name", fn.Metadata.Name),
zap.String("function_namespace", fn.Metadata.Namespace)) zap.String("function_namespace", fn.Metadata.Namespace))
@@ -116,22 +117,22 @@ func (deploy *NewDeploy) setupRBACObjs(deployNamespace string, fn *crd.Function)
} }
// create a cluster role binding for the fetcher SA, if not already created, granting access to do a get on packages in any ns // create a cluster role binding for the fetcher SA, if not already created, granting access to do a get on packages in any ns
err = fission.SetupRoleBinding(deploy.logger, deploy.kubernetesClient, fission.PackageGetterRB, fn.Spec.Package.PackageRef.Namespace, fission.PackageGetterCR, fission.ClusterRole, fission.FissionFetcherSA, deployNamespace) err = utils.SetupRoleBinding(deploy.logger, deploy.kubernetesClient, types.PackageGetterRB, fn.Spec.Package.PackageRef.Namespace, types.PackageGetterCR, types.ClusterRole, types.FissionFetcherSA, deployNamespace)
if err != nil { if err != nil {
deploy.logger.Error("error creating role binding for function", deploy.logger.Error("error creating role binding for function",
zap.Error(err), zap.Error(err),
zap.String("role_binding", fission.PackageGetterRB), zap.String("role_binding", types.PackageGetterRB),
zap.String("function_name", fn.Metadata.Name), zap.String("function_name", fn.Metadata.Name),
zap.String("function_namespace", fn.Metadata.Namespace)) zap.String("function_namespace", fn.Metadata.Namespace))
return err return err
} }
// create rolebinding in function namespace for fetcherSA.envNamespace to be able to get secrets and configmaps // create rolebinding in function namespace for fetcherSA.envNamespace to be able to get secrets and configmaps
err = fission.SetupRoleBinding(deploy.logger, deploy.kubernetesClient, fission.SecretConfigMapGetterRB, fn.Metadata.Namespace, fission.SecretConfigMapGetterCR, fission.ClusterRole, fission.FissionFetcherSA, deployNamespace) err = utils.SetupRoleBinding(deploy.logger, deploy.kubernetesClient, types.SecretConfigMapGetterRB, fn.Metadata.Namespace, types.SecretConfigMapGetterCR, types.ClusterRole, types.FissionFetcherSA, deployNamespace)
if err != nil { if err != nil {
deploy.logger.Error("error creating role binding for function", deploy.logger.Error("error creating role binding for function",
zap.Error(err), zap.Error(err),
zap.String("role_binding", fission.SecretConfigMapGetterRB), zap.String("role_binding", types.SecretConfigMapGetterRB),
zap.String("function_name", fn.Metadata.Name), zap.String("function_name", fn.Metadata.Name),
zap.String("function_namespace", fn.Metadata.Namespace)) zap.String("function_namespace", fn.Metadata.Namespace))
return err return err
@@ -165,7 +166,7 @@ func (deploy *NewDeploy) deleteDeployment(ns string, name string) error {
return nil return nil
} }
func (deploy *NewDeploy) getDeploymentSpec(fn *crd.Function, env *crd.Environment, func (deploy *NewDeploy) getDeploymentSpec(fn *fv1.Function, env *fv1.Environment,
deployName string, deployLabels map[string]string) (*v1beta1.Deployment, error) { deployName string, deployLabels map[string]string) (*v1beta1.Deployment, error) {
replicas := int32(fn.Spec.InvokeStrategy.ExecutionStrategy.MinScale) replicas := int32(fn.Spec.InvokeStrategy.ExecutionStrategy.MinScale)
@@ -249,7 +250,7 @@ func (deploy *NewDeploy) getDeploymentSpec(fn *crd.Function, env *crd.Environmen
// getResources overrides only the resources which are overridden at function level otherwise // getResources overrides only the resources which are overridden at function level otherwise
// default to resources specified at environment level // default to resources specified at environment level
func (deploy *NewDeploy) getResources(env *crd.Environment, fn *crd.Function) apiv1.ResourceRequirements { func (deploy *NewDeploy) getResources(env *fv1.Environment, fn *fv1.Function) apiv1.ResourceRequirements {
resources := env.Spec.Resources resources := env.Spec.Resources
if resources.Requests == nil { if resources.Requests == nil {
resources.Requests = make(map[apiv1.ResourceName]resource.Quantity) resources.Requests = make(map[apiv1.ResourceName]resource.Quantity)
@@ -281,7 +282,7 @@ func (deploy *NewDeploy) getResources(env *crd.Environment, fn *crd.Function) ap
return resources return resources
} }
func (deploy *NewDeploy) createOrGetHpa(hpaName string, execStrategy *fission.ExecutionStrategy, depl *v1beta1.Deployment) (*asv1.HorizontalPodAutoscaler, error) { func (deploy *NewDeploy) createOrGetHpa(hpaName string, execStrategy *fv1.ExecutionStrategy, depl *v1beta1.Deployment) (*asv1.HorizontalPodAutoscaler, error) {
minRepl := int32(execStrategy.MinScale) minRepl := int32(execStrategy.MinScale)
if minRepl == 0 { if minRepl == 0 {
@@ -25,7 +25,8 @@ import (
"time" "time"
"github.com/dchest/uniuri" "github.com/dchest/uniuri"
"github.com/fission/fission/throttler" "github.com/fission/fission/pkg/throttler"
"github.com/fission/fission/pkg/utils"
multierror "github.com/hashicorp/go-multierror" multierror "github.com/hashicorp/go-multierror"
"github.com/pkg/errors" "github.com/pkg/errors"
"go.uber.org/zap" "go.uber.org/zap"
@@ -34,15 +35,16 @@ import (
k8sErrs "k8s.io/apimachinery/pkg/api/errors" k8sErrs "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/fields"
"k8s.io/apimachinery/pkg/types" k8sTypes "k8s.io/apimachinery/pkg/types"
"k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes"
"k8s.io/client-go/rest" "k8s.io/client-go/rest"
k8sCache "k8s.io/client-go/tools/cache" k8sCache "k8s.io/client-go/tools/cache"
"github.com/fission/fission" fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
"github.com/fission/fission/crd" "github.com/fission/fission/pkg/crd"
fetcherConfig "github.com/fission/fission/environments/fetcher/config" "github.com/fission/fission/pkg/executor/fscache"
"github.com/fission/fission/executor/fscache" fetcherConfig "github.com/fission/fission/pkg/fetcher/config"
"github.com/fission/fission/pkg/types"
) )
type ( type (
@@ -107,7 +109,7 @@ func MakeNewDeploy(
throttler: throttler.MakeThrottler(1 * time.Minute), throttler: throttler.MakeThrottler(1 * time.Minute),
fetcherConfig: fetcherConfig, fetcherConfig: fetcherConfig,
runtimeImagePullPolicy: fission.GetImagePullPolicy(os.Getenv("RUNTIME_IMAGE_PULL_POLICY")), runtimeImagePullPolicy: utils.GetImagePullPolicy(os.Getenv("RUNTIME_IMAGE_PULL_POLICY")),
useIstio: enableIstio, useIstio: enableIstio,
idlePodReapTime: 2 * time.Minute, idlePodReapTime: 2 * time.Minute,
@@ -136,9 +138,9 @@ func (deploy *NewDeploy) Run(ctx context.Context) {
func (deploy *NewDeploy) initFuncController() (k8sCache.Store, k8sCache.Controller) { func (deploy *NewDeploy) initFuncController() (k8sCache.Store, k8sCache.Controller) {
resyncPeriod := 30 * time.Second resyncPeriod := 30 * time.Second
listWatch := k8sCache.NewListWatchFromClient(deploy.crdClient, "functions", metav1.NamespaceAll, fields.Everything()) listWatch := k8sCache.NewListWatchFromClient(deploy.crdClient, "functions", metav1.NamespaceAll, fields.Everything())
store, controller := k8sCache.NewInformer(listWatch, &crd.Function{}, resyncPeriod, k8sCache.ResourceEventHandlerFuncs{ store, controller := k8sCache.NewInformer(listWatch, &fv1.Function{}, resyncPeriod, k8sCache.ResourceEventHandlerFuncs{
AddFunc: func(obj interface{}) { AddFunc: func(obj interface{}) {
fn := obj.(*crd.Function) fn := obj.(*fv1.Function)
_, err := deploy.createFunction(fn, true) _, err := deploy.createFunction(fn, true)
if err != nil { if err != nil {
deploy.logger.Error("error eager creating function", deploy.logger.Error("error eager creating function",
@@ -147,7 +149,7 @@ func (deploy *NewDeploy) initFuncController() (k8sCache.Store, k8sCache.Controll
} }
}, },
DeleteFunc: func(obj interface{}) { DeleteFunc: func(obj interface{}) {
fn := obj.(*crd.Function) fn := obj.(*fv1.Function)
err := deploy.deleteFunction(fn) err := deploy.deleteFunction(fn)
if err != nil { if err != nil {
deploy.logger.Error("error deleting function", deploy.logger.Error("error deleting function",
@@ -156,8 +158,8 @@ func (deploy *NewDeploy) initFuncController() (k8sCache.Store, k8sCache.Controll
} }
}, },
UpdateFunc: func(oldObj interface{}, newObj interface{}) { UpdateFunc: func(oldObj interface{}, newObj interface{}) {
oldFn := oldObj.(*crd.Function) oldFn := oldObj.(*fv1.Function)
newFn := newObj.(*crd.Function) newFn := newObj.(*fv1.Function)
err := deploy.updateFunction(oldFn, newFn) err := deploy.updateFunction(oldFn, newFn)
if err != nil { if err != nil {
deploy.logger.Error("error updating function", deploy.logger.Error("error updating function",
@@ -173,12 +175,12 @@ func (deploy *NewDeploy) initFuncController() (k8sCache.Store, k8sCache.Controll
func (deploy *NewDeploy) initEnvController() (k8sCache.Store, k8sCache.Controller) { func (deploy *NewDeploy) initEnvController() (k8sCache.Store, k8sCache.Controller) {
resyncPeriod := 30 * time.Second resyncPeriod := 30 * time.Second
listWatch := k8sCache.NewListWatchFromClient(deploy.crdClient, "environments", metav1.NamespaceAll, fields.Everything()) listWatch := k8sCache.NewListWatchFromClient(deploy.crdClient, "environments", metav1.NamespaceAll, fields.Everything())
store, controller := k8sCache.NewInformer(listWatch, &crd.Environment{}, resyncPeriod, k8sCache.ResourceEventHandlerFuncs{ store, controller := k8sCache.NewInformer(listWatch, &fv1.Environment{}, resyncPeriod, k8sCache.ResourceEventHandlerFuncs{
AddFunc: func(obj interface{}) {}, AddFunc: func(obj interface{}) {},
DeleteFunc: func(obj interface{}) {}, DeleteFunc: func(obj interface{}) {},
UpdateFunc: func(oldObj interface{}, newObj interface{}) { UpdateFunc: func(oldObj interface{}, newObj interface{}) {
newEnv := newObj.(*crd.Environment) newEnv := newObj.(*fv1.Environment)
oldEnv := oldObj.(*crd.Environment) oldEnv := oldObj.(*fv1.Environment)
// Currently only an image update in environment calls for function's deployment recreation. In future there might be more attributes which would want to do it // Currently only an image update in environment calls for function's deployment recreation. In future there might be more attributes which would want to do it
if oldEnv.Spec.Runtime.Image != newEnv.Spec.Runtime.Image { if oldEnv.Spec.Runtime.Image != newEnv.Spec.Runtime.Image {
deploy.logger.Info("Updating all function of the environment that changed, old env:", zap.Any("environment", oldEnv)) deploy.logger.Info("Updating all function of the environment that changed, old env:", zap.Any("environment", oldEnv))
@@ -199,12 +201,12 @@ func (deploy *NewDeploy) initEnvController() (k8sCache.Store, k8sCache.Controlle
return store, controller return store, controller
} }
func (deploy *NewDeploy) getEnvFunctions(m *metav1.ObjectMeta) []crd.Function { func (deploy *NewDeploy) getEnvFunctions(m *metav1.ObjectMeta) []fv1.Function {
funcList, err := deploy.fissionClient.Functions(m.Namespace).List(metav1.ListOptions{}) funcList, err := deploy.fissionClient.Functions(m.Namespace).List(metav1.ListOptions{})
if err != nil { if err != nil {
deploy.logger.Error("Error getting functions for env", zap.Error(err), zap.Any("environment", m)) deploy.logger.Error("Error getting functions for env", zap.Error(err), zap.Any("environment", m))
} }
relatedFunctions := make([]crd.Function, 0) relatedFunctions := make([]fv1.Function, 0)
for _, f := range funcList.Items { for _, f := range funcList.Items {
if (f.Spec.Environment.Name == m.Name) && (f.Spec.Environment.Namespace == m.Namespace) { if (f.Spec.Environment.Name == m.Name) && (f.Spec.Environment.Namespace == m.Namespace) {
relatedFunctions = append(relatedFunctions, f) relatedFunctions = append(relatedFunctions, f)
@@ -221,8 +223,8 @@ func (deploy *NewDeploy) GetFuncSvc(ctx context.Context, metadata *metav1.Object
return deploy.createFunction(fn, false) return deploy.createFunction(fn, false)
} }
func (deploy *NewDeploy) createFunction(fn *crd.Function, firstcreate bool) (*fscache.FuncSvc, error) { func (deploy *NewDeploy) createFunction(fn *fv1.Function, firstcreate bool) (*fscache.FuncSvc, error) {
if fn.Spec.InvokeStrategy.ExecutionStrategy.ExecutorType != fission.ExecutorTypeNewdeploy { if fn.Spec.InvokeStrategy.ExecutionStrategy.ExecutorType != fv1.ExecutorTypeNewdeploy {
return nil, nil return nil, nil
} }
@@ -241,8 +243,8 @@ func (deploy *NewDeploy) createFunction(fn *crd.Function, firstcreate bool) (*fs
return fsvc, err return fsvc, err
} }
func (deploy *NewDeploy) deleteFunction(fn *crd.Function) error { func (deploy *NewDeploy) deleteFunction(fn *fv1.Function) error {
if fn.Spec.InvokeStrategy.ExecutionStrategy.ExecutorType != fission.ExecutorTypeNewdeploy { if fn.Spec.InvokeStrategy.ExecutionStrategy.ExecutorType != fv1.ExecutorTypeNewdeploy {
return nil return nil
} }
err := deploy.fnDelete(fn) err := deploy.fnDelete(fn)
@@ -252,7 +254,7 @@ func (deploy *NewDeploy) deleteFunction(fn *crd.Function) error {
return err return err
} }
func (deploy *NewDeploy) fnCreate(fn *crd.Function, firstcreate bool) (*fscache.FuncSvc, error) { func (deploy *NewDeploy) fnCreate(fn *fv1.Function, firstcreate bool) (*fscache.FuncSvc, error) {
env, err := deploy.fissionClient. env, err := deploy.fissionClient.
Environments(fn.Spec.Environment.Namespace). Environments(fn.Spec.Environment.Namespace).
Get(fn.Spec.Environment.Name) Get(fn.Spec.Environment.Name)
@@ -348,21 +350,21 @@ func (deploy *NewDeploy) fnCreate(fn *crd.Function, firstcreate bool) (*fscache.
return fsvc, nil return fsvc, nil
} }
func (deploy *NewDeploy) updateFunction(oldFn *crd.Function, newFn *crd.Function) error { func (deploy *NewDeploy) updateFunction(oldFn *fv1.Function, newFn *fv1.Function) error {
if oldFn.Metadata.ResourceVersion == newFn.Metadata.ResourceVersion { if oldFn.Metadata.ResourceVersion == newFn.Metadata.ResourceVersion {
return nil return nil
} }
// Ignoring updates to functions which are not of NewDeployment type // Ignoring updates to functions which are not of NewDeployment type
if newFn.Spec.InvokeStrategy.ExecutionStrategy.ExecutorType != fission.ExecutorTypeNewdeploy && if newFn.Spec.InvokeStrategy.ExecutionStrategy.ExecutorType != fv1.ExecutorTypeNewdeploy &&
oldFn.Spec.InvokeStrategy.ExecutionStrategy.ExecutorType != fission.ExecutorTypeNewdeploy { oldFn.Spec.InvokeStrategy.ExecutionStrategy.ExecutorType != fv1.ExecutorTypeNewdeploy {
return nil return nil
} }
// Executor type is no longer New Deployment // Executor type is no longer New Deployment
if newFn.Spec.InvokeStrategy.ExecutionStrategy.ExecutorType != fission.ExecutorTypeNewdeploy && if newFn.Spec.InvokeStrategy.ExecutionStrategy.ExecutorType != fv1.ExecutorTypeNewdeploy &&
oldFn.Spec.InvokeStrategy.ExecutionStrategy.ExecutorType == fission.ExecutorTypeNewdeploy { oldFn.Spec.InvokeStrategy.ExecutionStrategy.ExecutorType == fv1.ExecutorTypeNewdeploy {
deploy.logger.Info("function does not use new deployment executor anymore, deleting resources", deploy.logger.Info("function does not use new deployment executor anymore, deleting resources",
zap.Any("function", newFn)) zap.Any("function", newFn))
// IMP - pass the oldFn, as the new/modified function is not in cache // IMP - pass the oldFn, as the new/modified function is not in cache
@@ -370,8 +372,8 @@ func (deploy *NewDeploy) updateFunction(oldFn *crd.Function, newFn *crd.Function
} }
// Executor type changed to New Deployment from something else // Executor type changed to New Deployment from something else
if oldFn.Spec.InvokeStrategy.ExecutionStrategy.ExecutorType != fission.ExecutorTypeNewdeploy && if oldFn.Spec.InvokeStrategy.ExecutionStrategy.ExecutorType != fv1.ExecutorTypeNewdeploy &&
newFn.Spec.InvokeStrategy.ExecutionStrategy.ExecutorType == fission.ExecutorTypeNewdeploy { newFn.Spec.InvokeStrategy.ExecutionStrategy.ExecutorType == fv1.ExecutorTypeNewdeploy {
deploy.logger.Info("function type changed to new deployment, creating resources", deploy.logger.Info("function type changed to new deployment, creating resources",
zap.Any("old_function", oldFn.Metadata), zap.Any("old_function", oldFn.Metadata),
zap.Any("new_function", newFn.Metadata)) zap.Any("new_function", newFn.Metadata))
@@ -474,7 +476,7 @@ func (deploy *NewDeploy) updateFunction(oldFn *crd.Function, newFn *crd.Function
return nil return nil
} }
func (deploy *NewDeploy) updateFuncDeployment(fn *crd.Function, env *crd.Environment) error { func (deploy *NewDeploy) updateFuncDeployment(fn *fv1.Function, env *fv1.Environment) error {
fsvc, err := deploy.fsCache.GetByFunctionUID(fn.Metadata.UID) fsvc, err := deploy.fsCache.GetByFunctionUID(fn.Metadata.UID)
if err != nil { if err != nil {
@@ -508,7 +510,7 @@ func (deploy *NewDeploy) updateFuncDeployment(fn *crd.Function, env *crd.Environ
return nil return nil
} }
func (deploy *NewDeploy) fnDelete(fn *crd.Function) error { func (deploy *NewDeploy) fnDelete(fn *fv1.Function) error {
var multierr *multierror.Error var multierr *multierror.Error
// GetByFunction uses resource version as part of cache key, however, // GetByFunction uses resource version as part of cache key, however,
@@ -544,20 +546,20 @@ func (deploy *NewDeploy) fnDelete(fn *crd.Function) error {
} }
// getObjName returns a unique name for kubernetes objects of function // getObjName returns a unique name for kubernetes objects of function
func (deploy *NewDeploy) getObjName(fn *crd.Function) string { func (deploy *NewDeploy) getObjName(fn *fv1.Function) string {
return strings.ToLower(fmt.Sprintf("newdeploy-%v-%v-%v", fn.Metadata.Name, fn.Metadata.Namespace, uniuri.NewLen(8))) return strings.ToLower(fmt.Sprintf("newdeploy-%v-%v-%v", fn.Metadata.Name, fn.Metadata.Namespace, uniuri.NewLen(8)))
} }
func (deploy *NewDeploy) getDeployLabels(fn *crd.Function, env *crd.Environment) map[string]string { func (deploy *NewDeploy) getDeployLabels(fn *fv1.Function, env *fv1.Environment) map[string]string {
return map[string]string{ return map[string]string{
fission.EXECUTOR_INSTANCEID_LABEL: deploy.instanceID, types.EXECUTOR_INSTANCEID_LABEL: deploy.instanceID,
fission.EXECUTOR_TYPE: fission.ExecutorTypeNewdeploy, types.EXECUTOR_TYPE: fv1.ExecutorTypeNewdeploy,
fission.ENVIRONMENT_NAME: env.Metadata.Name, types.ENVIRONMENT_NAME: env.Metadata.Name,
fission.ENVIRONMENT_NAMESPACE: env.Metadata.Namespace, types.ENVIRONMENT_NAMESPACE: env.Metadata.Namespace,
fission.ENVIRONMENT_UID: string(env.Metadata.UID), types.ENVIRONMENT_UID: string(env.Metadata.UID),
fission.FUNCTION_NAME: fn.Metadata.Name, types.FUNCTION_NAME: fn.Metadata.Name,
fission.FUNCTION_NAMESPACE: fn.Metadata.Namespace, types.FUNCTION_NAMESPACE: fn.Metadata.Namespace,
fission.FUNCTION_UID: string(fn.Metadata.UID), types.FUNCTION_UID: string(fn.Metadata.UID),
} }
} }
@@ -577,7 +579,7 @@ func (deploy *NewDeploy) updateKubeObjRefRV(fsvc *fscache.FuncSvc, objKind strin
// updateStatus is a function which updates status of update. // updateStatus is a function which updates status of update.
// Current implementation only logs messages, in future it will update function status // Current implementation only logs messages, in future it will update function status
func (deploy *NewDeploy) updateStatus(fn *crd.Function, err error, message string) { func (deploy *NewDeploy) updateStatus(fn *fv1.Function, err error, message string) {
deploy.logger.Info("function status update", zap.Error(err), zap.Any("function", fn), zap.String("message", message)) deploy.logger.Info("function status update", zap.Error(err), zap.Any("function", fn), zap.String("message", message))
} }
@@ -629,7 +631,7 @@ func (deploy *NewDeploy) idleObjectReaper() {
deploy.logger.Fatal("failed to get environment list", zap.Error(err)) deploy.logger.Fatal("failed to get environment list", zap.Error(err))
} }
envList := make(map[types.UID]struct{}) envList := make(map[k8sTypes.UID]struct{})
for _, env := range envs.Items { for _, env := range envs.Items {
envList[env.Metadata.UID] = struct{}{} envList[env.Metadata.UID] = struct{}{}
} }
@@ -19,6 +19,7 @@ package poolmgr
import ( import (
"time" "time"
"github.com/fission/fission/pkg/types"
"go.uber.org/zap" "go.uber.org/zap"
apiv1 "k8s.io/api/core/v1" apiv1 "k8s.io/api/core/v1"
kerrors "k8s.io/apimachinery/pkg/api/errors" kerrors "k8s.io/apimachinery/pkg/api/errors"
@@ -28,8 +29,9 @@ import (
"k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes"
k8sCache "k8s.io/client-go/tools/cache" k8sCache "k8s.io/client-go/tools/cache"
"github.com/fission/fission" fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
"github.com/fission/fission/crd" "github.com/fission/fission/pkg/crd"
"github.com/fission/fission/pkg/utils"
) )
func getIstioServiceLabels(fnName string) map[string]string { func getIstioServiceLabels(fnName string) map[string]string {
@@ -44,10 +46,10 @@ func (gpm *GenericPoolManager) makeFuncController(fissionClient *crd.FissionClie
resyncPeriod := 30 * time.Second resyncPeriod := 30 * time.Second
lw := k8sCache.NewListWatchFromClient(fissionClient.GetCrdClient(), "functions", metav1.NamespaceAll, fields.Everything()) lw := k8sCache.NewListWatchFromClient(fissionClient.GetCrdClient(), "functions", metav1.NamespaceAll, fields.Everything())
funcStore, controller := k8sCache.NewInformer(lw, &crd.Function{}, resyncPeriod, funcStore, controller := k8sCache.NewInformer(lw, &fv1.Function{}, resyncPeriod,
k8sCache.ResourceEventHandlerFuncs{ k8sCache.ResourceEventHandlerFuncs{
AddFunc: func(obj interface{}) { AddFunc: func(obj interface{}) {
fn := obj.(*crd.Function) fn := obj.(*fv1.Function)
// Since istio only allows accessing pod through k8s service, // Since istio only allows accessing pod through k8s service,
// for the functions with executor type "poolmgr" we need to // for the functions with executor type "poolmgr" we need to
@@ -58,7 +60,7 @@ func (gpm *GenericPoolManager) makeFuncController(fissionClient *crd.FissionClie
// In some cases, user may not enter the executorType explicitly, for example in his spec.yaml. // In some cases, user may not enter the executorType explicitly, for example in his spec.yaml.
// we assume it to be of type poolmgr // we assume it to be of type poolmgr
if fnExecutorType != "" && fnExecutorType != fission.ExecutorTypePoolmgr { if fnExecutorType != "" && fnExecutorType != fv1.ExecutorTypePoolmgr {
return return
} }
@@ -72,12 +74,12 @@ func (gpm *GenericPoolManager) makeFuncController(fissionClient *crd.FissionClie
// setup rolebinding is tried, if it fails, we dont return. we just log an error and move on, because : // setup rolebinding is tried, if it fails, we dont return. we just log an error and move on, because :
// 1. not all functions have secrets and/or configmaps, so things will work without this rolebinding in that case. // 1. not all functions have secrets and/or configmaps, so things will work without this rolebinding in that case.
// 2. on the contrary, when the route is tried, the env fetcher logs will show a 403 forbidden message and same will be relayed to executor. // 2. on the contrary, when the route is tried, the env fetcher logs will show a 403 forbidden message and same will be relayed to executor.
err := fission.SetupRoleBinding(gpm.logger, kubernetesClient, fission.SecretConfigMapGetterRB, fn.Metadata.Namespace, fission.SecretConfigMapGetterCR, fission.ClusterRole, fission.FissionFetcherSA, envNs) err := utils.SetupRoleBinding(gpm.logger, kubernetesClient, types.SecretConfigMapGetterRB, fn.Metadata.Namespace, types.SecretConfigMapGetterCR, types.ClusterRole, types.FissionFetcherSA, envNs)
if err != nil { if err != nil {
gpm.logger.Error("error creating rolebinding", zap.Error(err), zap.String("role_binding", fission.SecretConfigMapGetterRB)) gpm.logger.Error("error creating rolebinding", zap.Error(err), zap.String("role_binding", types.SecretConfigMapGetterRB))
} else { } else {
gpm.logger.Info("successfully set up rolebinding for fetcher service account for function", gpm.logger.Info("successfully set up rolebinding for fetcher service account for function",
zap.String("service_account", fission.FissionFetcherSA), zap.String("service_account", types.FissionFetcherSA),
zap.String("service_account_namepsace", envNs), zap.String("service_account_namepsace", envNs),
zap.String("function_name", fn.Metadata.Name), zap.String("function_name", fn.Metadata.Name),
zap.String("function_namespace", fn.Metadata.Namespace)) zap.String("function_namespace", fn.Metadata.Namespace))
@@ -91,7 +93,7 @@ func (gpm *GenericPoolManager) makeFuncController(fissionClient *crd.FissionClie
"functionUid": string(fn.Metadata.UID), "functionUid": string(fn.Metadata.UID),
} }
svcName := fission.GetFunctionIstioServiceName(fn.Metadata.Name, fn.Metadata.Namespace) svcName := utils.GetFunctionIstioServiceName(fn.Metadata.Name, fn.Metadata.Namespace)
// service for accepting user traffic // service for accepting user traffic
svc := apiv1.Service{ svc := apiv1.Service{
@@ -140,10 +142,10 @@ func (gpm *GenericPoolManager) makeFuncController(fissionClient *crd.FissionClie
}, },
DeleteFunc: func(obj interface{}) { DeleteFunc: func(obj interface{}) {
fn := obj.(*crd.Function) fn := obj.(*fv1.Function)
fnExecutorType := fn.Spec.InvokeStrategy.ExecutionStrategy.ExecutorType fnExecutorType := fn.Spec.InvokeStrategy.ExecutionStrategy.ExecutorType
if fnExecutorType != "" && fnExecutorType != fission.ExecutorTypePoolmgr { if fnExecutorType != "" && fnExecutorType != fv1.ExecutorTypePoolmgr {
return return
} }
@@ -153,7 +155,7 @@ func (gpm *GenericPoolManager) makeFuncController(fissionClient *crd.FissionClie
} }
if istioEnabled { if istioEnabled {
svcName := fission.GetFunctionIstioServiceName(fn.Metadata.Name, fn.Metadata.Namespace) svcName := utils.GetFunctionIstioServiceName(fn.Metadata.Name, fn.Metadata.Namespace)
// delete function istio service // delete function istio service
err := kubernetesClient.CoreV1().Services(envNs).Delete(svcName, nil) err := kubernetesClient.CoreV1().Services(envNs).Delete(svcName, nil)
if err != nil && !kerrors.IsNotFound(err) { if err != nil && !kerrors.IsNotFound(err) {
@@ -167,8 +169,8 @@ func (gpm *GenericPoolManager) makeFuncController(fissionClient *crd.FissionClie
}, },
UpdateFunc: func(oldObj, newObj interface{}) { UpdateFunc: func(oldObj, newObj interface{}) {
oldFunc := oldObj.(*crd.Function) oldFunc := oldObj.(*fv1.Function)
newFunc := newObj.(*crd.Function) newFunc := newObj.(*fv1.Function)
if oldFunc.Metadata.ResourceVersion == newFunc.Metadata.ResourceVersion { if oldFunc.Metadata.ResourceVersion == newFunc.Metadata.ResourceVersion {
return return
@@ -176,8 +178,8 @@ func (gpm *GenericPoolManager) makeFuncController(fissionClient *crd.FissionClie
envChanged := (oldFunc.Spec.Environment.Namespace != newFunc.Spec.Environment.Namespace) envChanged := (oldFunc.Spec.Environment.Namespace != newFunc.Spec.Environment.Namespace)
executorTypeChangedToPM := (oldFunc.Spec.InvokeStrategy.ExecutionStrategy.ExecutorType != fission.ExecutorTypePoolmgr && executorTypeChangedToPM := (oldFunc.Spec.InvokeStrategy.ExecutionStrategy.ExecutorType != fv1.ExecutorTypePoolmgr &&
newFunc.Spec.InvokeStrategy.ExecutionStrategy.ExecutorType == fission.ExecutorTypePoolmgr) newFunc.Spec.InvokeStrategy.ExecutionStrategy.ExecutorType == fv1.ExecutorTypePoolmgr)
// if a func's env reference gets updated and the newly referenced env is in a different ns, // if a func's env reference gets updated and the newly referenced env is in a different ns,
// we need to create a rolebinding in func's ns so that the fetcher-sa in env ns has access // we need to create a rolebinding in func's ns so that the fetcher-sa in env ns has access
@@ -190,15 +192,15 @@ func (gpm *GenericPoolManager) makeFuncController(fissionClient *crd.FissionClie
envNs = newFunc.Spec.Environment.Namespace envNs = newFunc.Spec.Environment.Namespace
} }
err := fission.SetupRoleBinding(gpm.logger, kubernetesClient, fission.SecretConfigMapGetterRB, err := utils.SetupRoleBinding(gpm.logger, kubernetesClient, types.SecretConfigMapGetterRB,
newFunc.Metadata.Namespace, fission.SecretConfigMapGetterCR, fission.ClusterRole, newFunc.Metadata.Namespace, types.SecretConfigMapGetterCR, types.ClusterRole,
fission.FissionFetcherSA, envNs) types.FissionFetcherSA, envNs)
if err != nil { if err != nil {
gpm.logger.Error("error creating rolebinding", zap.Error(err), zap.String("role_binding", fission.SecretConfigMapGetterRB)) gpm.logger.Error("error creating rolebinding", zap.Error(err), zap.String("role_binding", types.SecretConfigMapGetterRB))
} else { } else {
gpm.logger.Info("successfully set up rolebinding for fetcher service account for function", gpm.logger.Info("successfully set up rolebinding for fetcher service account for function",
zap.String("service_account", fission.FissionFetcherSA), zap.String("service_account", types.FissionFetcherSA),
zap.String("service_account_namepsace", envNs), zap.String("service_account_namepsace", envNs),
zap.String("function_name", newFunc.Metadata.Name), zap.String("function_name", newFunc.Metadata.Name),
zap.String("function_namespace", newFunc.Metadata.Namespace)) zap.String("function_namespace", newFunc.Metadata.Namespace))
@@ -26,6 +26,8 @@ import (
"time" "time"
"github.com/dchest/uniuri" "github.com/dchest/uniuri"
"github.com/fission/fission/pkg/types"
"github.com/fission/fission/pkg/utils"
multierror "github.com/hashicorp/go-multierror" multierror "github.com/hashicorp/go-multierror"
"github.com/pkg/errors" "github.com/pkg/errors"
"go.uber.org/zap" "go.uber.org/zap"
@@ -36,18 +38,18 @@ import (
"k8s.io/apimachinery/pkg/util/intstr" "k8s.io/apimachinery/pkg/util/intstr"
"k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes"
"github.com/fission/fission" fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
"github.com/fission/fission/crd" "github.com/fission/fission/pkg/crd"
fetcherClient "github.com/fission/fission/environments/fetcher/client" "github.com/fission/fission/pkg/executor/fscache"
fetcherConfig "github.com/fission/fission/environments/fetcher/config" "github.com/fission/fission/pkg/executor/util"
"github.com/fission/fission/executor/fscache" fetcherClient "github.com/fission/fission/pkg/fetcher/client"
"github.com/fission/fission/executor/util" fetcherConfig "github.com/fission/fission/pkg/fetcher/config"
) )
type ( type (
GenericPool struct { GenericPool struct {
logger *zap.Logger logger *zap.Logger
env *crd.Environment env *fv1.Environment
replicas int32 // num idle pods replicas int32 // num idle pods
deployment *v1beta1.Deployment // kubernetes deployment deployment *v1beta1.Deployment // kubernetes deployment
namespace string // namespace to keep our resources namespace string // namespace to keep our resources
@@ -82,7 +84,7 @@ func MakeGenericPool(
logger *zap.Logger, logger *zap.Logger,
fissionClient *crd.FissionClient, fissionClient *crd.FissionClient,
kubernetesClient *kubernetes.Clientset, kubernetesClient *kubernetes.Clientset,
env *crd.Environment, env *fv1.Environment,
initialReplicas int32, initialReplicas int32,
namespace string, namespace string,
functionNamespace string, functionNamespace string,
@@ -116,7 +118,7 @@ func MakeGenericPool(
useIstio: enableIstio, // defaults off -- istio integration requires pod relabeling and it takes a second or more to become routable, slowing cold start useIstio: enableIstio, // defaults off -- istio integration requires pod relabeling and it takes a second or more to become routable, slowing cold start
} }
gp.runtimeImagePullPolicy = fission.GetImagePullPolicy(os.Getenv("RUNTIME_IMAGE_PULL_POLICY")) gp.runtimeImagePullPolicy = utils.GetImagePullPolicy(os.Getenv("RUNTIME_IMAGE_PULL_POLICY"))
// create fetcher SA in this ns, if not already created // create fetcher SA in this ns, if not already created
err := fetcherConfig.SetupServiceAccount(gp.kubernetesClient, gp.namespace, nil) err := fetcherConfig.SetupServiceAccount(gp.kubernetesClient, gp.namespace, nil)
@@ -141,12 +143,12 @@ func MakeGenericPool(
func (gp *GenericPool) getDeployLabels() map[string]string { func (gp *GenericPool) getDeployLabels() map[string]string {
return map[string]string{ return map[string]string{
fission.EXECUTOR_INSTANCEID_LABEL: gp.instanceId, fv1.EXECUTOR_INSTANCEID_LABEL: gp.instanceId,
fission.EXECUTOR_TYPE: fission.ExecutorTypePoolmgr, types.EXECUTOR_TYPE: fv1.ExecutorTypePoolmgr,
fission.ENVIRONMENT_NAME: gp.env.Metadata.Name, types.ENVIRONMENT_NAME: gp.env.Metadata.Name,
fission.ENVIRONMENT_NAMESPACE: gp.env.Metadata.Namespace, types.ENVIRONMENT_NAMESPACE: gp.env.Metadata.Namespace,
fission.ENVIRONMENT_UID: string(gp.env.Metadata.UID), types.ENVIRONMENT_UID: string(gp.env.Metadata.UID),
"managed": "true", // this allows us to easily find pods managed by the deployment "managed": "true", // this allows us to easily find pods managed by the deployment
} }
} }
@@ -201,7 +203,7 @@ func (gp *GenericPool) _choosePod(newLabels map[string]string) (*apiv1.Pod, erro
pod := podList.Items[i] pod := podList.Items[i]
// Ignore not ready pod here // Ignore not ready pod here
if !fission.IsReadyPod(&pod) { if !utils.IsReadyPod(&pod) {
continue continue
} }
@@ -227,7 +229,7 @@ func (gp *GenericPool) _choosePod(newLabels map[string]string) (*apiv1.Pod, erro
// and make a good scheduling decision. // and make a good scheduling decision.
chosenPod := readyPods[rand.Intn(len(readyPods))] chosenPod := readyPods[rand.Intn(len(readyPods))]
if gp.env.Spec.AllowedFunctionsPerContainer != fission.AllowedFunctionsPerContainerInfinite { if gp.env.Spec.AllowedFunctionsPerContainer != types.AllowedFunctionsPerContainerInfinite {
// Relabel. If the pod already got picked and // Relabel. If the pod already got picked and
// modified, this should fail; in that case just // modified, this should fail; in that case just
// retry. // retry.
@@ -246,10 +248,10 @@ func (gp *GenericPool) _choosePod(newLabels map[string]string) (*apiv1.Pod, erro
func (gp *GenericPool) labelsForFunction(metadata *metav1.ObjectMeta) map[string]string { func (gp *GenericPool) labelsForFunction(metadata *metav1.ObjectMeta) map[string]string {
label := gp.getDeployLabels() label := gp.getDeployLabels()
label[fission.FUNCTION_NAME] = metadata.Name label[types.FUNCTION_NAME] = metadata.Name
label[fission.FUNCTION_UID] = string(metadata.UID) label[types.FUNCTION_UID] = string(metadata.UID)
label[fission.FUNCTION_NAMESPACE] = metadata.Namespace // function CRD must stay within same namespace of environment CRD label[types.FUNCTION_NAMESPACE] = metadata.Namespace // function CRD must stay within same namespace of environment CRD
label["managed"] = "false" // this allows us to easily find pods not managed by the deployment label["managed"] = "false" // this allows us to easily find pods not managed by the deployment
return label return label
} }
@@ -305,7 +307,7 @@ func (gp *GenericPool) specializePod(ctx context.Context, pod *apiv1.Pod, metada
} }
// specialize pod with service // specialize pod with service
if gp.useIstio { if gp.useIstio {
svc := fission.GetFunctionIstioServiceName(metadata.Name, metadata.Namespace) svc := utils.GetFunctionIstioServiceName(metadata.Name, metadata.Namespace)
podIP = fmt.Sprintf("%v.%v", svc, gp.namespace) podIP = fmt.Sprintf("%v.%v", svc, gp.namespace)
} }
@@ -569,7 +571,7 @@ func (gp *GenericPool) GetFuncSvc(ctx context.Context, m *metav1.ObjectMeta) (*f
// namespace-qualified hostname // namespace-qualified hostname
svcHost = fmt.Sprintf("%v.%v", svcName, gp.namespace) svcHost = fmt.Sprintf("%v.%v", svcName, gp.namespace)
} else if gp.useIstio { } else if gp.useIstio {
svc := fission.GetFunctionIstioServiceName(m.Name, m.Namespace) svc := utils.GetFunctionIstioServiceName(m.Name, m.Namespace)
svcHost = fmt.Sprintf("%v.%v:8888", svc, gp.namespace) svcHost = fmt.Sprintf("%v.%v:8888", svc, gp.namespace)
} else { } else {
gp.logger.Info("using pod IP for specialized pod", zap.String("pod", pod.ObjectMeta.Name), zap.String("function", m.Name)) gp.logger.Info("using pod IP for specialized pod", zap.String("pod", pod.ObjectMeta.Name), zap.String("function", m.Name))
@@ -23,18 +23,20 @@ import (
"strings" "strings"
"time" "time"
"github.com/fission/fission/pkg/utils"
"go.uber.org/zap" "go.uber.org/zap"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types" k8sTypes "k8s.io/apimachinery/pkg/types"
"k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes"
k8sCache "k8s.io/client-go/tools/cache" k8sCache "k8s.io/client-go/tools/cache"
"github.com/fission/fission" fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
"github.com/fission/fission/cache" "github.com/fission/fission/pkg/cache"
"github.com/fission/fission/crd" "github.com/fission/fission/pkg/crd"
fetcherConfig "github.com/fission/fission/environments/fetcher/config" "github.com/fission/fission/pkg/executor/fscache"
"github.com/fission/fission/executor/fscache" "github.com/fission/fission/pkg/executor/reaper"
"github.com/fission/fission/executor/reaper" fetcherConfig "github.com/fission/fission/pkg/fetcher/config"
"github.com/fission/fission/pkg/types"
) )
type requestType int type requestType int
@@ -70,8 +72,8 @@ type (
} }
request struct { request struct {
requestType requestType
env *crd.Environment env *fv1.Environment
envList []crd.Environment envList []fv1.Environment
responseChannel chan *response responseChannel chan *response
} }
response struct { response struct {
@@ -139,7 +141,7 @@ func (gpm *GenericPoolManager) service() {
if !ok { if !ok {
poolsize := gpm.getEnvPoolsize(req.env) poolsize := gpm.getEnvPoolsize(req.env)
switch req.env.Spec.AllowedFunctionsPerContainer { switch req.env.Spec.AllowedFunctionsPerContainer {
case fission.AllowedFunctionsPerContainerInfinite: case types.AllowedFunctionsPerContainerInfinite:
poolsize = 1 poolsize = 1
} }
@@ -170,7 +172,7 @@ func (gpm *GenericPoolManager) service() {
if !ok || poolsize == 0 { if !ok || poolsize == 0 {
// Env no longer exists or pool size changed to zero // Env no longer exists or pool size changed to zero
gpm.logger.Info("eestroying generic pool", zap.Any("environment", pool.env.Metadata)) gpm.logger.Info("destroying generic pool", zap.Any("environment", pool.env.Metadata))
delete(gpm.pools, key) delete(gpm.pools, key)
// and delete the pool asynchronously. // and delete the pool asynchronously.
@@ -182,7 +184,7 @@ func (gpm *GenericPoolManager) service() {
} }
} }
func (gpm *GenericPoolManager) GetPool(env *crd.Environment) (*GenericPool, error) { func (gpm *GenericPoolManager) GetPool(env *fv1.Environment) (*GenericPool, error) {
c := make(chan *response) c := make(chan *response)
gpm.requestChannel <- &request{ gpm.requestChannel <- &request{
requestType: GET_POOL, requestType: GET_POOL,
@@ -193,7 +195,7 @@ func (gpm *GenericPoolManager) GetPool(env *crd.Environment) (*GenericPool, erro
return resp.pool, resp.error return resp.pool, resp.error
} }
func (gpm *GenericPoolManager) CleanupPools(envs []crd.Environment) { func (gpm *GenericPoolManager) CleanupPools(envs []fv1.Environment) {
gpm.requestChannel <- &request{ gpm.requestChannel <- &request{
requestType: CLEANUP_POOLS, requestType: CLEANUP_POOLS,
envList: envs, envList: envs,
@@ -218,13 +220,13 @@ func (gpm *GenericPoolManager) GetFuncSvc(ctx context.Context, metadata *metav1.
return pool.GetFuncSvc(ctx, metadata) return pool.GetFuncSvc(ctx, metadata)
} }
func (gpm *GenericPoolManager) getFunctionEnv(m *metav1.ObjectMeta) (*crd.Environment, error) { func (gpm *GenericPoolManager) getFunctionEnv(m *metav1.ObjectMeta) (*fv1.Environment, error) {
var env *crd.Environment var env *fv1.Environment
// Cached ? // Cached ?
result, err := gpm.functionEnv.Get(crd.CacheKey(m)) result, err := gpm.functionEnv.Get(crd.CacheKey(m))
if err == nil { if err == nil {
env = result.(*crd.Environment) env = result.(*fv1.Environment)
return env, nil return env, nil
} }
@@ -253,7 +255,7 @@ func (gpm *GenericPoolManager) eagerPoolCreator() {
// get list of envs from controller // get list of envs from controller
envs, err := gpm.fissionClient.Environments(metav1.NamespaceAll).List(metav1.ListOptions{}) envs, err := gpm.fissionClient.Environments(metav1.NamespaceAll).List(metav1.ListOptions{})
if err != nil { if err != nil {
if fission.IsNetworkError(err) { if utils.IsNetworkError(err) {
gpm.logger.Error("encountered network error, retrying", zap.Error(err)) gpm.logger.Error("encountered network error, retrying", zap.Error(err))
time.Sleep(5 * time.Second) time.Sleep(5 * time.Second)
continue continue
@@ -282,7 +284,7 @@ func (gpm *GenericPoolManager) eagerPoolCreator() {
} }
} }
func (gpm *GenericPoolManager) getEnvPoolsize(env *crd.Environment) int32 { func (gpm *GenericPoolManager) getEnvPoolsize(env *fv1.Environment) int32 {
var poolsize int32 var poolsize int32
if env.Spec.Version < 3 { if env.Spec.Version < 3 {
poolsize = 3 poolsize = 3
@@ -298,7 +300,7 @@ func (gpm *GenericPoolManager) IsValid(fsvc *fscache.FuncSvc) bool {
for _, obj := range fsvc.KubernetesObjects { for _, obj := range fsvc.KubernetesObjects {
if obj.Kind == "pod" { if obj.Kind == "pod" {
pod, err := gpm.kubernetesClient.CoreV1().Pods(obj.Namespace).Get(obj.Name, metav1.GetOptions{}) pod, err := gpm.kubernetesClient.CoreV1().Pods(obj.Namespace).Get(obj.Name, metav1.GetOptions{})
if err == nil && strings.Contains(fsvc.Address, pod.Status.PodIP) && fission.IsReadyPod(pod) { if err == nil && strings.Contains(fsvc.Address, pod.Status.PodIP) && utils.IsReadyPod(pod) {
gpm.logger.Info("valid pod address", zap.String("address", fsvc.Address)) gpm.logger.Info("valid pod address", zap.String("address", fsvc.Address))
return true return true
} }
@@ -319,7 +321,7 @@ func (gpm *GenericPoolManager) idleObjectReaper() {
gpm.logger.Fatal("failed to get environment list", zap.Error(err)) gpm.logger.Fatal("failed to get environment list", zap.Error(err))
} }
envList := make(map[types.UID]struct{}) envList := make(map[k8sTypes.UID]struct{})
for _, env := range envs.Items { for _, env := range envs.Items {
envList[env.Metadata.UID] = struct{}{} envList[env.Metadata.UID] = struct{}{}
} }
@@ -343,7 +345,7 @@ func (gpm *GenericPoolManager) idleObjectReaper() {
zap.String("function", fsvc.Name)) zap.String("function", fsvc.Name))
} }
if fsvc.Environment.Spec.AllowedFunctionsPerContainer == fission.AllowedFunctionsPerContainerInfinite { if fsvc.Environment.Spec.AllowedFunctionsPerContainer == types.AllowedFunctionsPerContainerInfinite {
continue continue
} }
@@ -19,14 +19,16 @@ package poolmgr
import ( import (
"time" "time"
"github.com/fission/fission/pkg/types"
"github.com/fission/fission/pkg/utils"
"go.uber.org/zap" "go.uber.org/zap"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/fields"
"k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes"
k8sCache "k8s.io/client-go/tools/cache" k8sCache "k8s.io/client-go/tools/cache"
"github.com/fission/fission" fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
"github.com/fission/fission/crd" "github.com/fission/fission/pkg/crd"
) )
// TODO : It may make sense to make each of add, update, delete funcs run as separate go routines. // TODO : It may make sense to make each of add, update, delete funcs run as separate go routines.
@@ -35,10 +37,10 @@ func (gpm *GenericPoolManager) makePkgController(fissionClient *crd.FissionClien
resyncPeriod := 30 * time.Second resyncPeriod := 30 * time.Second
lw := k8sCache.NewListWatchFromClient(fissionClient.GetCrdClient(), "packages", metav1.NamespaceAll, fields.Everything()) lw := k8sCache.NewListWatchFromClient(fissionClient.GetCrdClient(), "packages", metav1.NamespaceAll, fields.Everything())
pkgStore, controller := k8sCache.NewInformer(lw, &crd.Package{}, resyncPeriod, pkgStore, controller := k8sCache.NewInformer(lw, &fv1.Package{}, resyncPeriod,
k8sCache.ResourceEventHandlerFuncs{ k8sCache.ResourceEventHandlerFuncs{
AddFunc: func(obj interface{}) { AddFunc: func(obj interface{}) {
pkg := obj.(*crd.Package) pkg := obj.(*fv1.Package)
gpm.logger.Debug("list watch for package reported a new package addition", gpm.logger.Debug("list watch for package reported a new package addition",
zap.String("package_name", pkg.Metadata.Name), zap.String("package_name", pkg.Metadata.Name),
zap.String("package_namepsace", pkg.Metadata.Namespace)) zap.String("package_namepsace", pkg.Metadata.Namespace))
@@ -51,26 +53,26 @@ func (gpm *GenericPoolManager) makePkgController(fissionClient *crd.FissionClien
// here, we return if we hit an error during rolebinding setup. this is because this rolebinding is mandatory for // here, we return if we hit an error during rolebinding setup. this is because this rolebinding is mandatory for
// every function's package to be loaded into its env. without that, there's no point to move forward. // every function's package to be loaded into its env. without that, there's no point to move forward.
err := fission.SetupRoleBinding(gpm.logger, kubernetesClient, fission.PackageGetterRB, pkg.Metadata.Namespace, fission.PackageGetterCR, fission.ClusterRole, fission.FissionFetcherSA, envNs) err := utils.SetupRoleBinding(gpm.logger, kubernetesClient, types.PackageGetterRB, pkg.Metadata.Namespace, types.PackageGetterCR, types.ClusterRole, types.FissionFetcherSA, envNs)
if err != nil { if err != nil {
gpm.logger.Error("error creating rolebinding for package", gpm.logger.Error("error creating rolebinding for package",
zap.Error(err), zap.Error(err),
zap.String("role_binding", fission.PackageGetterRB), zap.String("role_binding", types.PackageGetterRB),
zap.String("package_name", pkg.Metadata.Name), zap.String("package_name", pkg.Metadata.Name),
zap.String("package_namespace", pkg.Metadata.Namespace)) zap.String("package_namespace", pkg.Metadata.Namespace))
return return
} }
gpm.logger.Debug("successfully set up rolebinding for fetcher service account", gpm.logger.Debug("successfully set up rolebinding for fetcher service account",
zap.String("service_account", fission.FissionFetcherSA), zap.String("service_account", types.FissionFetcherSA),
zap.String("service_account_namespace", envNs), zap.String("service_account_namespace", envNs),
zap.String("package_name", pkg.Metadata.Name), zap.String("package_name", pkg.Metadata.Name),
zap.String("package_namespace", pkg.Metadata.Namespace)) zap.String("package_namespace", pkg.Metadata.Namespace))
}, },
UpdateFunc: func(oldObj, newObj interface{}) { UpdateFunc: func(oldObj, newObj interface{}) {
oldPkg := oldObj.(*crd.Package) oldPkg := oldObj.(*fv1.Package)
newPkg := newObj.(*crd.Package) newPkg := newObj.(*fv1.Package)
if oldPkg.Metadata.ResourceVersion == newPkg.Metadata.ResourceVersion { if oldPkg.Metadata.ResourceVersion == newPkg.Metadata.ResourceVersion {
return return
@@ -85,20 +87,20 @@ func (gpm *GenericPoolManager) makePkgController(fissionClient *crd.FissionClien
envNs = newPkg.Spec.Environment.Namespace envNs = newPkg.Spec.Environment.Namespace
} }
err := fission.SetupRoleBinding(gpm.logger, kubernetesClient, fission.PackageGetterRB, err := utils.SetupRoleBinding(gpm.logger, kubernetesClient, types.PackageGetterRB,
newPkg.Metadata.Namespace, fission.PackageGetterCR, fission.ClusterRole, newPkg.Metadata.Namespace, types.PackageGetterCR, types.ClusterRole,
fission.FissionFetcherSA, envNs) types.FissionFetcherSA, envNs)
if err != nil { if err != nil {
gpm.logger.Error("error updating rolebinding for package", gpm.logger.Error("error updating rolebinding for package",
zap.Error(err), zap.Error(err),
zap.String("role_binding", fission.PackageGetterRB), zap.String("role_binding", types.PackageGetterRB),
zap.String("package_name", newPkg.Metadata.Name), zap.String("package_name", newPkg.Metadata.Name),
zap.String("package_namespace", newPkg.Metadata.Namespace)) zap.String("package_namespace", newPkg.Metadata.Namespace))
return return
} }
gpm.logger.Debug("successfully updated rolebinding for fetcher service account", gpm.logger.Debug("successfully updated rolebinding for fetcher service account",
zap.String("service_account", fission.FissionFetcherSA), zap.String("service_account", types.FissionFetcherSA),
zap.String("service_account_namespace", envNs), zap.String("service_account_namespace", envNs),
zap.String("package_name", newPkg.Metadata.Name), zap.String("package_name", newPkg.Metadata.Name),
zap.String("package_namespace", newPkg.Metadata.Namespace)) zap.String("package_namespace", newPkg.Metadata.Namespace))
@@ -20,13 +20,14 @@ import (
"strings" "strings"
"time" "time"
"github.com/fission/fission/pkg/utils"
"go.uber.org/zap" "go.uber.org/zap"
apiv1 "k8s.io/api/core/v1" apiv1 "k8s.io/api/core/v1"
meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes"
"github.com/fission/fission" "github.com/fission/fission/pkg/crd"
"github.com/fission/fission/crd" "github.com/fission/fission/pkg/types"
) )
var ( var (
@@ -119,7 +120,7 @@ func cleanupDeployments(logger *zap.Logger, client *kubernetes.Clientset, instan
return err return err
} }
for _, dep := range deploymentList.Items { for _, dep := range deploymentList.Items {
id, ok := dep.ObjectMeta.Labels[fission.EXECUTOR_INSTANCEID_LABEL] id, ok := dep.ObjectMeta.Labels[types.EXECUTOR_INSTANCEID_LABEL]
if ok && id != instanceId { if ok && id != instanceId {
logger.Info("cleaning up deployment", zap.String("deployment", dep.ObjectMeta.Name)) logger.Info("cleaning up deployment", zap.String("deployment", dep.ObjectMeta.Name))
err := client.ExtensionsV1beta1().Deployments(dep.ObjectMeta.Namespace).Delete(dep.ObjectMeta.Name, &delOpt) err := client.ExtensionsV1beta1().Deployments(dep.ObjectMeta.Namespace).Delete(dep.ObjectMeta.Name, &delOpt)
@@ -132,7 +133,7 @@ func cleanupDeployments(logger *zap.Logger, client *kubernetes.Clientset, instan
// ignore err // ignore err
} }
// Backward compatibility with older label name // Backward compatibility with older label name
pid, pok := dep.ObjectMeta.Labels[fission.POOLMGR_INSTANCEID_LABEL] pid, pok := dep.ObjectMeta.Labels[types.POOLMGR_INSTANCEID_LABEL]
if pok && pid != instanceId { if pok && pid != instanceId {
logger.Info("cleaning up deployment", zap.String("deployment", dep.ObjectMeta.Name)) logger.Info("cleaning up deployment", zap.String("deployment", dep.ObjectMeta.Name))
err := client.ExtensionsV1beta1().Deployments(dep.ObjectMeta.Namespace).Delete(dep.ObjectMeta.Name, &delOpt) err := client.ExtensionsV1beta1().Deployments(dep.ObjectMeta.Namespace).Delete(dep.ObjectMeta.Name, &delOpt)
@@ -154,7 +155,7 @@ func cleanupPods(logger *zap.Logger, client *kubernetes.Clientset, instanceId st
return err return err
} }
for _, pod := range podList.Items { for _, pod := range podList.Items {
id, ok := pod.ObjectMeta.Labels[fission.EXECUTOR_INSTANCEID_LABEL] id, ok := pod.ObjectMeta.Labels[types.EXECUTOR_INSTANCEID_LABEL]
if ok && id != instanceId { if ok && id != instanceId {
logger.Info("cleaning up pod", zap.String("pod", pod.ObjectMeta.Name)) logger.Info("cleaning up pod", zap.String("pod", pod.ObjectMeta.Name))
err := client.CoreV1().Pods(pod.ObjectMeta.Namespace).Delete(pod.ObjectMeta.Name, nil) err := client.CoreV1().Pods(pod.ObjectMeta.Namespace).Delete(pod.ObjectMeta.Name, nil)
@@ -167,7 +168,7 @@ func cleanupPods(logger *zap.Logger, client *kubernetes.Clientset, instanceId st
// ignore err // ignore err
} }
// Backward compatibility with older label name // Backward compatibility with older label name
pid, pok := pod.ObjectMeta.Labels[fission.POOLMGR_INSTANCEID_LABEL] pid, pok := pod.ObjectMeta.Labels[types.POOLMGR_INSTANCEID_LABEL]
if pok && pid != instanceId { if pok && pid != instanceId {
logger.Info("cleaning up pod", zap.String("pod", pod.ObjectMeta.Name)) logger.Info("cleaning up pod", zap.String("pod", pod.ObjectMeta.Name))
err := client.CoreV1().Pods(pod.ObjectMeta.Namespace).Delete(pod.ObjectMeta.Name, nil) err := client.CoreV1().Pods(pod.ObjectMeta.Namespace).Delete(pod.ObjectMeta.Name, nil)
@@ -190,7 +191,7 @@ func cleanupServices(logger *zap.Logger, client *kubernetes.Clientset, instanceI
return err return err
} }
for _, svc := range svcList.Items { for _, svc := range svcList.Items {
id, ok := svc.ObjectMeta.Labels[fission.EXECUTOR_INSTANCEID_LABEL] id, ok := svc.ObjectMeta.Labels[types.EXECUTOR_INSTANCEID_LABEL]
if ok && id != instanceId { if ok && id != instanceId {
logger.Info("cleaning up service", zap.String("service", svc.ObjectMeta.Name)) logger.Info("cleaning up service", zap.String("service", svc.ObjectMeta.Name))
err := client.CoreV1().Services(svc.ObjectMeta.Namespace).Delete(svc.ObjectMeta.Name, nil) err := client.CoreV1().Services(svc.ObjectMeta.Namespace).Delete(svc.ObjectMeta.Name, nil)
@@ -213,7 +214,7 @@ func cleanupHpa(logger *zap.Logger, client *kubernetes.Clientset, instanceId str
} }
for _, hpa := range hpaList.Items { for _, hpa := range hpaList.Items {
id, ok := hpa.ObjectMeta.Labels[fission.EXECUTOR_INSTANCEID_LABEL] id, ok := hpa.ObjectMeta.Labels[types.EXECUTOR_INSTANCEID_LABEL]
if ok && id != instanceId { if ok && id != instanceId {
logger.Info("cleaning up HPA", zap.String("hpa", hpa.ObjectMeta.Name)) logger.Info("cleaning up HPA", zap.String("hpa", hpa.ObjectMeta.Name))
err := client.AutoscalingV1().HorizontalPodAutoscalers(hpa.ObjectMeta.Namespace).Delete(hpa.ObjectMeta.Name, nil) err := client.AutoscalingV1().HorizontalPodAutoscalers(hpa.ObjectMeta.Namespace).Delete(hpa.ObjectMeta.Name, nil)
@@ -252,7 +253,7 @@ func CleanupRoleBindings(logger *zap.Logger, client *kubernetes.Clientset, fissi
} }
// ignore role-bindings not created by fission // ignore role-bindings not created by fission
if roleBinding.Name != fission.PackageGetterRB && roleBinding.Name != fission.SecretConfigMapGetterRB { if roleBinding.Name != types.PackageGetterRB && roleBinding.Name != types.SecretConfigMapGetterRB {
continue continue
} }
@@ -295,7 +296,7 @@ func CleanupRoleBindings(logger *zap.Logger, client *kubernetes.Clientset, fissi
break break
} }
if fn.Spec.InvokeStrategy.ExecutionStrategy.ExecutorType == fission.ExecutorTypeNewdeploy { if fn.Spec.InvokeStrategy.ExecutionStrategy.ExecutorType == types.ExecutorTypeNewdeploy {
ndmFunc = true ndmFunc = true
break break
} }
@@ -303,7 +304,7 @@ func CleanupRoleBindings(logger *zap.Logger, client *kubernetes.Clientset, fissi
// if its a package-getterr-rb, we have 2 kinds of SAs and each of them is handled differently // if its a package-getterr-rb, we have 2 kinds of SAs and each of them is handled differently
// else if its a secret-configmap-rb, we have only one SA which is fission-fetcher // else if its a secret-configmap-rb, we have only one SA which is fission-fetcher
if roleBinding.Name == fission.PackageGetterRB { if roleBinding.Name == types.PackageGetterRB {
// check if there is an env obj in saNs // check if there is an env obj in saNs
envList, err := fissionClient.Environments(saNs).List(meta_v1.ListOptions{}) envList, err := fissionClient.Environments(saNs).List(meta_v1.ListOptions{})
if err != nil { if err != nil {
@@ -316,9 +317,9 @@ func CleanupRoleBindings(logger *zap.Logger, client *kubernetes.Clientset, fissi
// if there's at least one function in the role-binding namespace with env reference // if there's at least one function in the role-binding namespace with env reference
// to the SA's namespace. // to the SA's namespace.
// if neither, then we can remove this SA from this role-binding // if neither, then we can remove this SA from this role-binding
if subj.Name == fission.FissionBuilderSA { if subj.Name == types.FissionBuilderSA {
if len(envList.Items) == 0 && !funcEnvReference { if len(envList.Items) == 0 && !funcEnvReference {
saToRemove[fission.MakeSAMapKey(subj.Name, subj.Namespace)] = true saToRemove[utils.MakeSAMapKey(subj.Name, subj.Namespace)] = true
} }
} }
@@ -326,18 +327,18 @@ func CleanupRoleBindings(logger *zap.Logger, client *kubernetes.Clientset, fissi
// we also need to check if there's at least one function with executor type New deploy // we also need to check if there's at least one function with executor type New deploy
// in the rolebinding's namespace. // in the rolebinding's namespace.
// if none of them are true, then remove this SA from this role-binding // if none of them are true, then remove this SA from this role-binding
if subj.Name == fission.FissionFetcherSA { if subj.Name == types.FissionFetcherSA {
if len(envList.Items) == 0 && !ndmFunc && !funcEnvReference { if len(envList.Items) == 0 && !ndmFunc && !funcEnvReference {
// remove SA from rolebinding // remove SA from rolebinding
saToRemove[fission.MakeSAMapKey(subj.Name, subj.Namespace)] = true saToRemove[utils.MakeSAMapKey(subj.Name, subj.Namespace)] = true
} }
} }
} else if roleBinding.Name == fission.SecretConfigMapGetterRB { } else if roleBinding.Name == types.SecretConfigMapGetterRB {
// if there's not even one function in the role-binding's namespace and there's not even // if there's not even one function in the role-binding's namespace and there's not even
// one function with env reference to the SA's namespace, then remove that SA // one function with env reference to the SA's namespace, then remove that SA
// from this role-binding // from this role-binding
if !ndmFunc && !funcEnvReference { if !ndmFunc && !funcEnvReference {
saToRemove[fission.MakeSAMapKey(subj.Name, subj.Namespace)] = true saToRemove[utils.MakeSAMapKey(subj.Name, subj.Namespace)] = true
} }
} }
} }
@@ -351,7 +352,7 @@ func CleanupRoleBindings(logger *zap.Logger, client *kubernetes.Clientset, fissi
zap.String("role_binding_namespace", roleBinding.Namespace)) zap.String("role_binding_namespace", roleBinding.Namespace))
// call this once in the end for each role-binding // call this once in the end for each role-binding
err = fission.RemoveSAFromRoleBindingWithRetries(logger, client, roleBinding.Name, roleBinding.Namespace, saToRemove) err = utils.RemoveSAFromRoleBindingWithRetries(logger, client, roleBinding.Name, roleBinding.Namespace, saToRemove)
if err != nil { if err != nil {
// if there's an error, we just log it and proceed with the next role-binding, hoping that this role-binding // if there's an error, we just log it and proceed with the next role-binding, hoping that this role-binding
// will be processed in next iteration. // will be processed in next iteration.
@@ -15,7 +15,8 @@ import (
"go.opencensus.io/plugin/ochttp" "go.opencensus.io/plugin/ochttp"
"golang.org/x/net/context/ctxhttp" "golang.org/x/net/context/ctxhttp"
"github.com/fission/fission" ferror "github.com/fission/fission/pkg/error"
"github.com/fission/fission/pkg/types"
) )
type ( type (
@@ -48,20 +49,20 @@ func (c *Client) getUploadUrl() string {
return c.url + "/upload" return c.url + "/upload"
} }
func (c *Client) Specialize(ctx context.Context, req *fission.FunctionSpecializeRequest) error { func (c *Client) Specialize(ctx context.Context, req *types.FunctionSpecializeRequest) error {
_, err := sendRequest(c.logger, ctx, c.httpClient, req, c.getSpecializeUrl()) _, err := sendRequest(c.logger, ctx, c.httpClient, req, c.getSpecializeUrl())
return err return err
} }
func (c *Client) Fetch(ctx context.Context, fr *fission.FunctionFetchRequest) error { func (c *Client) Fetch(ctx context.Context, fr *types.FunctionFetchRequest) error {
_, err := sendRequest(c.logger, ctx, c.httpClient, fr, c.getFetchUrl()) _, err := sendRequest(c.logger, ctx, c.httpClient, fr, c.getFetchUrl())
return err return err
} }
func (c *Client) Upload(ctx context.Context, fr *fission.ArchiveUploadRequest) (*fission.ArchiveUploadResponse, error) { func (c *Client) Upload(ctx context.Context, fr *types.ArchiveUploadRequest) (*types.ArchiveUploadResponse, error) {
body, err := sendRequest(c.logger, ctx, c.httpClient, fr, c.getUploadUrl()) body, err := sendRequest(c.logger, ctx, c.httpClient, fr, c.getUploadUrl())
uploadResp := fission.ArchiveUploadResponse{} uploadResp := types.ArchiveUploadResponse{}
err = json.Unmarshal(body, &uploadResp) err = json.Unmarshal(body, &uploadResp)
if err != nil { if err != nil {
return nil, err return nil, err
@@ -91,7 +92,7 @@ func sendRequest(logger *zap.Logger, ctx context.Context, httpClient *http.Clien
resp.Body.Close() resp.Body.Close()
return body, err return body, err
} }
err = fission.MakeErrorFromHTTP(resp) err = ferror.MakeErrorFromHTTP(resp)
} }
if i < maxRetries-1 { if i < maxRetries-1 {
@@ -7,14 +7,15 @@ import (
"os" "os"
"path/filepath" "path/filepath"
"github.com/fission/fission/pkg/types"
"github.com/fission/fission/pkg/utils"
apiv1 "k8s.io/api/core/v1" apiv1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource" "k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/intstr" "k8s.io/apimachinery/pkg/util/intstr"
"k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes"
"github.com/fission/fission" fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
crd "github.com/fission/fission/crd"
) )
type Config struct { type Config struct {
@@ -90,19 +91,19 @@ func MakeFetcherConfig(sharedMountPath string) (*Config, error) {
return &Config{ return &Config{
resourceRequirements: resources, resourceRequirements: resources,
fetcherImage: fetcherImage, fetcherImage: fetcherImage,
fetcherImagePullPolicy: fission.GetImagePullPolicy(fetcherImagePullPolicy), fetcherImagePullPolicy: utils.GetImagePullPolicy(fetcherImagePullPolicy),
sharedMountPath: sharedMountPath, sharedMountPath: sharedMountPath,
sharedSecretPath: "/secrets", sharedSecretPath: "/secrets",
sharedCfgMapPath: "/configs", sharedCfgMapPath: "/configs",
jaegerCollectorEndpoint: os.Getenv("OPENCENSUS_TRACE_JAEGER_COLLECTOR_ENDPOINT"), jaegerCollectorEndpoint: os.Getenv("OPENCENSUS_TRACE_JAEGER_COLLECTOR_ENDPOINT"),
serviceAccount: fission.FissionFetcherSA, serviceAccount: types.FissionFetcherSA,
}, nil }, nil
} }
func (cfg *Config) SetupServiceAccount(kubernetesClient *kubernetes.Clientset, namespace string, context interface{}) error { func (cfg *Config) SetupServiceAccount(kubernetesClient *kubernetes.Clientset, namespace string, context interface{}) error {
_, err := fission.SetupSA(kubernetesClient, fission.FissionFetcherSA, namespace) _, err := utils.SetupSA(kubernetesClient, types.FissionFetcherSA, namespace)
if err != nil { if err != nil {
log.Printf("Error : %v creating %s in ns : %s for: %#v", err, fission.FissionFetcherSA, namespace, context) log.Printf("Error : %v creating %s in ns : %s for: %#v", err, types.FissionFetcherSA, namespace, context)
return err return err
} }
@@ -113,7 +114,7 @@ func (cfg *Config) SharedMountPath() string {
return cfg.sharedMountPath return cfg.sharedMountPath
} }
func (cfg *Config) NewSpecializeRequest(fn *crd.Function, env *crd.Environment) fission.FunctionSpecializeRequest { func (cfg *Config) NewSpecializeRequest(fn *fv1.Function, env *fv1.Environment) types.FunctionSpecializeRequest {
// for backward compatibility, since most v1 env // for backward compatibility, since most v1 env
// still try to load user function from hard coded // still try to load user function from hard coded
// path /userfunc/user // path /userfunc/user
@@ -122,9 +123,9 @@ func (cfg *Config) NewSpecializeRequest(fn *crd.Function, env *crd.Environment)
targetFilename = string(fn.Metadata.UID) targetFilename = string(fn.Metadata.UID)
} }
return fission.FunctionSpecializeRequest{ return types.FunctionSpecializeRequest{
FetchReq: fission.FunctionFetchRequest{ FetchReq: types.FunctionFetchRequest{
FetchType: fission.FETCH_DEPLOYMENT, FetchType: types.FETCH_DEPLOYMENT,
Package: metav1.ObjectMeta{ Package: metav1.ObjectMeta{
Namespace: fn.Spec.Package.PackageRef.Namespace, Namespace: fn.Spec.Package.PackageRef.Namespace,
Name: fn.Spec.Package.PackageRef.Name, Name: fn.Spec.Package.PackageRef.Name,
@@ -134,7 +135,7 @@ func (cfg *Config) NewSpecializeRequest(fn *crd.Function, env *crd.Environment)
ConfigMaps: fn.Spec.ConfigMaps, ConfigMaps: fn.Spec.ConfigMaps,
KeepArchive: env.Spec.KeepArchive, KeepArchive: env.Spec.KeepArchive,
}, },
LoadReq: fission.FunctionLoadRequest{ LoadReq: types.FunctionLoadRequest{
FilePath: filepath.Join(cfg.sharedMountPath, targetFilename), FilePath: filepath.Join(cfg.sharedMountPath, targetFilename),
FunctionName: fn.Spec.Package.FunctionName, FunctionName: fn.Spec.Package.FunctionName,
FunctionMetadata: &fn.Metadata, FunctionMetadata: &fn.Metadata,
@@ -147,7 +148,7 @@ func (cfg *Config) AddFetcherToPodSpec(podSpec *apiv1.PodSpec, mainContainerName
return cfg.addFetcherToPodSpecWithCommand(podSpec, mainContainerName, cfg.fetcherCommand()) return cfg.addFetcherToPodSpecWithCommand(podSpec, mainContainerName, cfg.fetcherCommand())
} }
func (cfg *Config) AddSpecializingFetcherToPodSpec(podSpec *apiv1.PodSpec, mainContainerName string, fn *crd.Function, env *crd.Environment) error { func (cfg *Config) AddSpecializingFetcherToPodSpec(podSpec *apiv1.PodSpec, mainContainerName string, fn *fv1.Function, env *fv1.Environment) error {
specializeReq := cfg.NewSpecializeRequest(fn, env) specializeReq := cfg.NewSpecializeRequest(fn, env)
specializePayload, err := json.Marshal(specializeReq) specializePayload, err := json.Marshal(specializeReq)
if err != nil { if err != nil {
@@ -179,19 +180,19 @@ func (cfg *Config) fetcherCommand(extraArgs ...string) []string {
func (cfg *Config) volumesWithMounts() ([]apiv1.Volume, []apiv1.VolumeMount) { func (cfg *Config) volumesWithMounts() ([]apiv1.Volume, []apiv1.VolumeMount) {
volumes := []apiv1.Volume{ volumes := []apiv1.Volume{
{ {
Name: fission.SharedVolumeUserfunc, Name: types.SharedVolumeUserfunc,
VolumeSource: apiv1.VolumeSource{ VolumeSource: apiv1.VolumeSource{
EmptyDir: &apiv1.EmptyDirVolumeSource{}, EmptyDir: &apiv1.EmptyDirVolumeSource{},
}, },
}, },
{ {
Name: fission.SharedVolumeSecrets, Name: types.SharedVolumeSecrets,
VolumeSource: apiv1.VolumeSource{ VolumeSource: apiv1.VolumeSource{
EmptyDir: &apiv1.EmptyDirVolumeSource{}, EmptyDir: &apiv1.EmptyDirVolumeSource{},
}, },
}, },
{ {
Name: fission.SharedVolumeConfigmaps, Name: types.SharedVolumeConfigmaps,
VolumeSource: apiv1.VolumeSource{ VolumeSource: apiv1.VolumeSource{
EmptyDir: &apiv1.EmptyDirVolumeSource{}, EmptyDir: &apiv1.EmptyDirVolumeSource{},
}, },
@@ -199,15 +200,15 @@ func (cfg *Config) volumesWithMounts() ([]apiv1.Volume, []apiv1.VolumeMount) {
} }
mounts := []apiv1.VolumeMount{ mounts := []apiv1.VolumeMount{
{ {
Name: fission.SharedVolumeUserfunc, Name: types.SharedVolumeUserfunc,
MountPath: cfg.sharedMountPath, MountPath: cfg.sharedMountPath,
}, },
{ {
Name: fission.SharedVolumeSecrets, Name: types.SharedVolumeSecrets,
MountPath: cfg.sharedSecretPath, MountPath: cfg.sharedSecretPath,
}, },
{ {
Name: fission.SharedVolumeConfigmaps, Name: types.SharedVolumeConfigmaps,
MountPath: cfg.sharedCfgMapPath, MountPath: cfg.sharedCfgMapPath,
}, },
} }
@@ -296,7 +297,7 @@ func (cfg *Config) addFetcherToPodSpecWithCommand(podSpec *apiv1.PodSpec, mainCo
podSpec.Volumes = append(podSpec.Volumes, volumes...) podSpec.Volumes = append(podSpec.Volumes, volumes...)
podSpec.Containers = append(podSpec.Containers, c) podSpec.Containers = append(podSpec.Containers, c)
if podSpec.ServiceAccountName == "" { if podSpec.ServiceAccountName == "" {
podSpec.ServiceAccountName = fission.FissionFetcherSA podSpec.ServiceAccountName = types.FissionFetcherSA
} }
return nil return nil
@@ -26,9 +26,12 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes"
"github.com/fission/fission" fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
"github.com/fission/fission/crd" "github.com/fission/fission/pkg/crd"
storageSvcClient "github.com/fission/fission/storagesvc/client" ferror "github.com/fission/fission/pkg/error"
"github.com/fission/fission/pkg/info"
storageSvcClient "github.com/fission/fission/pkg/storagesvc/client"
"github.com/fission/fission/pkg/types"
) )
type ( type (
@@ -111,7 +114,7 @@ func downloadUrl(ctx context.Context, httpClient *http.Client, url string, local
return nil return nil
} }
func getChecksum(path string) (*fission.Checksum, error) { func getChecksum(path string) (*fv1.Checksum, error) {
f, err := os.Open(path) f, err := os.Open(path)
if err != nil { if err != nil {
return nil, err return nil, err
@@ -126,18 +129,18 @@ func getChecksum(path string) (*fission.Checksum, error) {
c := hex.EncodeToString(hasher.Sum(nil)) c := hex.EncodeToString(hasher.Sum(nil))
return &fission.Checksum{ return &fv1.Checksum{
Type: fission.ChecksumTypeSHA256, Type: fv1.ChecksumTypeSHA256,
Sum: c, Sum: c,
}, nil }, nil
} }
func verifyChecksum(fileChecksum, checksum *fission.Checksum) error { func verifyChecksum(fileChecksum, checksum *fv1.Checksum) error {
if checksum.Type != fission.ChecksumTypeSHA256 { if checksum.Type != fv1.ChecksumTypeSHA256 {
return fission.MakeError(fission.ErrorInvalidArgument, "Unsupported checksum type") return ferror.MakeError(ferror.ErrorInvalidArgument, "Unsupported checksum type")
} }
if fileChecksum.Sum != checksum.Sum { if fileChecksum.Sum != checksum.Sum {
return fission.MakeError(fission.ErrorChecksumFail, "Checksum validation failed") return ferror.MakeError(ferror.ErrorChecksumFail, "Checksum validation failed")
} }
return nil return nil
} }
@@ -155,7 +158,7 @@ func writeSecretOrConfigMap(dataMap map[string][]byte, dirPath string) error {
func (fetcher *Fetcher) VersionHandler(w http.ResponseWriter, r *http.Request) { func (fetcher *Fetcher) VersionHandler(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json; charset=utf-8") w.Header().Set("Content-Type", "application/json; charset=utf-8")
fmt.Fprintf(w, fission.BuildInfo().String()) fmt.Fprintf(w, info.BuildInfo().String())
} }
func (fetcher *Fetcher) FetchHandler(w http.ResponseWriter, r *http.Request) { func (fetcher *Fetcher) FetchHandler(w http.ResponseWriter, r *http.Request) {
@@ -177,7 +180,7 @@ func (fetcher *Fetcher) FetchHandler(w http.ResponseWriter, r *http.Request) {
http.Error(w, err.Error(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return return
} }
var req fission.FunctionFetchRequest var req types.FunctionFetchRequest
err = json.Unmarshal(body, &req) err = json.Unmarshal(body, &req)
if err != nil { if err != nil {
fetcher.logger.Error("error parsing request body", zap.Error(err)) fetcher.logger.Error("error parsing request body", zap.Error(err))
@@ -218,7 +221,7 @@ func (fetcher *Fetcher) SpecializeHandler(w http.ResponseWriter, r *http.Request
http.Error(w, err.Error(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return return
} }
var req fission.FunctionSpecializeRequest var req types.FunctionSpecializeRequest
err = json.Unmarshal(body, &req) err = json.Unmarshal(body, &req)
if err != nil { if err != nil {
fetcher.logger.Error("error parsing request body", zap.Error(err)) fetcher.logger.Error("error parsing request body", zap.Error(err))
@@ -239,7 +242,7 @@ func (fetcher *Fetcher) SpecializeHandler(w http.ResponseWriter, r *http.Request
// Fetch takes FetchRequest and makes the fetch call // Fetch takes FetchRequest and makes the fetch call
// It returns the HTTP code and error if any // It returns the HTTP code and error if any
func (fetcher *Fetcher) Fetch(ctx context.Context, req fission.FunctionFetchRequest) (int, error) { func (fetcher *Fetcher) Fetch(ctx context.Context, req types.FunctionFetchRequest) (int, error) {
// check that the requested filename is not an empty string and error out if so // check that the requested filename is not an empty string and error out if so
if len(req.Filename) == 0 { if len(req.Filename) == 0 {
e := "fetch request received for an empty file name" e := "fetch request received for an empty file name"
@@ -258,7 +261,7 @@ func (fetcher *Fetcher) Fetch(ctx context.Context, req fission.FunctionFetchRequ
tmpFile := req.Filename + ".tmp" tmpFile := req.Filename + ".tmp"
tmpPath := filepath.Join(fetcher.sharedVolumePath, tmpFile) tmpPath := filepath.Join(fetcher.sharedVolumePath, tmpFile)
if req.FetchType == fission.FETCH_URL { if req.FetchType == types.FETCH_URL {
// fetch the file and save it to the tmp path // fetch the file and save it to the tmp path
err := downloadUrl(ctx, fetcher.httpClient, req.Url, tmpPath) err := downloadUrl(ctx, fetcher.httpClient, req.Url, tmpPath)
if err != nil { if err != nil {
@@ -277,16 +280,16 @@ func (fetcher *Fetcher) Fetch(ctx context.Context, req fission.FunctionFetchRequ
return http.StatusInternalServerError, errors.Wrap(err, e) return http.StatusInternalServerError, errors.Wrap(err, e)
} }
var archive *fission.Archive var archive *fv1.Archive
if req.FetchType == fission.FETCH_SOURCE { if req.FetchType == types.FETCH_SOURCE {
archive = &pkg.Spec.Source archive = &pkg.Spec.Source
} else if req.FetchType == fission.FETCH_DEPLOYMENT { } else if req.FetchType == types.FETCH_DEPLOYMENT {
// sometimes, the user may invoke the function even before the source code is built into a deploy pkg. // sometimes, the user may invoke the function even before the source code is built into a deploy pkg.
// this results in executor sending a fetch request of type FETCH_DEPLOYMENT and since pkg.Spec.Deployment.Url will be empty, // this results in executor sending a fetch request of type FETCH_DEPLOYMENT and since pkg.Spec.Deployment.Url will be empty,
// we hit this "Get : unsupported protocol scheme "" error. // we hit this "Get : unsupported protocol scheme "" error.
// it may be useful to the user if we can send a more meaningful error in such a scenario. // it may be useful to the user if we can send a more meaningful error in such a scenario.
if pkg.Status.BuildStatus != fission.BuildStatusSucceeded && pkg.Status.BuildStatus != fission.BuildStatusNone { if pkg.Status.BuildStatus != types.BuildStatusSucceeded && pkg.Status.BuildStatus != types.BuildStatusNone {
e := fmt.Sprintf("cannot fetch deployment: package build status was not %q", fission.BuildStatusSucceeded) e := fmt.Sprintf("cannot fetch deployment: package build status was not %q", types.BuildStatusSucceeded)
fetcher.logger.Error(e, fetcher.logger.Error(e,
zap.String("package_name", pkg.Metadata.Name), zap.String("package_name", pkg.Metadata.Name),
zap.String("package_namespace", pkg.Metadata.Namespace), zap.String("package_namespace", pkg.Metadata.Namespace),
@@ -361,7 +364,7 @@ func (fetcher *Fetcher) Fetch(ctx context.Context, req fission.FunctionFetchRequ
// FetchSecretsAndCfgMaps fetches secrets and configmaps specified by user // FetchSecretsAndCfgMaps fetches secrets and configmaps specified by user
// It returns the HTTP code and error if any // It returns the HTTP code and error if any
func (fetcher *Fetcher) FetchSecretsAndCfgMaps(secrets []fission.SecretReference, cfgmaps []fission.ConfigMapReference) (int, error) { func (fetcher *Fetcher) FetchSecretsAndCfgMaps(secrets []fv1.SecretReference, cfgmaps []fv1.ConfigMapReference) (int, error) {
if len(secrets) > 0 { if len(secrets) > 0 {
for _, secret := range secrets { for _, secret := range secrets {
data, err := fetcher.kubeClient.CoreV1().Secrets(secret.Namespace).Get(secret.Name, metav1.GetOptions{}) data, err := fetcher.kubeClient.CoreV1().Secrets(secret.Namespace).Get(secret.Name, metav1.GetOptions{})
@@ -477,7 +480,7 @@ func (fetcher *Fetcher) UploadHandler(w http.ResponseWriter, r *http.Request) {
return return
} }
var req fission.ArchiveUploadRequest var req types.ArchiveUploadRequest
err = json.Unmarshal(body, &req) err = json.Unmarshal(body, &req)
if err != nil { if err != nil {
fetcher.logger.Error("error parsing request body", zap.Error(err)) fetcher.logger.Error("error parsing request body", zap.Error(err))
@@ -527,7 +530,7 @@ func (fetcher *Fetcher) UploadHandler(w http.ResponseWriter, r *http.Request) {
return return
} }
resp := fission.ArchiveUploadResponse{ resp := types.ArchiveUploadResponse{
ArchiveDownloadUrl: ssClient.GetUrl(fileID), ArchiveDownloadUrl: ssClient.GetUrl(fileID),
Checksum: *sum, Checksum: *sum,
} }
@@ -583,7 +586,7 @@ func (fetcher *Fetcher) unarchive(src string, dst string) error {
return nil return nil
} }
func (fetcher *Fetcher) SpecializePod(ctx context.Context, fetchReq fission.FunctionFetchRequest, loadReq fission.FunctionLoadRequest) error { func (fetcher *Fetcher) SpecializePod(ctx context.Context, fetchReq types.FunctionFetchRequest, loadReq types.FunctionLoadRequest) error {
startTime := time.Now() startTime := time.Now()
defer func() { defer func() {
elapsed := time.Since(startTime) elapsed := time.Since(startTime)
@@ -646,7 +649,7 @@ func (fetcher *Fetcher) SpecializePod(ctx context.Context, fetchReq fission.Func
} }
if err == nil { if err == nil {
err = fission.MakeErrorFromHTTP(resp) err = ferror.MakeErrorFromHTTP(resp)
} }
return errors.Wrap(err, "error specializing function pod") return errors.Wrap(err, "error specializing function pod")
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package main package fission_cli
import ( import (
"context" "context"
@@ -23,10 +23,10 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"github.com/fission/fission" fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
"github.com/fission/fission/controller/client" "github.com/fission/fission/pkg/controller/client"
"github.com/fission/fission/crd" "github.com/fission/fission/pkg/fission-cli/util"
"github.com/fission/fission/fission/util" "github.com/fission/fission/pkg/types"
) )
type ( type (
@@ -73,17 +73,17 @@ func (w *packageBuildWatcher) watch(ctx context.Context) {
// find packages that (a) are in the app spec and (b) have an interesting // find packages that (a) are in the app spec and (b) have an interesting
// build status (either succeeded or failed; not "none") // build status (either succeeded or failed; not "none")
keepWaiting := false keepWaiting := false
buildpkgs := make([]crd.Package, 0) buildpkgs := make([]fv1.Package, 0)
for _, pkg := range pkgs { for _, pkg := range pkgs {
_, ok := w.pkgMeta[mapKey(&pkg.Metadata)] _, ok := w.pkgMeta[mapKey(&pkg.Metadata)]
if !ok { if !ok {
continue continue
} }
if pkg.Status.BuildStatus == fission.BuildStatusNone { if pkg.Status.BuildStatus == types.BuildStatusNone {
continue continue
} }
if pkg.Status.BuildStatus == fission.BuildStatusPending || if pkg.Status.BuildStatus == types.BuildStatusPending ||
pkg.Status.BuildStatus == fission.BuildStatusRunning { pkg.Status.BuildStatus == types.BuildStatusRunning {
keepWaiting = true keepWaiting = true
} }
buildpkgs = append(buildpkgs, pkg) buildpkgs = append(buildpkgs, pkg)
@@ -95,10 +95,10 @@ func (w *packageBuildWatcher) watch(ctx context.Context) {
if _, printed := w.finished[k]; printed { if _, printed := w.finished[k]; printed {
continue continue
} }
if pkg.Status.BuildStatus == fission.BuildStatusFailed { if pkg.Status.BuildStatus == types.BuildStatusFailed {
w.finished[k] = true w.finished[k] = true
fmt.Printf("--- Build FAILED: ---\n%v\n------\n", pkg.Status.BuildLog) fmt.Printf("--- Build FAILED: ---\n%v\n------\n", pkg.Status.BuildLog)
} else if pkg.Status.BuildStatus == fission.BuildStatusSucceeded { } else if pkg.Status.BuildStatus == types.BuildStatusSucceeded {
w.finished[k] = true w.finished[k] = true
fmt.Printf("--- Build SUCCEEDED ---\n") fmt.Printf("--- Build SUCCEEDED ---\n")
if len(pkg.Status.BuildLog) > 0 { if len(pkg.Status.BuildLog) > 0 {
@@ -115,7 +115,7 @@ func (w *packageBuildWatcher) watch(ctx context.Context) {
} }
} }
func pkgKey(pkg *crd.Package) string { func pkgKey(pkg *fv1.Package) string {
// packages are mutable so we want to keep track of them by resource version // packages are mutable so we want to keep track of them by resource version
return fmt.Sprintf("%v:%v:%v", pkg.Metadata.Name, pkg.Metadata.Namespace, pkg.Metadata.ResourceVersion) return fmt.Sprintf("%v:%v:%v", pkg.Metadata.Name, pkg.Metadata.Namespace, pkg.Metadata.ResourceVersion)
} }
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package main package fission_cli
import ( import (
"fmt" "fmt"
@@ -25,10 +25,10 @@ import (
"github.com/urfave/cli" "github.com/urfave/cli"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"github.com/fission/fission" fv1 "github.com/fission/fission/pkg/apis/fission.io/v1"
"github.com/fission/fission/crd" "github.com/fission/fission/pkg/fission-cli/log"
"github.com/fission/fission/fission/log" "github.com/fission/fission/pkg/fission-cli/util"
"github.com/fission/fission/fission/util" "github.com/fission/fission/pkg/types"
) )
func canaryConfigCreate(c *cli.Context) error { func canaryConfigCreate(c *cli.Context) error {
@@ -64,7 +64,7 @@ func canaryConfigCreate(c *cli.Context) error {
} }
// check that the trigger has function reference type function weights // check that the trigger has function reference type function weights
if htTrigger.Spec.FunctionReference.Type != fission.FunctionReferenceTypeFunctionWeights { if htTrigger.Spec.FunctionReference.Type != types.FunctionReferenceTypeFunctionWeights {
log.Fatal("Canary config cannot be created for http triggers that do not reference functions by weights") log.Fatal("Canary config cannot be created for http triggers that do not reference functions by weights")
} }
@@ -87,22 +87,22 @@ func canaryConfigCreate(c *cli.Context) error {
} }
// finally create canaryCfg in the same namespace as the functions referenced // finally create canaryCfg in the same namespace as the functions referenced
canaryCfg := &crd.CanaryConfig{ canaryCfg := &fv1.CanaryConfig{
Metadata: metav1.ObjectMeta{ Metadata: metav1.ObjectMeta{
Name: canaryConfigName, Name: canaryConfigName,
Namespace: ns, Namespace: ns,
}, },
Spec: fission.CanaryConfigSpec{ Spec: fv1.CanaryConfigSpec{
Trigger: trigger, Trigger: trigger,
NewFunction: newFunc, NewFunction: newFunc,
OldFunction: oldFunc, OldFunction: oldFunc,
WeightIncrement: incrementStep, WeightIncrement: incrementStep,
WeightIncrementDuration: incrementInterval, WeightIncrementDuration: incrementInterval,
FailureThreshold: failureThreshold, FailureThreshold: failureThreshold,
FailureType: fission.FailureTypeStatusCode, FailureType: fv1.FailureTypeStatusCode,
}, },
Status: fission.CanaryConfigStatus{ Status: fv1.CanaryConfigStatus{
Status: fission.CanaryConfigStatusPending, Status: fv1.CanaryConfigStatusPending,
}, },
} }
@@ -183,7 +183,7 @@ func canaryConfigUpdate(c *cli.Context) error {
} }
if updateNeeded { if updateNeeded {
canaryCfg.Status.Status = fission.CanaryConfigStatusPending canaryCfg.Status.Status = fv1.CanaryConfigStatusPending
_, err = client.CanaryConfigUpdate(canaryCfg) _, err = client.CanaryConfigUpdate(canaryCfg)
util.CheckErr(err, "update canary config") util.CheckErr(err, "update canary config")

Some files were not shown because too many files have changed in this diff Show More