app-manager: helm chart
issue: #7
diff --git a/appmanager/chart/Chart.yaml b/appmanager/chart/Chart.yaml
new file mode 100644
index 0000000..579f098
--- /dev/null
+++ b/appmanager/chart/Chart.yaml
@@ -0,0 +1,10 @@
+apiVersion: v2
+name: pcloud-app-manager
+version: 0.0.1
+description: PCloud Application Manager
+type: application
+sources:
+ - https://github.com/giolekva/pcloud/tree/master/appmanager
+mainteners:
+ - name: Giorgi Lekveishvili
+ url: https://github.com/giolekva
diff --git a/appmanager/chart/README.md b/appmanager/chart/README.md
new file mode 100644
index 0000000..cd71449
--- /dev/null
+++ b/appmanager/chart/README.md
@@ -0,0 +1,3 @@
+# PCloud Application Manager
+
+Provides backend and web frontend for installing application on PCloud environment.
\ No newline at end of file
diff --git a/appmanager/chart/templates/cluster-role-binding.yaml b/appmanager/chart/templates/cluster-role-binding.yaml
new file mode 100644
index 0000000..c156933
--- /dev/null
+++ b/appmanager/chart/templates/cluster-role-binding.yaml
@@ -0,0 +1,12 @@
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ name: deploy-apps-to-sa
+subjects:
+ - kind: ServiceAccount
+ name: default
+ namespace: {{ .Release.Namespace }}
+roleRef:
+ kind: ClusterRole
+ name: deploy-apps
+ apiGroup: rbac.authorization.k8s.io
diff --git a/appmanager/chart/templates/cluster-role.yaml b/appmanager/chart/templates/cluster-role.yaml
new file mode 100644
index 0000000..efe4d3c
--- /dev/null
+++ b/appmanager/chart/templates/cluster-role.yaml
@@ -0,0 +1,17 @@
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: deploy-apps
+rules:
+ - apiGroups: [""]
+ resources: ["namespaces", "services", "pods", "secrets", "serviceaccounts", "configmaps", "persistentvolumeclaims"]
+ verbs: ["*"]
+ - apiGroups: ["apps"]
+ resources: ["deployments", "statefulsets"]
+ verbs: ["*"]
+ - apiGroups: ["traefik.containo.us"]
+ resources: ["ingressroutes"]
+ verbs: ["*"]
+ - apiGroups: ["rbac.authorization.k8s.io"]
+ resources: ["roles", "rolebindings"]
+ verbs: ["*"]
diff --git a/appmanager/chart/templates/ingress.yaml b/appmanager/chart/templates/ingress.yaml
new file mode 100644
index 0000000..c37ada0
--- /dev/null
+++ b/appmanager/chart/templates/ingress.yaml
@@ -0,0 +1,17 @@
+apiVersion: traefik.containo.us/v1alpha1
+kind: IngressRoute
+metadata:
+ name: app-manager-ingress
+ namespace: {{ .Release.Namespace }}
+spec:
+ entryPoints:
+ - web
+ routes:
+ - kind: Rule
+ match: PathPrefix(`{{ .Values.ingressPathPrefix }}`)
+ services:
+ - kind: Service
+ name: {{ .Values.serviceName }}
+ namespace: {{ .Release.Namespace }}
+ passHostHeader: true
+ port: {{ .Values.servicePort }}
diff --git a/appmanager/chart/templates/service.yaml b/appmanager/chart/templates/service.yaml
new file mode 100644
index 0000000..010a915
--- /dev/null
+++ b/appmanager/chart/templates/service.yaml
@@ -0,0 +1,13 @@
+kind: Service
+apiVersion: v1
+metadata:
+ name: {{ .Values.serviceName }}
+ namespace: {{ .Release.Namespace }}
+spec:
+ type: ClusterIP
+ selector:
+ app: app-manager
+ ports:
+ - nodePort:
+ port: {{ .Values.servicePort }}
+ targetPort: {{ .Values.containerPort }}
diff --git a/appmanager/chart/templates/statefulset.yaml b/appmanager/chart/templates/statefulset.yaml
new file mode 100644
index 0000000..474d486
--- /dev/null
+++ b/appmanager/chart/templates/statefulset.yaml
@@ -0,0 +1,36 @@
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+ name: app-manager
+ namespace: {{ .Release.Namespace }}
+spec:
+ selector:
+ matchLabels:
+ app: app-manager
+ serviceName: {{ .Values.serviceName }}
+ replicas: {{ .Values.replicas }}
+ template:
+ metadata:
+ labels:
+ app: app-manager
+ spec:
+ serviceAccountName: default
+ containers:
+ - name: app-manager
+ image: {{ .Values.image.name }}:{{ .Values.image.tag }}
+ imagePullPolicy: {{ .Values.image.pullPolicy }}
+ volumeMounts:
+ - name: state
+ mountPath: /pcloud/app-manager
+ ports:
+ - containerPort: {{ .Values.containerPort }}
+ command: ["app-manager", "--logtostderr", "--port={{ .Values.containerPort }}", "--api_addr=http://api.pcloud.svc:1111/add_schema", "--helm_bin=/usr/bin/helm", "--manager_store_file=/pcloud/app-manager/manager-state"]
+ volumeClaimTemplates:
+ - metadata:
+ name: state
+ spec:
+ accessModes: [ "ReadWriteOnce" ]
+ storageClassName: {{ .Values.storage.className }}
+ resources:
+ requests:
+ storage: {{ .Values.storage.size }}
diff --git a/appmanager/chart/values.yaml b/appmanager/chart/values.yaml
new file mode 100644
index 0000000..c584ee0
--- /dev/null
+++ b/appmanager/chart/values.yaml
@@ -0,0 +1,12 @@
+serviceName: app-manager
+replicas: 1
+image:
+ name: giolekva/pcloud-app-manager
+ tag: latest
+ pullPolicy: Always
+servicePort: 80
+containerPort: 1234
+ingressPathPrefix: /app-manager
+storage:
+ size: 10Mi
+ className: ""
\ No newline at end of file