#apiVersion: policy/v1beta1
#kind: PodSecurityPolicy
#metadata:
#  name: longhorn-uninstall-psp
#spec:
#  privileged: true
#  allowPrivilegeEscalation: true
#  requiredDropCapabilities:
#  - NET_RAW
#  allowedCapabilities:
#  - SYS_ADMIN
#  hostNetwork: false
#  hostIPC: false
#  hostPID: true
#  runAsUser:
#    rule: RunAsAny
#  seLinux:
#    rule: RunAsAny
#  fsGroup:
#    rule: RunAsAny
#  supplementalGroups:
#    rule: RunAsAny
#  volumes:
#  - configMap
#  - downwardAPI
#  - emptyDir
#  - secret
#  - projected
#  - hostPath
#---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: longhorn-uninstall-service-account
  namespace: longhorn-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: longhorn-uninstall-role
rules:
  - apiGroups:
      - apiextensions.k8s.io
    resources:
      - customresourcedefinitions
    verbs:
      - "*"
  - apiGroups: [""]
    resources: ["pods", "persistentvolumes", "persistentvolumeclaims", "nodes", "configmaps", "secrets", "services", "endpoints"]
    verbs: ["*"]
  - apiGroups: ["apps"]
    resources: ["daemonsets", "statefulsets", "deployments"]
    verbs: ["*"]
  - apiGroups: ["batch"]
    resources: ["jobs", "cronjobs"]
    verbs: ["*"]
  - apiGroups: ["policy"]
    resources: ["poddisruptionbudgets"]
    verbs: ["*"]
  - apiGroups: ["scheduling.k8s.io"]
    resources: ["priorityclasses"]
    verbs: ["watch", "list"]
  - apiGroups: ["storage.k8s.io"]
    resources: ["csidrivers", "storageclasses", "volumeattachments"]
    verbs: ["*"]
  - apiGroups: ["longhorn.io"]
    resources: ["volumes", "engines", "replicas", "settings", "engineimages", "nodes", "instancemanagers", "sharemanagers",
                "backingimages", "backingimagemanagers", "backingimagedatasources", "backuptargets", "backupvolumes", "backups",
                "recurringjobs", "orphans", "snapshots", "supportbundles", "systembackups", "systemrestores", "volumeattachments"]
    verbs: ["*"]
  - apiGroups: ["coordination.k8s.io"]
    resources: ["leases"]
    verbs: ["*"]
  #  - apiGroups: ["policy"]
  #    resources: ["podsecuritypolicies"]
  #    verbs: ["use"]
  #    resourceNames: ["longhorn-uninstall-psp"]
  - apiGroups: ["admissionregistration.k8s.io"]
    resources: ["mutatingwebhookconfigurations", "validatingwebhookconfigurations"]
    verbs: ["get", "delete"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: longhorn-uninstall-bind
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: longhorn-uninstall-role
subjects:
  - kind: ServiceAccount
    name: longhorn-uninstall-service-account
    namespace: longhorn-system
---
apiVersion: batch/v1
kind: Job
metadata:
  name: longhorn-uninstall
  namespace: longhorn-system
spec:
  activeDeadlineSeconds: 900
  backoffLimit: 1
  template:
    metadata:
      name: longhorn-uninstall
    spec:
      containers:
        - name: longhorn-uninstall
          image: longhornio/longhorn-manager:master-head
          imagePullPolicy: IfNotPresent
          command:
            - longhorn-manager
            - uninstall
            - --force
          env:
            - name: LONGHORN_NAMESPACE
              value: longhorn-system
      restartPolicy: Never
      serviceAccountName: longhorn-uninstall-service-account
#      imagePullSecrets:
#      - name: ""
#      priorityClassName:
#      tolerations:
#        - key: "key"
#          operator: "Equal"
#          value: "value"
#          effect: "NoSchedule"
#      nodeSelector:
#        label-key1: "label-value1"
#        label-key2: "label-value2"
