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