diff --git a/charts/fission-all/templates/deployment.yaml b/charts/fission-all/templates/deployment.yaml index 9943af44..f51c94e8 100644 --- a/charts/fission-all/templates/deployment.yaml +++ b/charts/fission-all/templates/deployment.yaml @@ -484,3 +484,36 @@ spec: - name: MESSAGE_QUEUE_URL value: nats://{{ .Values.nats.authToken }}@nats-streaming:4222 serviceAccount: fission-svc + +--- +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: storagesvc + labels: + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" +spec: + replicas: 1 + template: + metadata: + labels: + svc: storagesvc + spec: + containers: + - name: storagesvc + image: "{{ .Values.image }}:{{ .Values.imageTag }}" + imagePullPolicy: {{ .Values.pullPolicy }} + command: ["/fission-bundle"] + args: ["--storageServicePort", "8000", "--filePath", "/fission"] + volumeMounts: + - name: fission-storage + mountPath: /fission + serviceAccount: fission-svc + volumes: + - name: fission-storage + {{- if .Values.persistence.enabled }} + persistentVolumeClaim: + claimName: {{ .Values.persistence.existingClaim | default "fission-storage-pvc" }} + {{- else }} + emptyDir: {} + {{- end -}} diff --git a/charts/fission-all/templates/pvc.yaml b/charts/fission-all/templates/pvc.yaml new file mode 100644 index 00000000..d8c6aa51 --- /dev/null +++ b/charts/fission-all/templates/pvc.yaml @@ -0,0 +1,23 @@ +{{- if and .Values.persistence.enabled (not .Values.persistence.existingClaim) }} +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: fission-storage-pvc + labels: + app: fission-storage + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + release: "{{ .Release.Name }}" + annotations: + {{- if .Values.persistence.storageClass }} + volume.beta.kubernetes.io/storage-class: {{ .Values.persistence.storageClass | quote }} + {{- else }} + volume.alpha.kubernetes.io/storage-class: default + {{- end }} +spec: + accessModes: + - {{ .Values.persistence.accessMode | quote }} + resources: + requests: + storage: {{ .Values.persistence.size | quote }} + +{{- end }} diff --git a/charts/fission-all/templates/svc.yaml b/charts/fission-all/templates/svc.yaml index 5f633c9b..04bea49d 100644 --- a/charts/fission-all/templates/svc.yaml +++ b/charts/fission-all/templates/svc.yaml @@ -65,3 +65,18 @@ spec: selector: svc: nats-streaming +--- +apiVersion: v1 +kind: Service +metadata: + name: storagesvc + labels: + svc: storagesvc + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" +spec: + type: ClusterIP + ports: + - port: 80 + targetPort: 8000 + selector: + svc: storagesvc diff --git a/charts/fission-all/values.yaml b/charts/fission-all/values.yaml index 54c4f71f..2c0b18fa 100644 --- a/charts/fission-all/values.yaml +++ b/charts/fission-all/values.yaml @@ -48,3 +48,13 @@ nats: authToken: "defaultFissionAuthToken" clusterID: "fissionMQTrigger" + +## Persist data to a persistent volume. +persistence: + enabled: true + ## If defined, volume.beta.kubernetes.io/storage-class: + ## Default: volume.alpha.kubernetes.io/storage-class: default + ## + # storageClass: + accessMode: ReadWriteOnce + size: 8Gi diff --git a/charts/fission-core/templates/deployment.yaml b/charts/fission-core/templates/deployment.yaml index 6ef68a82..2589729b 100644 --- a/charts/fission-core/templates/deployment.yaml +++ b/charts/fission-core/templates/deployment.yaml @@ -285,3 +285,36 @@ spec: command: ["/fission-bundle"] args: ["--timer"] serviceAccount: fission-svc + +--- +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: storagesvc + labels: + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" +spec: + replicas: 1 + template: + metadata: + labels: + svc: storagesvc + spec: + containers: + - name: storagesvc + image: "{{ .Values.image }}:{{ .Values.imageTag }}" + imagePullPolicy: {{ .Values.pullPolicy }} + command: ["/fission-bundle"] + args: ["--storageServicePort", "8000", "--filePath", "/fission"] + volumeMounts: + - name: fission-storage + mountPath: /fission + serviceAccount: fission-svc + volumes: + - name: fission-storage + {{- if .Values.persistence.enabled }} + persistentVolumeClaim: + claimName: {{ .Values.persistence.existingClaim | default "fission-storage-pvc" }} + {{- else }} + emptyDir: {} + {{- end -}} diff --git a/charts/fission-core/templates/pvc.yaml b/charts/fission-core/templates/pvc.yaml new file mode 100644 index 00000000..d8c6aa51 --- /dev/null +++ b/charts/fission-core/templates/pvc.yaml @@ -0,0 +1,23 @@ +{{- if and .Values.persistence.enabled (not .Values.persistence.existingClaim) }} +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: fission-storage-pvc + labels: + app: fission-storage + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + release: "{{ .Release.Name }}" + annotations: + {{- if .Values.persistence.storageClass }} + volume.beta.kubernetes.io/storage-class: {{ .Values.persistence.storageClass | quote }} + {{- else }} + volume.alpha.kubernetes.io/storage-class: default + {{- end }} +spec: + accessModes: + - {{ .Values.persistence.accessMode | quote }} + resources: + requests: + storage: {{ .Values.persistence.size | quote }} + +{{- end }} diff --git a/charts/fission-core/templates/svc.yaml b/charts/fission-core/templates/svc.yaml index 70f16f0c..7a63273e 100644 --- a/charts/fission-core/templates/svc.yaml +++ b/charts/fission-core/templates/svc.yaml @@ -29,4 +29,20 @@ spec: targetPort: 8888 nodePort: {{ .Values.controllerPort }} selector: - svc: controller \ No newline at end of file + svc: controller + +--- +apiVersion: v1 +kind: Service +metadata: + name: storagesvc + labels: + svc: storagesvc + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" +spec: + type: ClusterIP + ports: + - port: 80 + targetPort: 8000 + selector: + svc: storagesvc diff --git a/charts/fission-core/values.yaml b/charts/fission-core/values.yaml index 5690cb7c..b6306cb6 100644 --- a/charts/fission-core/values.yaml +++ b/charts/fission-core/values.yaml @@ -7,19 +7,19 @@ serviceType: LoadBalancer ## Fission image repository -image: fission/fission-bundle +image: minikube/fission-bundle ## Fission image version -imageTag: v0.2.0-20170822 +imageTag: testing ## Image pull policy pullPolicy: IfNotPresent ## Fission fetcher repository -fetcherImage: fission/fetcher +fetcherImage: minikube/fetcher ## Fission fetcher image version -fetcherImageTag: v0.2.0-20170822 +fetcherImageTag: testing ## Port at which Fission controller service should be exposed controllerPort: 31313 @@ -33,3 +33,13 @@ functionNamespace: fission-function ## Set up openshift RBAC rule openshift: false + +## Persist data to a persistent volume. +persistence: + enabled: true + ## If defined, volume.beta.kubernetes.io/storage-class: + ## Default: volume.alpha.kubernetes.io/storage-class: default + ## + # storageClass: + accessMode: ReadWriteOnce + size: 8Gi diff --git a/controller/storagesvc.go b/controller/storagesvc.go index 7cd965d4..faab0d8e 100644 --- a/controller/storagesvc.go +++ b/controller/storagesvc.go @@ -25,7 +25,7 @@ import ( ) func (api *API) StorageServiceProxy(w http.ResponseWriter, r *http.Request) { - u := api.storageServiceUrl + "/v1/archive" + u := api.storageServiceUrl ssUrl, err := url.Parse(u) if err != nil { msg := fmt.Sprintf("Error parsing url %v: %v", u, err) @@ -33,6 +33,13 @@ func (api *API) StorageServiceProxy(w http.ResponseWriter, r *http.Request) { http.Error(w, msg, 500) return } - proxy := httputil.NewSingleHostReverseProxy(ssUrl) + director := func(req *http.Request) { + req.URL.Scheme = ssUrl.Scheme + req.URL.Host = ssUrl.Host + req.URL.Path = "/v1/archive" + } + proxy := &httputil.ReverseProxy{ + Director: director, + } proxy.ServeHTTP(w, r) } diff --git a/fission-bundle/main.go b/fission-bundle/main.go index 659d7576..14639059 100644 --- a/fission-bundle/main.go +++ b/fission-bundle/main.go @@ -173,7 +173,7 @@ Options: runMessageQueueMgr(routerUrl) } - if arguments["--storageServicePort"] == true { + if arguments["--storageServicePort"] != nil { port := getPort(arguments["--storageServicePort"]) filePath := arguments["--filePath"].(string) runStorageSvc(port, filePath) diff --git a/storagesvc/client/storagesvc_test.go b/storagesvc/client/storagesvc_test.go index 36bc6091..7e49ec9b 100644 --- a/storagesvc/client/storagesvc_test.go +++ b/storagesvc/client/storagesvc_test.go @@ -96,5 +96,5 @@ func TestStorageService(t *testing.T) { } // cleanup /tmp - os.RemoveAll(fmt.Sprintf("/tmp/", testId)) + os.RemoveAll(fmt.Sprintf("/tmp/%v", testId)) } diff --git a/storagesvc/storagesvc.go b/storagesvc/storagesvc.go index 20057c22..c23a6704 100644 --- a/storagesvc/storagesvc.go +++ b/storagesvc/storagesvc.go @@ -132,6 +132,7 @@ func (ss *StorageService) deleteHandler(w http.ResponseWriter, r *http.Request) fileId, err := ss.getIdFromRequest(r) if err != nil { http.Error(w, err.Error(), 400) + return } err = ss.container.RemoveItem(fileId) @@ -148,6 +149,7 @@ func (ss *StorageService) downloadHandler(w http.ResponseWriter, r *http.Request fileId, err := ss.getIdFromRequest(r) if err != nil { http.Error(w, err.Error(), 400) + return } // Get the file (called "item" in stow's jargon), open it,