---
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: glusterfile
  labels:
    k8s-app: storage-provisioner-gluster
    kubernetes.io/minikube-addons: storage-provisioner-gluster
    addonmanager.kubernetes.io/mode: EnsureExists
  annotations:
    storageclass.kubernetes.io/is-default-class: "true"
provisioner: gluster.org/glusterfile
reclaimPolicy: Delete
parameters:
  resturl: "http://heketi.storage-gluster.svc.cluster.local:8080"
  restuser: admin
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: glusterfile-provisioner-runner
  labels:
    k8s-app: storage-provisioner-gluster
    kubernetes.io/minikube-addons: storage-provisioner-gluster
    addonmanager.kubernetes.io/mode: Reconcile
rules:
  - apiGroups: [""]
    resources: ["persistentvolumes"]
    verbs: ["get", "list", "watch", "create", "delete"]
  - apiGroups: [""]
    resources: ["persistentvolumeclaims"]
    verbs: ["get", "list", "watch", "update"]
  - apiGroups: ["storage.k8s.io"]
    resources: ["storageclasses"]
    verbs: ["get", "list", "watch"]
  - apiGroups: [""]
    resources: ["events"]
    verbs: ["list", "watch", "create", "update", "patch"]
  - apiGroups: [""]
    resources: ["services"]
    verbs: ["get","create","delete"]
  - apiGroups: [""]
    resources: ["secrets"]
    verbs: ["get"]
  - apiGroups: [""]
    resources: ["routes"]
    verbs: ["get", "list"]
  - apiGroups: [""]
    resources: ["endpoints"]
    verbs: ["get", "create","delete"]
---
apiVersion: v1
kind: ServiceAccount
metadata:
  namespace: storage-gluster
  name: glusterfile-provisioner
  labels:
    k8s-app: storage-provisioner-gluster
    kubernetes.io/minikube-addons: storage-provisioner-gluster
    addonmanager.kubernetes.io/mode: Reconcile
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: glusterfile-provisioner
  labels:
    k8s-app: storage-provisioner-gluster
    kubernetes.io/minikube-addons: storage-provisioner-gluster
    addonmanager.kubernetes.io/mode: Reconcile
roleRef:
  kind: ClusterRole
  name: glusterfile-provisioner-runner
  apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
  namespace: storage-gluster
  name: glusterfile-provisioner
---
kind: Deployment
apiVersion: apps/v1
metadata:
  namespace: storage-gluster
  name: glusterfile-provisioner
  labels:
    k8s-app: storage-provisioner-gluster
    kubernetes.io/minikube-addons: storage-provisioner-gluster
    addonmanager.kubernetes.io/mode: Reconcile
  annotations:
    description: Defines how to deploy the glusterfile provisioner pod.
spec:
  replicas: 1
  selector:
    matchLabels:
      glusterfs: file-provisioner-pod
      glusterfile: provisioner-pod
  strategy:
    type: Recreate
  template:
    metadata:
      namespace: storage-gluster
      name: glusterfile-provisioner
      labels:
        glusterfs: file-provisioner-pod
        glusterfile: provisioner-pod
    spec:
      serviceAccountName: glusterfile-provisioner
      containers:
      - name: glusterfile-provisioner
        image: {{.CustomRegistries.GlusterfileProvisioner  | default .ImageRepository | default .Registries.GlusterfileProvisioner }}{{.Images.GlusterfileProvisioner}}
        imagePullPolicy: IfNotPresent
        env:
        - name: PROVISIONER_NAME
          value: gluster.org/glusterfile
