diff --git a/generate-resources.sh b/generate-resources.sh deleted file mode 100755 index a527e70b..00000000 --- a/generate-resources.sh +++ /dev/null @@ -1,119 +0,0 @@ -#!/bin/bash -# This file is part of MinIO DirectPV -# Copyright (c) 2024 MinIO, Inc. -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . - -ME=$(basename "$0"); export ME -cd "$(dirname "$0")" || exit 255 - -set -o errexit -set -o nounset -set -o pipefail - -declare BUILD_VERSION KUBECTL_DIRECTPV KUSTOMIZE - -function init() { - if [ "$#" -ne 1 ]; then - cat < - -EXAMPLE: - $ ${ME} 4.1.4 -EOF - exit 255 - fi - - # assign after trimming 'v' - BUILD_VERSION="${1/v/}" - - kubectl_directpv="kubectl-directpv_${BUILD_VERSION}_$(go env GOOS)_$(go env GOARCH)" - KUBECTL_DIRECTPV="${PWD}/${kubectl_directpv}" - if [ ! -f "${KUBECTL_DIRECTPV}" ]; then - echo "Downloading ${kubectl_directpv}" - curl --silent --location --insecure --fail --output "${kubectl_directpv}" "https://github.com/minio/directpv/releases/download/v${BUILD_VERSION}/${kubectl_directpv}" - chmod a+x "${kubectl_directpv}" - fi - - if which kustomize >/dev/null 2>&1; then - KUSTOMIZE=kustomize - fi - if [ -f ./kustomize ]; then - KUSTOMIZE="${PWD}/kustomize" - fi - if [ -z "${KUSTOMIZE=}" ]; then - KUSTOMIZE="${PWD}/kustomize" - echo "Downloading kustomize" - release=$(curl -sfL "https://api.github.com/repos/kubernetes-sigs/kustomize/releases/latest" | awk '/tag_name/ { print substr($2, 12, length($2)-13) }') - curl --silent --location --insecure --fail "https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize%2F${release}/kustomize_${release}_$(go env GOOS)_$(go env GOARCH).tar.gz" | tar -zxf - - fi -} - -function git_commit() { - case "$(git describe --always --dirty)" in - *dirty) - git commit --quiet --all -m "$*" - git push --quiet - ;; - esac -} - -function update_resources() { - path="resources/base" - declare directpv_args - echo "$@" - for arg in "$@"; do - if [ "${arg}" == "--legacy" ]; then - path="resources/legacy/base" - elif [ "${arg}" == "--openshift" ]; then - path="resources/openshift/base" - fi - directpv_args+=("${arg}") - done - - declare -A resources - "${KUBECTL_DIRECTPV}" install "${directpv_args[@]}" -o yaml | sed -e 's/^---/~~~/g' | awk '{f="file" NR; print $0 > f}' RS='~~~' - for file in file*; do - name=$(awk '/^kind:/ { print $NF }' "${file}") - if [ "${name}" == "CustomResourceDefinition" ]; then - name=$(awk '/^ name:/ { print $NF }' "${file}") - fi - if [[ -v "resources[$name]" ]]; then - name+=-$(awk '/^ name:/ { print $NF }' "${file}") - fi - if [ -n "$name" ]; then - resources["$name"]="" - fi - if [ -n "${name}" ]; then - mv "${file}" "${PWD}/${path}/${name}.yaml" - else - rm "${file}" - fi - done - - git_commit "Updated resources for v${BUILD_VERSION}" -} - -function main() { - rm -rf resources/base/* - update_resources - rm -rf resources/legacy/base/* - update_resources --legacy - rm -rf resources/openshift/base/* - update_resources --openshift -} - -init "$@" -main "$@" diff --git a/pkg/admin/installer/daemonset.go b/pkg/admin/installer/daemonset.go index 627b1122..c3c6d546 100644 --- a/pkg/admin/installer/daemonset.go +++ b/pkg/admin/installer/daemonset.go @@ -297,7 +297,7 @@ func (t daemonsetTask) doCreateDaemonset(ctx context.Context, args *Args) (err e } } if selectorValue == "" { - selectorValue = fmt.Sprintf("%v-%v", consts.Identity, getRandSuffix()) + selectorValue = fmt.Sprintf("%v-%v", consts.Identity, consts.NodeServerName) } daemonset := newDaemonset(podSpec, consts.NodeServerName, selectorValue, args) @@ -360,7 +360,7 @@ func (t daemonsetTask) doCreateLegacyDaemonset(ctx context.Context, args *Args) } } if selectorValue == "" { - selectorValue = fmt.Sprintf("%v-%v", consts.Identity, getRandSuffix()) + selectorValue = fmt.Sprintf("%v-%v", consts.Identity, consts.LegacyNodeServerName) } daemonset := newDaemonset(podSpec, consts.LegacyNodeServerName, selectorValue, args) diff --git a/pkg/admin/installer/deployment.go b/pkg/admin/installer/deployment.go index 429993a5..1b14c272 100644 --- a/pkg/admin/installer/deployment.go +++ b/pkg/admin/installer/deployment.go @@ -195,7 +195,7 @@ func (t deploymentTask) doCreateDeployment(ctx context.Context, args *Args, lega } } if selectorValue == "" { - selectorValue = fmt.Sprintf("%v-%v", consts.ControllerServerName, getRandSuffix()) + selectorValue = fmt.Sprintf("%v-%v", consts.ControllerServerName, name) } replicas := int32(3) diff --git a/pkg/admin/installer/utils.go b/pkg/admin/installer/utils.go index 3dd42bc7..4fb638c4 100644 --- a/pkg/admin/installer/utils.go +++ b/pkg/admin/installer/utils.go @@ -18,10 +18,7 @@ package installer import ( "context" - "crypto/rand" - "encoding/base32" "path" - "strings" "github.com/minio/directpv/pkg/k8s" "k8s.io/klog/v2" @@ -31,14 +28,6 @@ func newPluginsSocketDir(kubeletDir, name string) string { return path.Join(kubeletDir, "plugins", k8s.SanitizeResourceName(name)) } -func getRandSuffix() string { - b := make([]byte, 5) - if _, err := rand.Read(b); err != nil { - klog.Fatalf("unable to generate random bytes; %v", err) - } - return strings.ToLower(base32.StdEncoding.EncodeToString(b)[:5]) -} - func sendDoneMessage(ctx context.Context, progressCh chan<- Message, err error) (sent bool) { sent = sendMessage(ctx, progressCh, newDoneMessage(err)) if !sent && err != nil { diff --git a/resources/base/CSIDriver.yaml b/resources/base/CSIDriver.yaml index 3ac38e4f..5b78952c 100644 --- a/resources/base/CSIDriver.yaml +++ b/resources/base/CSIDriver.yaml @@ -17,5 +17,3 @@ spec: volumeLifecycleModes: - Persistent - Ephemeral - - diff --git a/resources/base/ClusterRole.yaml b/resources/base/ClusterRole.yaml index b3d573a1..e5fc7c50 100644 --- a/resources/base/ClusterRole.yaml +++ b/resources/base/ClusterRole.yaml @@ -169,5 +169,3 @@ rules: - get - list - watch - - diff --git a/resources/base/ClusterRoleBinding.yaml b/resources/base/ClusterRoleBinding.yaml index 68c7ee30..eafde0c9 100644 --- a/resources/base/ClusterRoleBinding.yaml +++ b/resources/base/ClusterRoleBinding.yaml @@ -20,5 +20,3 @@ subjects: - kind: ServiceAccount name: directpv-min-io namespace: directpv - - diff --git a/resources/base/DaemonSet.yaml b/resources/base/DaemonSet.yaml index 8b9fcfa0..f97f4d84 100644 --- a/resources/base/DaemonSet.yaml +++ b/resources/base/DaemonSet.yaml @@ -16,14 +16,14 @@ metadata: spec: selector: matchLabels: - selector.directpv.min.io: directpv-min-io-2c3pu + selector.directpv.min.io: directpv-min-io-node-server template: metadata: annotations: created-by: kubectl-directpv creationTimestamp: null labels: - selector.directpv.min.io: directpv-min-io-2c3pu + selector.directpv.min.io: directpv-min-io-node-server selector.directpv.min.io.service: enabled name: node-server namespace: directpv @@ -67,7 +67,7 @@ spec: fieldPath: spec.nodeName - name: CSI_ENDPOINT value: unix:///csi/csi.sock - image: quay.io/minio/directpv:v4.1.4 + image: quay.io/minio/directpv@sha256:83fd05fe114ed15c3975333c90cbe18c782d9c4d5c7ad6fdb8cc835e380ba505 livenessProbe: failureThreshold: 5 httpGet: @@ -138,7 +138,7 @@ spec: fieldRef: apiVersion: v1 fieldPath: spec.nodeName - image: quay.io/minio/directpv:v4.1.4 + image: quay.io/minio/directpv@sha256:83fd05fe114ed15c3975333c90cbe18c782d9c4d5c7ad6fdb8cc835e380ba505 name: node-controller resources: {} securityContext: @@ -230,5 +230,3 @@ status: desiredNumberScheduled: 0 numberMisscheduled: 0 numberReady: 0 - - diff --git a/resources/base/Deployment.yaml b/resources/base/Deployment.yaml index 2f6d6fa1..b07e34d0 100644 --- a/resources/base/Deployment.yaml +++ b/resources/base/Deployment.yaml @@ -17,7 +17,7 @@ spec: replicas: 3 selector: matchLabels: - selector.directpv.min.io: controller-ms345 + selector.directpv.min.io: controller-controller strategy: type: Recreate template: @@ -26,7 +26,7 @@ spec: created-by: kubectl-directpv creationTimestamp: null labels: - selector.directpv.min.io: controller-ms345 + selector.directpv.min.io: controller-controller name: controller namespace: directpv spec: @@ -86,7 +86,7 @@ spec: fieldPath: spec.nodeName - name: CSI_ENDPOINT value: unix:///csi/csi.sock - image: quay.io/minio/directpv:v4.1.4 + image: quay.io/minio/directpv@sha256:83fd05fe114ed15c3975333c90cbe18c782d9c4d5c7ad6fdb8cc835e380ba505 name: controller ports: - containerPort: 30443 @@ -118,5 +118,3 @@ spec: type: DirectoryOrCreate name: socket-dir status: {} - - diff --git a/resources/base/Namespace.yaml b/resources/base/Namespace.yaml index 720dc640..224ae629 100644 --- a/resources/base/Namespace.yaml +++ b/resources/base/Namespace.yaml @@ -15,5 +15,3 @@ metadata: name: directpv spec: {} status: {} - - diff --git a/resources/base/Role.yaml b/resources/base/Role.yaml index 7c6b5cb8..ec53d0f4 100644 --- a/resources/base/Role.yaml +++ b/resources/base/Role.yaml @@ -25,5 +25,3 @@ rules: - list - update - watch - - diff --git a/resources/base/RoleBinding.yaml b/resources/base/RoleBinding.yaml index dbf8f821..828e5c4a 100644 --- a/resources/base/RoleBinding.yaml +++ b/resources/base/RoleBinding.yaml @@ -21,5 +21,3 @@ subjects: - kind: ServiceAccount name: directpv-min-io namespace: directpv - - diff --git a/resources/base/ServiceAccount.yaml b/resources/base/ServiceAccount.yaml index 897548f3..2b6b91fe 100644 --- a/resources/base/ServiceAccount.yaml +++ b/resources/base/ServiceAccount.yaml @@ -12,5 +12,3 @@ metadata: directpv.min.io/version: v1beta1 name: directpv-min-io namespace: directpv - - diff --git a/resources/base/StorageClass.yaml b/resources/base/StorageClass.yaml index c9baa092..549c975c 100644 --- a/resources/base/StorageClass.yaml +++ b/resources/base/StorageClass.yaml @@ -24,5 +24,3 @@ parameters: provisioner: directpv-min-io reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumer - - diff --git a/resources/base/directpvdrives.directpv.min.io.yaml b/resources/base/directpvdrives.directpv.min.io.yaml index b1b34c81..a242f4a3 100644 --- a/resources/base/directpvdrives.directpv.min.io.yaml +++ b/resources/base/directpvdrives.directpv.min.io.yaml @@ -164,5 +164,3 @@ status: plural: "" conditions: null storedVersions: null - - diff --git a/resources/base/directpvinitrequests.directpv.min.io.yaml b/resources/base/directpvinitrequests.directpv.min.io.yaml index 48eef357..99c959ab 100644 --- a/resources/base/directpvinitrequests.directpv.min.io.yaml +++ b/resources/base/directpvinitrequests.directpv.min.io.yaml @@ -100,5 +100,3 @@ status: plural: "" conditions: null storedVersions: null - - diff --git a/resources/base/directpvnodes.directpv.min.io.yaml b/resources/base/directpvnodes.directpv.min.io.yaml index 5de53e42..362082b7 100644 --- a/resources/base/directpvnodes.directpv.min.io.yaml +++ b/resources/base/directpvnodes.directpv.min.io.yaml @@ -166,5 +166,3 @@ status: plural: "" conditions: null storedVersions: null - - diff --git a/resources/base/directpvvolumes.directpv.min.io.yaml b/resources/base/directpvvolumes.directpv.min.io.yaml index 7ad2ca89..bfd7fc2d 100644 --- a/resources/base/directpvvolumes.directpv.min.io.yaml +++ b/resources/base/directpvvolumes.directpv.min.io.yaml @@ -158,5 +158,3 @@ status: plural: "" conditions: null storedVersions: null - - diff --git a/resources/base/kustomization.yaml b/resources/base/kustomization.yaml new file mode 100644 index 00000000..f3c06b54 --- /dev/null +++ b/resources/base/kustomization.yaml @@ -0,0 +1,48 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +resources: + - Namespace.yaml + - directpvdrives.directpv.min.io.yaml + - directpvinitrequests.directpv.min.io.yaml + - directpvnodes.directpv.min.io.yaml + - directpvvolumes.directpv.min.io.yaml + - CSIDriver.yaml + - StorageClass.yaml + - ServiceAccount.yaml + - ClusterRole.yaml + - ClusterRoleBinding.yaml + - Role.yaml + - RoleBinding.yaml + - DaemonSet.yaml + - Deployment.yaml + +images: + - name: quay.io/minio/directpv + digest: sha256:83fd05fe114ed15c3975333c90cbe18c782d9c4d5c7ad6fdb8cc835e380ba505 + + - name: quay.io/minio/csi-node-driver-registrar + digest: sha256:dafc7f667aa2e20d7f059c20db02dd6987c2624d64d8f166cd5930721be98ea9 + + - name: quay.io/minio/livenessprobe + digest: sha256:783010e10e4d74b6b2b157a4b52772c5a264fd76bb2ad671054b8c3f706c8324 + + - name: quay.io/minio/csi-provisioner + digest: sha256:fc1f992dd5591357fa123c396aaadaea5033f312b9c136a11d62cf698474bebb + + - name: quay.io/minio/csi-resizer + digest: sha256:58fa627393f20892b105a137d27e236dfaec233a3a64980f84dcb15f38c21533 + +patches: + - patch: |- + - op: replace + path: /metadata/annotations/directpv.min.io~1plugin-version + value: v4.1.4 + target: + annotationSelector: directpv.min.io/plugin-version + - patch: |- + - op: replace + path: /metadata/annotations/directpv.min.io~1image-tag + value: v4.1.4 + target: + annotationSelector: directpv.min.io/image-tag diff --git a/resources/kustomization.yaml b/resources/kustomization.yaml deleted file mode 100644 index 88034414..00000000 --- a/resources/kustomization.yaml +++ /dev/null @@ -1,21 +0,0 @@ -apiVersion: kustomize.config.k8s.io/v1beta1 -kind: Kustomization -namespace: directpv -commonAnnotations: - directpv.aistor.min.io/authors: MinIO, Inc. - directpv.min.io/support: https://subnet.min.io -resources: - - base/Namespace.yaml - - base/directpvdrives.directpv.min.io.yaml - - base/directpvinitrequests.directpv.min.io.yaml - - base/directpvnodes.directpv.min.io.yaml - - base/directpvvolumes.directpv.min.io.yaml - - base/CSIDriver.yaml - - base/StorageClass.yaml - - base/ServiceAccount.yaml - - base/ClusterRole.yaml - - base/ClusterRoleBinding.yaml - - base/Role.yaml - - base/RoleBinding.yaml - - base/DaemonSet.yaml - - base/Deployment.yaml diff --git a/resources/legacy/base/CSIDriver-direct-csi-min-io.yaml b/resources/legacy/CSIDriver.yaml similarity index 99% rename from resources/legacy/base/CSIDriver-direct-csi-min-io.yaml rename to resources/legacy/CSIDriver.yaml index 96dfb80b..2258c1a0 100644 --- a/resources/legacy/base/CSIDriver-direct-csi-min-io.yaml +++ b/resources/legacy/CSIDriver.yaml @@ -17,5 +17,3 @@ spec: volumeLifecycleModes: - Persistent - Ephemeral - - diff --git a/resources/legacy/base/DaemonSet-legacy-node-server.yaml b/resources/legacy/DaemonSet.yaml similarity index 96% rename from resources/legacy/base/DaemonSet-legacy-node-server.yaml rename to resources/legacy/DaemonSet.yaml index 9f584ced..c21689c6 100644 --- a/resources/legacy/base/DaemonSet-legacy-node-server.yaml +++ b/resources/legacy/DaemonSet.yaml @@ -1,4 +1,3 @@ - apiVersion: apps/v1 kind: DaemonSet metadata: @@ -16,14 +15,14 @@ metadata: spec: selector: matchLabels: - selector.directpv.min.io: directpv-min-io-2y5kt + selector.directpv.min.io: directpv-node-server template: metadata: annotations: created-by: kubectl-directpv creationTimestamp: null labels: - selector.directpv.min.io: directpv-min-io-2y5kt + selector.directpv.min.io: directpv-node-server selector.directpv.min.io.service: enabled name: legacy-node-server namespace: directpv @@ -65,7 +64,7 @@ spec: fieldPath: spec.nodeName - name: CSI_ENDPOINT value: unix:///csi/csi.sock - image: quay.io/minio/directpv:v4.1.4 + image: quay.io/minio/directpv@sha256:83fd05fe114ed15c3975333c90cbe18c782d9c4d5c7ad6fdb8cc835e380ba505 livenessProbe: failureThreshold: 5 httpGet: @@ -184,5 +183,3 @@ status: desiredNumberScheduled: 0 numberMisscheduled: 0 numberReady: 0 - - diff --git a/resources/legacy/base/Deployment-legacy-controller.yaml b/resources/legacy/Deployment.yaml similarity index 93% rename from resources/legacy/base/Deployment-legacy-controller.yaml rename to resources/legacy/Deployment.yaml index e2b13662..9a37ad80 100644 --- a/resources/legacy/base/Deployment-legacy-controller.yaml +++ b/resources/legacy/Deployment.yaml @@ -17,7 +17,7 @@ spec: replicas: 3 selector: matchLabels: - selector.directpv.min.io: controller-b3pnn + selector.directpv.min.io: directpv-controller strategy: type: Recreate template: @@ -26,7 +26,7 @@ spec: created-by: kubectl-directpv creationTimestamp: null labels: - selector.directpv.min.io: controller-b3pnn + selector.directpv.min.io: directpv-controller name: legacy-controller namespace: directpv spec: @@ -85,7 +85,7 @@ spec: fieldPath: spec.nodeName - name: CSI_ENDPOINT value: unix:///csi/csi.sock - image: quay.io/minio/directpv:v4.1.4 + image: quay.io/minio/directpv@sha256:83fd05fe114ed15c3975333c90cbe18c782d9c4d5c7ad6fdb8cc835e380ba505 name: controller ports: - containerPort: 30443 @@ -117,5 +117,3 @@ spec: type: DirectoryOrCreate name: socket-dir status: {} - - diff --git a/resources/legacy/base/StorageClass-direct-csi-min-io.yaml b/resources/legacy/StorageClass.yaml similarity index 99% rename from resources/legacy/base/StorageClass-direct-csi-min-io.yaml rename to resources/legacy/StorageClass.yaml index 22c1d8d6..1ba1cb15 100644 --- a/resources/legacy/base/StorageClass-direct-csi-min-io.yaml +++ b/resources/legacy/StorageClass.yaml @@ -24,5 +24,3 @@ parameters: provisioner: directpv-min-io reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumer - - diff --git a/resources/legacy/base/CSIDriver.yaml b/resources/legacy/base/CSIDriver.yaml deleted file mode 100644 index 3ac38e4f..00000000 --- a/resources/legacy/base/CSIDriver.yaml +++ /dev/null @@ -1,21 +0,0 @@ - -apiVersion: storage.k8s.io/v1 -kind: CSIDriver -metadata: - annotations: - directpv.min.io/plugin-version: v4.1.4 - creationTimestamp: null - labels: - application-name: directpv.min.io - application-type: CSIDriver - directpv.min.io/created-by: kubectl-directpv - directpv.min.io/version: v1beta1 - name: directpv-min-io -spec: - attachRequired: false - podInfoOnMount: true - volumeLifecycleModes: - - Persistent - - Ephemeral - - diff --git a/resources/legacy/base/ClusterRole.yaml b/resources/legacy/base/ClusterRole.yaml deleted file mode 100644 index b3d573a1..00000000 --- a/resources/legacy/base/ClusterRole.yaml +++ /dev/null @@ -1,173 +0,0 @@ - -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - annotations: - directpv.min.io/plugin-version: v4.1.4 - rbac.authorization.kubernetes.io/autoupdate: "true" - creationTimestamp: null - labels: - application-name: directpv.min.io - application-type: CSIDriver - directpv.min.io/created-by: kubectl-directpv - directpv.min.io/version: v1beta1 - name: directpv-min-io -rules: -- apiGroups: - - "" - resources: - - persistentvolumes - verbs: - - create - - delete - - get - - list - - patch - - watch -- apiGroups: - - "" - resources: - - persistentvolumeclaims/status - verbs: - - patch -- apiGroups: - - policy - resources: - - podsecuritypolicies - verbs: - - use -- apiGroups: - - "" - resources: - - persistentvolumeclaims - verbs: - - get - - list - - update - - watch -- apiGroups: - - storage.k8s.io - resources: - - storageclasses - verbs: - - get - - list - - watch -- apiGroups: - - "" - resources: - - events - verbs: - - create - - list - - patch - - update - - watch -- apiGroups: - - snapshot.storage.k8s.io - resources: - - volumesnapshots - verbs: - - get - - list -- apiGroups: - - snapshot.storage.k8s.io - resources: - - volumesnapshotcontents - verbs: - - get - - list -- apiGroups: - - storage.k8s.io - resources: - - csinodes - verbs: - - get - - list - - watch -- apiGroups: - - "" - resources: - - nodes - verbs: - - get - - list - - watch -- apiGroups: - - storage.k8s.io - resources: - - volumeattachments - verbs: - - get - - list - - watch -- apiGroups: - - "" - resources: - - endpoints - verbs: - - create - - delete - - get - - list - - update - - watch -- apiGroups: - - coordination.k8s.io - resources: - - leases - verbs: - - create - - delete - - get - - list - - update - - watch -- apiGroups: - - apiextensions.k8s.io - - directpv.min.io - resources: - - customresourcedefinitions - - customresourcedefinition - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - directpv.min.io - resources: - - directpvdrives - - directpvvolumes - - directpvnodes - - directpvinitrequests - verbs: - - create - - delete - - get - - list - - update - - watch -- apiGroups: - - "" - resources: - - pods - - pod - verbs: - - get - - list - - watch -- apiGroups: - - "" - resources: - - secrets - - secret - verbs: - - get - - list - - watch - - diff --git a/resources/legacy/base/ClusterRoleBinding.yaml b/resources/legacy/base/ClusterRoleBinding.yaml deleted file mode 100644 index 68c7ee30..00000000 --- a/resources/legacy/base/ClusterRoleBinding.yaml +++ /dev/null @@ -1,24 +0,0 @@ - -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - annotations: - directpv.min.io/plugin-version: v4.1.4 - rbac.authorization.kubernetes.io/autoupdate: "true" - creationTimestamp: null - labels: - application-name: directpv.min.io - application-type: CSIDriver - directpv.min.io/created-by: kubectl-directpv - directpv.min.io/version: v1beta1 - name: directpv-min-io -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: directpv-min-io -subjects: -- kind: ServiceAccount - name: directpv-min-io - namespace: directpv - - diff --git a/resources/legacy/base/DaemonSet.yaml b/resources/legacy/base/DaemonSet.yaml deleted file mode 100644 index ef58ab6d..00000000 --- a/resources/legacy/base/DaemonSet.yaml +++ /dev/null @@ -1,234 +0,0 @@ - -apiVersion: apps/v1 -kind: DaemonSet -metadata: - annotations: - directpv.min.io/image-tag: v4.1.4 - directpv.min.io/plugin-version: v4.1.4 - creationTimestamp: null - labels: - application-name: directpv.min.io - application-type: CSIDriver - directpv.min.io/created-by: kubectl-directpv - directpv.min.io/version: v1beta1 - name: node-server - namespace: directpv -spec: - selector: - matchLabels: - selector.directpv.min.io: directpv-min-io-mmhtk - template: - metadata: - annotations: - created-by: kubectl-directpv - creationTimestamp: null - labels: - selector.directpv.min.io: directpv-min-io-mmhtk - selector.directpv.min.io.service: enabled - name: node-server - namespace: directpv - spec: - containers: - - args: - - --v=3 - - --csi-address=unix:///csi/csi.sock - - --kubelet-registration-path=/var/lib/kubelet/plugins/directpv-min-io/csi.sock - env: - - name: KUBE_NODE_NAME - valueFrom: - fieldRef: - apiVersion: v1 - fieldPath: spec.nodeName - image: quay.io/minio/csi-node-driver-registrar@sha256:dafc7f667aa2e20d7f059c20db02dd6987c2624d64d8f166cd5930721be98ea9 - name: node-driver-registrar - resources: {} - terminationMessagePath: /var/log/driver-registrar-termination-log - terminationMessagePolicy: FallbackToLogsOnError - volumeMounts: - - mountPath: /csi - mountPropagation: None - name: socket-dir - - mountPath: /registration - mountPropagation: None - name: registration-dir - - args: - - node-server - - -v=3 - - --identity=directpv-min-io - - --csi-endpoint=$(CSI_ENDPOINT) - - --kube-node-name=$(KUBE_NODE_NAME) - - --readiness-port=30443 - - --metrics-port=10443 - env: - - name: KUBE_NODE_NAME - valueFrom: - fieldRef: - apiVersion: v1 - fieldPath: spec.nodeName - - name: CSI_ENDPOINT - value: unix:///csi/csi.sock - image: quay.io/minio/directpv:v4.1.4 - livenessProbe: - failureThreshold: 5 - httpGet: - path: /healthz - port: healthz - initialDelaySeconds: 60 - periodSeconds: 10 - timeoutSeconds: 10 - name: node-server - ports: - - containerPort: 30443 - name: readinessport - protocol: TCP - - containerPort: 9898 - name: healthz - protocol: TCP - - containerPort: 10443 - name: metrics - protocol: TCP - readinessProbe: - failureThreshold: 5 - httpGet: - path: /ready - port: readinessport - scheme: HTTP - initialDelaySeconds: 60 - periodSeconds: 10 - timeoutSeconds: 10 - resources: {} - securityContext: - privileged: true - terminationMessagePath: /var/log/driver-termination-log - terminationMessagePolicy: FallbackToLogsOnError - volumeMounts: - - mountPath: /csi - mountPropagation: None - name: socket-dir - - mountPath: /var/lib/kubelet/pods - mountPropagation: Bidirectional - name: mountpoint-dir - - mountPath: /var/lib/kubelet/plugins - mountPropagation: Bidirectional - name: plugins-dir - - mountPath: /var/lib/directpv/ - mountPropagation: Bidirectional - name: directpv-common-root - - mountPath: /var/lib/direct-csi/ - mountPropagation: Bidirectional - name: direct-csi-common-root - - mountPath: /sys - mountPropagation: Bidirectional - name: sysfs - - mountPath: /dev - mountPropagation: HostToContainer - name: devfs - readOnly: true - - mountPath: /run/udev/data - mountPropagation: Bidirectional - name: run-udev-data-dir - readOnly: true - - args: - - node-controller - - -v=3 - - --kube-node-name=$(KUBE_NODE_NAME) - env: - - name: KUBE_NODE_NAME - valueFrom: - fieldRef: - apiVersion: v1 - fieldPath: spec.nodeName - image: quay.io/minio/directpv:v4.1.4 - name: node-controller - resources: {} - securityContext: - privileged: true - terminationMessagePath: /var/log/driver-termination-log - terminationMessagePolicy: FallbackToLogsOnError - volumeMounts: - - mountPath: /csi - mountPropagation: None - name: socket-dir - - mountPath: /var/lib/kubelet/pods - mountPropagation: Bidirectional - name: mountpoint-dir - - mountPath: /var/lib/kubelet/plugins - mountPropagation: Bidirectional - name: plugins-dir - - mountPath: /var/lib/directpv/ - mountPropagation: Bidirectional - name: directpv-common-root - - mountPath: /var/lib/direct-csi/ - mountPropagation: Bidirectional - name: direct-csi-common-root - - mountPath: /sys - mountPropagation: Bidirectional - name: sysfs - - mountPath: /dev - mountPropagation: HostToContainer - name: devfs - readOnly: true - - mountPath: /run/udev/data - mountPropagation: Bidirectional - name: run-udev-data-dir - readOnly: true - - args: - - --csi-address=/csi/csi.sock - - --health-port=9898 - image: quay.io/minio/livenessprobe@sha256:783010e10e4d74b6b2b157a4b52772c5a264fd76bb2ad671054b8c3f706c8324 - name: liveness-probe - resources: {} - terminationMessagePath: /var/log/driver-liveness-termination-log - terminationMessagePolicy: FallbackToLogsOnError - volumeMounts: - - mountPath: /csi - mountPropagation: None - name: socket-dir - hostPID: true - serviceAccountName: directpv-min-io - volumes: - - hostPath: - path: /var/lib/kubelet/plugins/directpv-min-io - type: DirectoryOrCreate - name: socket-dir - - hostPath: - path: /var/lib/kubelet/pods - type: DirectoryOrCreate - name: mountpoint-dir - - hostPath: - path: /var/lib/kubelet/plugins_registry - type: DirectoryOrCreate - name: registration-dir - - hostPath: - path: /var/lib/kubelet/plugins - type: DirectoryOrCreate - name: plugins-dir - - hostPath: - path: /var/lib/directpv/ - type: DirectoryOrCreate - name: directpv-common-root - - hostPath: - path: /var/lib/direct-csi/ - type: DirectoryOrCreate - name: direct-csi-common-root - - hostPath: - path: /sys - type: DirectoryOrCreate - name: sysfs - - hostPath: - path: /dev - type: DirectoryOrCreate - name: devfs - - hostPath: - path: /run/udev/data - type: DirectoryOrCreate - name: run-udev-data-dir - updateStrategy: - type: RollingUpdate -status: - currentNumberScheduled: 0 - desiredNumberScheduled: 0 - numberMisscheduled: 0 - numberReady: 0 - - diff --git a/resources/legacy/base/Deployment.yaml b/resources/legacy/base/Deployment.yaml deleted file mode 100644 index a40f2425..00000000 --- a/resources/legacy/base/Deployment.yaml +++ /dev/null @@ -1,122 +0,0 @@ - -apiVersion: apps/v1 -kind: Deployment -metadata: - annotations: - directpv.min.io/image-tag: v4.1.4 - directpv.min.io/plugin-version: v4.1.4 - creationTimestamp: null - labels: - application-name: directpv.min.io - application-type: CSIDriver - directpv.min.io/created-by: kubectl-directpv - directpv.min.io/version: v1beta1 - name: controller - namespace: directpv -spec: - replicas: 3 - selector: - matchLabels: - selector.directpv.min.io: controller-bq3dy - strategy: - type: Recreate - template: - metadata: - annotations: - created-by: kubectl-directpv - creationTimestamp: null - labels: - selector.directpv.min.io: controller-bq3dy - name: controller - namespace: directpv - spec: - containers: - - args: - - --v=3 - - --timeout=300s - - --csi-address=$(CSI_ENDPOINT) - - --leader-election - - --feature-gates=Topology=true - - --strict-topology - env: - - name: CSI_ENDPOINT - value: unix:///csi/csi.sock - image: quay.io/minio/csi-provisioner@sha256:fc1f992dd5591357fa123c396aaadaea5033f312b9c136a11d62cf698474bebb - name: csi-provisioner - resources: {} - securityContext: - privileged: true - terminationMessagePath: /var/log/controller-provisioner-termination-log - terminationMessagePolicy: FallbackToLogsOnError - volumeMounts: - - mountPath: /csi - mountPropagation: None - name: socket-dir - - args: - - --v=3 - - --timeout=300s - - --csi-address=$(CSI_ENDPOINT) - - --leader-election - env: - - name: CSI_ENDPOINT - value: unix:///csi/csi.sock - image: quay.io/minio/csi-resizer@sha256:58fa627393f20892b105a137d27e236dfaec233a3a64980f84dcb15f38c21533 - name: csi-resizer - resources: {} - securityContext: - privileged: true - terminationMessagePath: /var/log/controller-csi-resizer-termination-log - terminationMessagePolicy: FallbackToLogsOnError - volumeMounts: - - mountPath: /csi - mountPropagation: None - name: socket-dir - - args: - - controller - - --identity=directpv-min-io - - -v=3 - - --csi-endpoint=$(CSI_ENDPOINT) - - --kube-node-name=$(KUBE_NODE_NAME) - - --readiness-port=30443 - env: - - name: KUBE_NODE_NAME - valueFrom: - fieldRef: - apiVersion: v1 - fieldPath: spec.nodeName - - name: CSI_ENDPOINT - value: unix:///csi/csi.sock - image: quay.io/minio/directpv:v4.1.4 - name: controller - ports: - - containerPort: 30443 - name: readinessport - protocol: TCP - - containerPort: 9898 - name: healthz - protocol: TCP - readinessProbe: - failureThreshold: 5 - httpGet: - path: /ready - port: readinessport - scheme: HTTP - initialDelaySeconds: 60 - periodSeconds: 10 - timeoutSeconds: 10 - resources: {} - securityContext: - privileged: true - volumeMounts: - - mountPath: /csi - mountPropagation: None - name: socket-dir - serviceAccountName: directpv-min-io - volumes: - - hostPath: - path: /var/lib/kubelet/plugins/controller-controller - type: DirectoryOrCreate - name: socket-dir -status: {} - - diff --git a/resources/legacy/base/Namespace.yaml b/resources/legacy/base/Namespace.yaml deleted file mode 100644 index 720dc640..00000000 --- a/resources/legacy/base/Namespace.yaml +++ /dev/null @@ -1,19 +0,0 @@ -apiVersion: v1 -kind: Namespace -metadata: - annotations: - directpv.min.io/plugin-version: v4.1.4 - creationTimestamp: null - finalizers: - - foregroundDeletion - labels: - application-name: directpv.min.io - application-type: CSIDriver - directpv.min.io/created-by: kubectl-directpv - directpv.min.io/version: v1beta1 - pod-security.kubernetes.io/enforce: privileged - name: directpv -spec: {} -status: {} - - diff --git a/resources/legacy/base/Role.yaml b/resources/legacy/base/Role.yaml deleted file mode 100644 index 7c6b5cb8..00000000 --- a/resources/legacy/base/Role.yaml +++ /dev/null @@ -1,29 +0,0 @@ - -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - annotations: - directpv.min.io/plugin-version: v4.1.4 - rbac.authorization.kubernetes.io/autoupdate: "true" - creationTimestamp: null - labels: - application-name: directpv.min.io - application-type: CSIDriver - directpv.min.io/created-by: kubectl-directpv - directpv.min.io/version: v1beta1 - name: directpv-min-io - namespace: directpv -rules: -- apiGroups: - - coordination.k8s.io - resources: - - leases - verbs: - - create - - delete - - get - - list - - update - - watch - - diff --git a/resources/legacy/base/RoleBinding.yaml b/resources/legacy/base/RoleBinding.yaml deleted file mode 100644 index dbf8f821..00000000 --- a/resources/legacy/base/RoleBinding.yaml +++ /dev/null @@ -1,25 +0,0 @@ - -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - annotations: - directpv.min.io/plugin-version: v4.1.4 - rbac.authorization.kubernetes.io/autoupdate: "true" - creationTimestamp: null - labels: - application-name: directpv.min.io - application-type: CSIDriver - directpv.min.io/created-by: kubectl-directpv - directpv.min.io/version: v1beta1 - name: directpv-min-io - namespace: directpv -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: directpv-min-io -subjects: -- kind: ServiceAccount - name: directpv-min-io - namespace: directpv - - diff --git a/resources/legacy/base/ServiceAccount.yaml b/resources/legacy/base/ServiceAccount.yaml deleted file mode 100644 index 897548f3..00000000 --- a/resources/legacy/base/ServiceAccount.yaml +++ /dev/null @@ -1,16 +0,0 @@ - -apiVersion: v1 -kind: ServiceAccount -metadata: - annotations: - directpv.min.io/plugin-version: v4.1.4 - creationTimestamp: null - labels: - application-name: directpv.min.io - application-type: CSIDriver - directpv.min.io/created-by: kubectl-directpv - directpv.min.io/version: v1beta1 - name: directpv-min-io - namespace: directpv - - diff --git a/resources/legacy/base/StorageClass.yaml b/resources/legacy/base/StorageClass.yaml deleted file mode 100644 index c9baa092..00000000 --- a/resources/legacy/base/StorageClass.yaml +++ /dev/null @@ -1,28 +0,0 @@ - -allowVolumeExpansion: true -allowedTopologies: -- matchLabelExpressions: - - key: directpv.min.io/identity - values: - - directpv-min-io -apiVersion: storage.k8s.io/v1 -kind: StorageClass -metadata: - annotations: - directpv.min.io/plugin-version: v4.1.4 - creationTimestamp: null - finalizers: - - foregroundDeletion - labels: - application-name: directpv.min.io - application-type: CSIDriver - directpv.min.io/created-by: kubectl-directpv - directpv.min.io/version: v1beta1 - name: directpv-min-io -parameters: - csi.storage.k8s.io/fstype: xfs -provisioner: directpv-min-io -reclaimPolicy: Delete -volumeBindingMode: WaitForFirstConsumer - - diff --git a/resources/legacy/base/directpvdrives.directpv.min.io.yaml b/resources/legacy/base/directpvdrives.directpv.min.io.yaml deleted file mode 100644 index b1b34c81..00000000 --- a/resources/legacy/base/directpvdrives.directpv.min.io.yaml +++ /dev/null @@ -1,168 +0,0 @@ - -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - controller-gen.kubebuilder.io/version: v0.15.0 - creationTimestamp: null - labels: - directpv.min.io/version: v1beta1 - name: directpvdrives.directpv.min.io -spec: - conversion: - strategy: None - group: directpv.min.io - names: - kind: DirectPVDrive - listKind: DirectPVDriveList - plural: directpvdrives - singular: directpvdrive - scope: Cluster - versions: - - name: v1beta1 - schema: - openAPIV3Schema: - description: DirectPVDrive denotes drive CRD object. - properties: - apiVersion: - description: |- - APIVersion defines the versioned schema of this representation of an object. - Servers should convert recognized schemas to the latest internal value, and - may reject unrecognized values. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources - type: string - kind: - description: |- - Kind is a string value representing the REST resource this object represents. - Servers may infer this from the endpoint the client submits requests to. - Cannot be updated. - In CamelCase. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds - type: string - metadata: - type: object - spec: - description: DriveSpec represents DirectPV drive specification values. - properties: - relabel: - type: boolean - unschedulable: - type: boolean - type: object - status: - description: DriveStatus denotes drive information. - properties: - allocatedCapacity: - format: int64 - type: integer - conditions: - items: - description: "Condition contains details for one aspect of the current - state of this API Resource.\n---\nThis struct is intended for - direct use as an array at the field path .status.conditions. For - example,\n\n\n\ttype FooStatus struct{\n\t // Represents the - observations of a foo's current state.\n\t // Known .status.conditions.type - are: \"Available\", \"Progressing\", and \"Degraded\"\n\t // - +patchMergeKey=type\n\t // +patchStrategy=merge\n\t // +listType=map\n\t - \ // +listMapKey=type\n\t Conditions []metav1.Condition `json:\"conditions,omitempty\" - patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"`\n\n\n\t - \ // other fields\n\t}" - properties: - lastTransitionTime: - description: |- - lastTransitionTime is the last time the condition transitioned from one status to another. - This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. - format: date-time - type: string - message: - description: |- - message is a human readable message indicating details about the transition. - This may be an empty string. - maxLength: 32768 - type: string - observedGeneration: - description: |- - observedGeneration represents the .metadata.generation that the condition was set based upon. - For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date - with respect to the current state of the instance. - format: int64 - minimum: 0 - type: integer - reason: - description: |- - reason contains a programmatic identifier indicating the reason for the condition's last transition. - Producers of specific condition types may define expected values and meanings for this field, - and whether the values are considered a guaranteed API. - The value should be a CamelCase string. - This field may not be empty. - maxLength: 1024 - minLength: 1 - pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ - type: string - status: - description: status of the condition, one of True, False, Unknown. - enum: - - "True" - - "False" - - Unknown - type: string - type: - description: |- - type of condition in CamelCase or in foo.example.com/CamelCase. - --- - Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be - useful (see .node.status.conditions), the ability to deconflict is important. - The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) - maxLength: 316 - pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ - type: string - required: - - lastTransitionTime - - message - - reason - - status - - type - type: object - type: array - x-kubernetes-list-map-keys: - - type - x-kubernetes-list-type: map - freeCapacity: - format: int64 - type: integer - fsuuid: - type: string - make: - type: string - status: - description: DriveStatus denotes drive status - type: string - topology: - additionalProperties: - type: string - type: object - totalCapacity: - format: int64 - type: integer - required: - - allocatedCapacity - - freeCapacity - - fsuuid - - status - - topology - - totalCapacity - type: object - required: - - metadata - - status - type: object - served: true - storage: true -status: - acceptedNames: - kind: "" - plural: "" - conditions: null - storedVersions: null - - diff --git a/resources/legacy/base/directpvinitrequests.directpv.min.io.yaml b/resources/legacy/base/directpvinitrequests.directpv.min.io.yaml deleted file mode 100644 index 48eef357..00000000 --- a/resources/legacy/base/directpvinitrequests.directpv.min.io.yaml +++ /dev/null @@ -1,104 +0,0 @@ - -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - controller-gen.kubebuilder.io/version: v0.15.0 - creationTimestamp: null - labels: - directpv.min.io/version: v1beta1 - name: directpvinitrequests.directpv.min.io -spec: - conversion: - strategy: None - group: directpv.min.io - names: - kind: DirectPVInitRequest - listKind: DirectPVInitRequestList - plural: directpvinitrequests - singular: directpvinitrequest - scope: Cluster - versions: - - name: v1beta1 - schema: - openAPIV3Schema: - description: DirectPVInitRequest denotes DirectPVInitRequest CRD object. - properties: - apiVersion: - description: |- - APIVersion defines the versioned schema of this representation of an object. - Servers should convert recognized schemas to the latest internal value, and - may reject unrecognized values. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources - type: string - kind: - description: |- - Kind is a string value representing the REST resource this object represents. - Servers may infer this from the endpoint the client submits requests to. - Cannot be updated. - In CamelCase. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds - type: string - metadata: - type: object - spec: - description: InitRequestSpec represents the spec for InitRequest. - properties: - devices: - items: - description: InitDevice represents the device requested for initialization. - properties: - force: - type: boolean - id: - type: string - name: - type: string - required: - - force - - id - - name - type: object - type: array - x-kubernetes-list-type: atomic - required: - - devices - type: object - status: - description: InitRequestStatus represents the status of the InitRequest. - properties: - results: - items: - description: InitDeviceResult represents the result of the InitDeviceRequest. - properties: - error: - type: string - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-type: atomic - status: - description: InitStatus denotes initialization status - type: string - required: - - results - - status - type: object - required: - - metadata - - spec - - status - type: object - served: true - storage: true -status: - acceptedNames: - kind: "" - plural: "" - conditions: null - storedVersions: null - - diff --git a/resources/legacy/base/directpvnodes.directpv.min.io.yaml b/resources/legacy/base/directpvnodes.directpv.min.io.yaml deleted file mode 100644 index 5de53e42..00000000 --- a/resources/legacy/base/directpvnodes.directpv.min.io.yaml +++ /dev/null @@ -1,170 +0,0 @@ - -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - controller-gen.kubebuilder.io/version: v0.15.0 - creationTimestamp: null - labels: - directpv.min.io/version: v1beta1 - name: directpvnodes.directpv.min.io -spec: - conversion: - strategy: None - group: directpv.min.io - names: - kind: DirectPVNode - listKind: DirectPVNodeList - plural: directpvnodes - singular: directpvnode - scope: Cluster - versions: - - name: v1beta1 - schema: - openAPIV3Schema: - description: DirectPVNode denotes Node CRD object. - properties: - apiVersion: - description: |- - APIVersion defines the versioned schema of this representation of an object. - Servers should convert recognized schemas to the latest internal value, and - may reject unrecognized values. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources - type: string - kind: - description: |- - Kind is a string value representing the REST resource this object represents. - Servers may infer this from the endpoint the client submits requests to. - Cannot be updated. - In CamelCase. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds - type: string - metadata: - type: object - spec: - description: NodeSpec represents DirectPV node specification values. - properties: - refresh: - type: boolean - type: object - status: - description: NodeStatus denotes node information. - properties: - conditions: - items: - description: "Condition contains details for one aspect of the current - state of this API Resource.\n---\nThis struct is intended for - direct use as an array at the field path .status.conditions. For - example,\n\n\n\ttype FooStatus struct{\n\t // Represents the - observations of a foo's current state.\n\t // Known .status.conditions.type - are: \"Available\", \"Progressing\", and \"Degraded\"\n\t // - +patchMergeKey=type\n\t // +patchStrategy=merge\n\t // +listType=map\n\t - \ // +listMapKey=type\n\t Conditions []metav1.Condition `json:\"conditions,omitempty\" - patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"`\n\n\n\t - \ // other fields\n\t}" - properties: - lastTransitionTime: - description: |- - lastTransitionTime is the last time the condition transitioned from one status to another. - This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. - format: date-time - type: string - message: - description: |- - message is a human readable message indicating details about the transition. - This may be an empty string. - maxLength: 32768 - type: string - observedGeneration: - description: |- - observedGeneration represents the .metadata.generation that the condition was set based upon. - For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date - with respect to the current state of the instance. - format: int64 - minimum: 0 - type: integer - reason: - description: |- - reason contains a programmatic identifier indicating the reason for the condition's last transition. - Producers of specific condition types may define expected values and meanings for this field, - and whether the values are considered a guaranteed API. - The value should be a CamelCase string. - This field may not be empty. - maxLength: 1024 - minLength: 1 - pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ - type: string - status: - description: status of the condition, one of True, False, Unknown. - enum: - - "True" - - "False" - - Unknown - type: string - type: - description: |- - type of condition in CamelCase or in foo.example.com/CamelCase. - --- - Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be - useful (see .node.status.conditions), the ability to deconflict is important. - The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) - maxLength: 316 - pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ - type: string - required: - - lastTransitionTime - - message - - reason - - status - - type - type: object - type: array - x-kubernetes-list-map-keys: - - type - x-kubernetes-list-type: map - devices: - items: - description: Device denotes the device information in a drive - properties: - deniedReason: - type: string - fsType: - type: string - fsuuid: - type: string - id: - type: string - majorMinor: - type: string - make: - type: string - name: - type: string - size: - format: int64 - type: integer - required: - - id - - majorMinor - - name - - size - type: object - type: array - x-kubernetes-list-type: atomic - required: - - devices - type: object - required: - - metadata - - status - type: object - served: true - storage: true -status: - acceptedNames: - kind: "" - plural: "" - conditions: null - storedVersions: null - - diff --git a/resources/legacy/base/directpvvolumes.directpv.min.io.yaml b/resources/legacy/base/directpvvolumes.directpv.min.io.yaml deleted file mode 100644 index 7ad2ca89..00000000 --- a/resources/legacy/base/directpvvolumes.directpv.min.io.yaml +++ /dev/null @@ -1,162 +0,0 @@ - -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - controller-gen.kubebuilder.io/version: v0.15.0 - creationTimestamp: null - labels: - directpv.min.io/version: v1beta1 - name: directpvvolumes.directpv.min.io -spec: - conversion: - strategy: None - group: directpv.min.io - names: - kind: DirectPVVolume - listKind: DirectPVVolumeList - plural: directpvvolumes - singular: directpvvolume - scope: Cluster - versions: - - name: v1beta1 - schema: - openAPIV3Schema: - description: DirectPVVolume denotes volume CRD object. - properties: - apiVersion: - description: |- - APIVersion defines the versioned schema of this representation of an object. - Servers should convert recognized schemas to the latest internal value, and - may reject unrecognized values. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources - type: string - kind: - description: |- - Kind is a string value representing the REST resource this object represents. - Servers may infer this from the endpoint the client submits requests to. - Cannot be updated. - In CamelCase. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds - type: string - metadata: - type: object - status: - description: VolumeStatus denotes volume information. - properties: - availableCapacity: - format: int64 - type: integer - conditions: - items: - description: "Condition contains details for one aspect of the current - state of this API Resource.\n---\nThis struct is intended for - direct use as an array at the field path .status.conditions. For - example,\n\n\n\ttype FooStatus struct{\n\t // Represents the - observations of a foo's current state.\n\t // Known .status.conditions.type - are: \"Available\", \"Progressing\", and \"Degraded\"\n\t // - +patchMergeKey=type\n\t // +patchStrategy=merge\n\t // +listType=map\n\t - \ // +listMapKey=type\n\t Conditions []metav1.Condition `json:\"conditions,omitempty\" - patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"`\n\n\n\t - \ // other fields\n\t}" - properties: - lastTransitionTime: - description: |- - lastTransitionTime is the last time the condition transitioned from one status to another. - This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. - format: date-time - type: string - message: - description: |- - message is a human readable message indicating details about the transition. - This may be an empty string. - maxLength: 32768 - type: string - observedGeneration: - description: |- - observedGeneration represents the .metadata.generation that the condition was set based upon. - For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date - with respect to the current state of the instance. - format: int64 - minimum: 0 - type: integer - reason: - description: |- - reason contains a programmatic identifier indicating the reason for the condition's last transition. - Producers of specific condition types may define expected values and meanings for this field, - and whether the values are considered a guaranteed API. - The value should be a CamelCase string. - This field may not be empty. - maxLength: 1024 - minLength: 1 - pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ - type: string - status: - description: status of the condition, one of True, False, Unknown. - enum: - - "True" - - "False" - - Unknown - type: string - type: - description: |- - type of condition in CamelCase or in foo.example.com/CamelCase. - --- - Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be - useful (see .node.status.conditions), the ability to deconflict is important. - The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) - maxLength: 316 - pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ - type: string - required: - - lastTransitionTime - - message - - reason - - status - - type - type: object - type: array - x-kubernetes-list-map-keys: - - type - x-kubernetes-list-type: map - dataPath: - type: string - fsuuid: - type: string - stagingTargetPath: - type: string - status: - description: VolumeStatus represents status of a volume. - type: string - targetPath: - type: string - totalCapacity: - format: int64 - type: integer - usedCapacity: - format: int64 - type: integer - required: - - availableCapacity - - dataPath - - fsuuid - - stagingTargetPath - - status - - targetPath - - totalCapacity - - usedCapacity - type: object - required: - - metadata - - status - type: object - served: true - storage: true -status: - acceptedNames: - kind: "" - plural: "" - conditions: null - storedVersions: null - - diff --git a/resources/legacy/kustomization.yaml b/resources/legacy/kustomization.yaml index 60e29687..f8258e64 100644 --- a/resources/legacy/kustomization.yaml +++ b/resources/legacy/kustomization.yaml @@ -1,25 +1,39 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization -namespace: directpv -commonAnnotations: - directpv.aistor.min.io/authors: MinIO, Inc. - directpv.min.io/support: https://subnet.min.io + resources: - - base/Namespace.yaml - - base/directpvdrives.directpv.min.io.yaml - - base/directpvinitrequests.directpv.min.io.yaml - - base/directpvnodes.directpv.min.io.yaml - - base/directpvvolumes.directpv.min.io.yaml - - base/CSIDriver.yaml - - base/CSIDriver-direct-csi-min-io.yaml - - base/StorageClass.yaml - - base/StorageClass-direct-csi-min-io.yaml - - base/ServiceAccount.yaml - - base/ClusterRole.yaml - - base/ClusterRoleBinding.yaml - - base/Role.yaml - - base/RoleBinding.yaml - - base/DaemonSet.yaml - - base/DaemonSet-legacy-node-server.yaml - - base/Deployment.yaml - - base/Deployment-legacy-controller.yaml + - ../base + - CSIDriver.yaml + - DaemonSet.yaml + - Deployment.yaml + - StorageClass.yaml + +images: + - name: quay.io/minio/directpv + digest: sha256:83fd05fe114ed15c3975333c90cbe18c782d9c4d5c7ad6fdb8cc835e380ba505 + + - name: quay.io/minio/csi-node-driver-registrar + digest: sha256:dafc7f667aa2e20d7f059c20db02dd6987c2624d64d8f166cd5930721be98ea9 + + - name: quay.io/minio/livenessprobe + digest: sha256:783010e10e4d74b6b2b157a4b52772c5a264fd76bb2ad671054b8c3f706c8324 + + - name: quay.io/minio/csi-provisioner + digest: sha256:fc1f992dd5591357fa123c396aaadaea5033f312b9c136a11d62cf698474bebb + + - name: quay.io/minio/csi-resizer + digest: sha256:58fa627393f20892b105a137d27e236dfaec233a3a64980f84dcb15f38c21533 + +patches: + - patch: |- + - op: replace + path: /metadata/annotations/directpv.min.io~1plugin-version + value: v4.1.4 + target: + annotationSelector: directpv.min.io/plugin-version + - patch: |- + - op: replace + path: /metadata/annotations/directpv.min.io~1image-tag + value: v4.1.4 + target: + annotationSelector: directpv.min.io/image-tag diff --git a/resources/openshift-with-legacy/kustomization.yaml b/resources/openshift-with-legacy/kustomization.yaml new file mode 100644 index 00000000..2288b7d6 --- /dev/null +++ b/resources/openshift-with-legacy/kustomization.yaml @@ -0,0 +1,22 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +resources: + - ../legacy + +images: + - name: quay.io/minio/csi-node-driver-registrar + newName: registry.redhat.io/openshift4/ose-csi-node-driver-registrar-rhel8 + digest: sha256:ab54e6a2e8a6a1ca2da5aaf25f784c09f5bf22ea32224ec1bdb6c564f88695a9 + + - name: quay.io/minio/livenessprobe + newName: registry.redhat.io/openshift4/ose-csi-livenessprobe-rhel8 + digest: sha256:b28029f929fe2a28e666910d1acc57c3474fabdb2f9129688ef1ca56c7231d90 + + - name: quay.io/minio/csi-provisioner + newName: registry.redhat.io/openshift4/ose-csi-external-provisioner-rhel8 + digest: sha256:8bf8aa8975790e19ba107fd58699f98389e3fb692d192f4df3078fff7f0a4bba + + - name: quay.io/minio/csi-resizer@sha256:58fa627393f20892b105a137d27e236dfaec233a3a64980f84dcb15f38c21533 + newName: registry.redhat.io/openshift4/ose-csi-external-resizer-rhel8 + digest: sha256:bed8de36bac80108909205342b2d92e4de5adbfa33bf13f9346236fca52a0d3e diff --git a/resources/openshift/base/CSIDriver.yaml b/resources/openshift/base/CSIDriver.yaml deleted file mode 100644 index 3ac38e4f..00000000 --- a/resources/openshift/base/CSIDriver.yaml +++ /dev/null @@ -1,21 +0,0 @@ - -apiVersion: storage.k8s.io/v1 -kind: CSIDriver -metadata: - annotations: - directpv.min.io/plugin-version: v4.1.4 - creationTimestamp: null - labels: - application-name: directpv.min.io - application-type: CSIDriver - directpv.min.io/created-by: kubectl-directpv - directpv.min.io/version: v1beta1 - name: directpv-min-io -spec: - attachRequired: false - podInfoOnMount: true - volumeLifecycleModes: - - Persistent - - Ephemeral - - diff --git a/resources/openshift/base/ClusterRole.yaml b/resources/openshift/base/ClusterRole.yaml deleted file mode 100644 index b3d573a1..00000000 --- a/resources/openshift/base/ClusterRole.yaml +++ /dev/null @@ -1,173 +0,0 @@ - -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - annotations: - directpv.min.io/plugin-version: v4.1.4 - rbac.authorization.kubernetes.io/autoupdate: "true" - creationTimestamp: null - labels: - application-name: directpv.min.io - application-type: CSIDriver - directpv.min.io/created-by: kubectl-directpv - directpv.min.io/version: v1beta1 - name: directpv-min-io -rules: -- apiGroups: - - "" - resources: - - persistentvolumes - verbs: - - create - - delete - - get - - list - - patch - - watch -- apiGroups: - - "" - resources: - - persistentvolumeclaims/status - verbs: - - patch -- apiGroups: - - policy - resources: - - podsecuritypolicies - verbs: - - use -- apiGroups: - - "" - resources: - - persistentvolumeclaims - verbs: - - get - - list - - update - - watch -- apiGroups: - - storage.k8s.io - resources: - - storageclasses - verbs: - - get - - list - - watch -- apiGroups: - - "" - resources: - - events - verbs: - - create - - list - - patch - - update - - watch -- apiGroups: - - snapshot.storage.k8s.io - resources: - - volumesnapshots - verbs: - - get - - list -- apiGroups: - - snapshot.storage.k8s.io - resources: - - volumesnapshotcontents - verbs: - - get - - list -- apiGroups: - - storage.k8s.io - resources: - - csinodes - verbs: - - get - - list - - watch -- apiGroups: - - "" - resources: - - nodes - verbs: - - get - - list - - watch -- apiGroups: - - storage.k8s.io - resources: - - volumeattachments - verbs: - - get - - list - - watch -- apiGroups: - - "" - resources: - - endpoints - verbs: - - create - - delete - - get - - list - - update - - watch -- apiGroups: - - coordination.k8s.io - resources: - - leases - verbs: - - create - - delete - - get - - list - - update - - watch -- apiGroups: - - apiextensions.k8s.io - - directpv.min.io - resources: - - customresourcedefinitions - - customresourcedefinition - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - directpv.min.io - resources: - - directpvdrives - - directpvvolumes - - directpvnodes - - directpvinitrequests - verbs: - - create - - delete - - get - - list - - update - - watch -- apiGroups: - - "" - resources: - - pods - - pod - verbs: - - get - - list - - watch -- apiGroups: - - "" - resources: - - secrets - - secret - verbs: - - get - - list - - watch - - diff --git a/resources/openshift/base/ClusterRoleBinding.yaml b/resources/openshift/base/ClusterRoleBinding.yaml deleted file mode 100644 index 68c7ee30..00000000 --- a/resources/openshift/base/ClusterRoleBinding.yaml +++ /dev/null @@ -1,24 +0,0 @@ - -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - annotations: - directpv.min.io/plugin-version: v4.1.4 - rbac.authorization.kubernetes.io/autoupdate: "true" - creationTimestamp: null - labels: - application-name: directpv.min.io - application-type: CSIDriver - directpv.min.io/created-by: kubectl-directpv - directpv.min.io/version: v1beta1 - name: directpv-min-io -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: directpv-min-io -subjects: -- kind: ServiceAccount - name: directpv-min-io - namespace: directpv - - diff --git a/resources/openshift/base/DaemonSet.yaml b/resources/openshift/base/DaemonSet.yaml deleted file mode 100644 index e5dea658..00000000 --- a/resources/openshift/base/DaemonSet.yaml +++ /dev/null @@ -1,234 +0,0 @@ - -apiVersion: apps/v1 -kind: DaemonSet -metadata: - annotations: - directpv.min.io/image-tag: v4.1.4 - directpv.min.io/plugin-version: v4.1.4 - creationTimestamp: null - labels: - application-name: directpv.min.io - application-type: CSIDriver - directpv.min.io/created-by: kubectl-directpv - directpv.min.io/version: v1beta1 - name: node-server - namespace: directpv -spec: - selector: - matchLabels: - selector.directpv.min.io: directpv-min-io-u4ixd - template: - metadata: - annotations: - created-by: kubectl-directpv - creationTimestamp: null - labels: - selector.directpv.min.io: directpv-min-io-u4ixd - selector.directpv.min.io.service: enabled - name: node-server - namespace: directpv - spec: - containers: - - args: - - --v=3 - - --csi-address=unix:///csi/csi.sock - - --kubelet-registration-path=/var/lib/kubelet/plugins/directpv-min-io/csi.sock - env: - - name: KUBE_NODE_NAME - valueFrom: - fieldRef: - apiVersion: v1 - fieldPath: spec.nodeName - image: registry.redhat.io/openshift4/ose-csi-node-driver-registrar-rhel8@sha256:ab54e6a2e8a6a1ca2da5aaf25f784c09f5bf22ea32224ec1bdb6c564f88695a9 - name: node-driver-registrar - resources: {} - terminationMessagePath: /var/log/driver-registrar-termination-log - terminationMessagePolicy: FallbackToLogsOnError - volumeMounts: - - mountPath: /csi - mountPropagation: None - name: socket-dir - - mountPath: /registration - mountPropagation: None - name: registration-dir - - args: - - node-server - - -v=3 - - --identity=directpv-min-io - - --csi-endpoint=$(CSI_ENDPOINT) - - --kube-node-name=$(KUBE_NODE_NAME) - - --readiness-port=30443 - - --metrics-port=10443 - env: - - name: KUBE_NODE_NAME - valueFrom: - fieldRef: - apiVersion: v1 - fieldPath: spec.nodeName - - name: CSI_ENDPOINT - value: unix:///csi/csi.sock - image: quay.io/minio/directpv:v4.1.4 - livenessProbe: - failureThreshold: 5 - httpGet: - path: /healthz - port: healthz - initialDelaySeconds: 60 - periodSeconds: 10 - timeoutSeconds: 10 - name: node-server - ports: - - containerPort: 30443 - name: readinessport - protocol: TCP - - containerPort: 9898 - name: healthz - protocol: TCP - - containerPort: 10443 - name: metrics - protocol: TCP - readinessProbe: - failureThreshold: 5 - httpGet: - path: /ready - port: readinessport - scheme: HTTP - initialDelaySeconds: 60 - periodSeconds: 10 - timeoutSeconds: 10 - resources: {} - securityContext: - privileged: true - terminationMessagePath: /var/log/driver-termination-log - terminationMessagePolicy: FallbackToLogsOnError - volumeMounts: - - mountPath: /csi - mountPropagation: None - name: socket-dir - - mountPath: /var/lib/kubelet/pods - mountPropagation: Bidirectional - name: mountpoint-dir - - mountPath: /var/lib/kubelet/plugins - mountPropagation: Bidirectional - name: plugins-dir - - mountPath: /var/lib/directpv/ - mountPropagation: Bidirectional - name: directpv-common-root - - mountPath: /var/lib/direct-csi/ - mountPropagation: Bidirectional - name: direct-csi-common-root - - mountPath: /sys - mountPropagation: Bidirectional - name: sysfs - - mountPath: /dev - mountPropagation: HostToContainer - name: devfs - readOnly: true - - mountPath: /run/udev/data - mountPropagation: Bidirectional - name: run-udev-data-dir - readOnly: true - - args: - - node-controller - - -v=3 - - --kube-node-name=$(KUBE_NODE_NAME) - env: - - name: KUBE_NODE_NAME - valueFrom: - fieldRef: - apiVersion: v1 - fieldPath: spec.nodeName - image: quay.io/minio/directpv:v4.1.4 - name: node-controller - resources: {} - securityContext: - privileged: true - terminationMessagePath: /var/log/driver-termination-log - terminationMessagePolicy: FallbackToLogsOnError - volumeMounts: - - mountPath: /csi - mountPropagation: None - name: socket-dir - - mountPath: /var/lib/kubelet/pods - mountPropagation: Bidirectional - name: mountpoint-dir - - mountPath: /var/lib/kubelet/plugins - mountPropagation: Bidirectional - name: plugins-dir - - mountPath: /var/lib/directpv/ - mountPropagation: Bidirectional - name: directpv-common-root - - mountPath: /var/lib/direct-csi/ - mountPropagation: Bidirectional - name: direct-csi-common-root - - mountPath: /sys - mountPropagation: Bidirectional - name: sysfs - - mountPath: /dev - mountPropagation: HostToContainer - name: devfs - readOnly: true - - mountPath: /run/udev/data - mountPropagation: Bidirectional - name: run-udev-data-dir - readOnly: true - - args: - - --csi-address=/csi/csi.sock - - --health-port=9898 - image: registry.redhat.io/openshift4/ose-csi-livenessprobe-rhel8@sha256:b28029f929fe2a28e666910d1acc57c3474fabdb2f9129688ef1ca56c7231d90 - name: liveness-probe - resources: {} - terminationMessagePath: /var/log/driver-liveness-termination-log - terminationMessagePolicy: FallbackToLogsOnError - volumeMounts: - - mountPath: /csi - mountPropagation: None - name: socket-dir - hostPID: true - serviceAccountName: directpv-min-io - volumes: - - hostPath: - path: /var/lib/kubelet/plugins/directpv-min-io - type: DirectoryOrCreate - name: socket-dir - - hostPath: - path: /var/lib/kubelet/pods - type: DirectoryOrCreate - name: mountpoint-dir - - hostPath: - path: /var/lib/kubelet/plugins_registry - type: DirectoryOrCreate - name: registration-dir - - hostPath: - path: /var/lib/kubelet/plugins - type: DirectoryOrCreate - name: plugins-dir - - hostPath: - path: /var/lib/directpv/ - type: DirectoryOrCreate - name: directpv-common-root - - hostPath: - path: /var/lib/direct-csi/ - type: DirectoryOrCreate - name: direct-csi-common-root - - hostPath: - path: /sys - type: DirectoryOrCreate - name: sysfs - - hostPath: - path: /dev - type: DirectoryOrCreate - name: devfs - - hostPath: - path: /run/udev/data - type: DirectoryOrCreate - name: run-udev-data-dir - updateStrategy: - type: RollingUpdate -status: - currentNumberScheduled: 0 - desiredNumberScheduled: 0 - numberMisscheduled: 0 - numberReady: 0 - - diff --git a/resources/openshift/base/Deployment.yaml b/resources/openshift/base/Deployment.yaml deleted file mode 100644 index e527988f..00000000 --- a/resources/openshift/base/Deployment.yaml +++ /dev/null @@ -1,122 +0,0 @@ - -apiVersion: apps/v1 -kind: Deployment -metadata: - annotations: - directpv.min.io/image-tag: v4.1.4 - directpv.min.io/plugin-version: v4.1.4 - creationTimestamp: null - labels: - application-name: directpv.min.io - application-type: CSIDriver - directpv.min.io/created-by: kubectl-directpv - directpv.min.io/version: v1beta1 - name: controller - namespace: directpv -spec: - replicas: 3 - selector: - matchLabels: - selector.directpv.min.io: controller-tnfpz - strategy: - type: Recreate - template: - metadata: - annotations: - created-by: kubectl-directpv - creationTimestamp: null - labels: - selector.directpv.min.io: controller-tnfpz - name: controller - namespace: directpv - spec: - containers: - - args: - - --v=3 - - --timeout=300s - - --csi-address=$(CSI_ENDPOINT) - - --leader-election - - --feature-gates=Topology=true - - --strict-topology - env: - - name: CSI_ENDPOINT - value: unix:///csi/csi.sock - image: registry.redhat.io/openshift4/ose-csi-external-provisioner-rhel8@sha256:8bf8aa8975790e19ba107fd58699f98389e3fb692d192f4df3078fff7f0a4bba - name: csi-provisioner - resources: {} - securityContext: - privileged: true - terminationMessagePath: /var/log/controller-provisioner-termination-log - terminationMessagePolicy: FallbackToLogsOnError - volumeMounts: - - mountPath: /csi - mountPropagation: None - name: socket-dir - - args: - - --v=3 - - --timeout=300s - - --csi-address=$(CSI_ENDPOINT) - - --leader-election - env: - - name: CSI_ENDPOINT - value: unix:///csi/csi.sock - image: registry.redhat.io/openshift4/ose-csi-external-resizer-rhel8@sha256:bed8de36bac80108909205342b2d92e4de5adbfa33bf13f9346236fca52a0d3e - name: csi-resizer - resources: {} - securityContext: - privileged: true - terminationMessagePath: /var/log/controller-csi-resizer-termination-log - terminationMessagePolicy: FallbackToLogsOnError - volumeMounts: - - mountPath: /csi - mountPropagation: None - name: socket-dir - - args: - - controller - - --identity=directpv-min-io - - -v=3 - - --csi-endpoint=$(CSI_ENDPOINT) - - --kube-node-name=$(KUBE_NODE_NAME) - - --readiness-port=30443 - env: - - name: KUBE_NODE_NAME - valueFrom: - fieldRef: - apiVersion: v1 - fieldPath: spec.nodeName - - name: CSI_ENDPOINT - value: unix:///csi/csi.sock - image: quay.io/minio/directpv:v4.1.4 - name: controller - ports: - - containerPort: 30443 - name: readinessport - protocol: TCP - - containerPort: 9898 - name: healthz - protocol: TCP - readinessProbe: - failureThreshold: 5 - httpGet: - path: /ready - port: readinessport - scheme: HTTP - initialDelaySeconds: 60 - periodSeconds: 10 - timeoutSeconds: 10 - resources: {} - securityContext: - privileged: true - volumeMounts: - - mountPath: /csi - mountPropagation: None - name: socket-dir - serviceAccountName: directpv-min-io - volumes: - - hostPath: - path: /var/lib/kubelet/plugins/controller-controller - type: DirectoryOrCreate - name: socket-dir -status: {} - - diff --git a/resources/openshift/base/Namespace.yaml b/resources/openshift/base/Namespace.yaml deleted file mode 100644 index 720dc640..00000000 --- a/resources/openshift/base/Namespace.yaml +++ /dev/null @@ -1,19 +0,0 @@ -apiVersion: v1 -kind: Namespace -metadata: - annotations: - directpv.min.io/plugin-version: v4.1.4 - creationTimestamp: null - finalizers: - - foregroundDeletion - labels: - application-name: directpv.min.io - application-type: CSIDriver - directpv.min.io/created-by: kubectl-directpv - directpv.min.io/version: v1beta1 - pod-security.kubernetes.io/enforce: privileged - name: directpv -spec: {} -status: {} - - diff --git a/resources/openshift/base/Role.yaml b/resources/openshift/base/Role.yaml deleted file mode 100644 index 7c6b5cb8..00000000 --- a/resources/openshift/base/Role.yaml +++ /dev/null @@ -1,29 +0,0 @@ - -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - annotations: - directpv.min.io/plugin-version: v4.1.4 - rbac.authorization.kubernetes.io/autoupdate: "true" - creationTimestamp: null - labels: - application-name: directpv.min.io - application-type: CSIDriver - directpv.min.io/created-by: kubectl-directpv - directpv.min.io/version: v1beta1 - name: directpv-min-io - namespace: directpv -rules: -- apiGroups: - - coordination.k8s.io - resources: - - leases - verbs: - - create - - delete - - get - - list - - update - - watch - - diff --git a/resources/openshift/base/RoleBinding.yaml b/resources/openshift/base/RoleBinding.yaml deleted file mode 100644 index dbf8f821..00000000 --- a/resources/openshift/base/RoleBinding.yaml +++ /dev/null @@ -1,25 +0,0 @@ - -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - annotations: - directpv.min.io/plugin-version: v4.1.4 - rbac.authorization.kubernetes.io/autoupdate: "true" - creationTimestamp: null - labels: - application-name: directpv.min.io - application-type: CSIDriver - directpv.min.io/created-by: kubectl-directpv - directpv.min.io/version: v1beta1 - name: directpv-min-io - namespace: directpv -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: directpv-min-io -subjects: -- kind: ServiceAccount - name: directpv-min-io - namespace: directpv - - diff --git a/resources/openshift/base/ServiceAccount.yaml b/resources/openshift/base/ServiceAccount.yaml deleted file mode 100644 index 897548f3..00000000 --- a/resources/openshift/base/ServiceAccount.yaml +++ /dev/null @@ -1,16 +0,0 @@ - -apiVersion: v1 -kind: ServiceAccount -metadata: - annotations: - directpv.min.io/plugin-version: v4.1.4 - creationTimestamp: null - labels: - application-name: directpv.min.io - application-type: CSIDriver - directpv.min.io/created-by: kubectl-directpv - directpv.min.io/version: v1beta1 - name: directpv-min-io - namespace: directpv - - diff --git a/resources/openshift/base/StorageClass.yaml b/resources/openshift/base/StorageClass.yaml deleted file mode 100644 index c9baa092..00000000 --- a/resources/openshift/base/StorageClass.yaml +++ /dev/null @@ -1,28 +0,0 @@ - -allowVolumeExpansion: true -allowedTopologies: -- matchLabelExpressions: - - key: directpv.min.io/identity - values: - - directpv-min-io -apiVersion: storage.k8s.io/v1 -kind: StorageClass -metadata: - annotations: - directpv.min.io/plugin-version: v4.1.4 - creationTimestamp: null - finalizers: - - foregroundDeletion - labels: - application-name: directpv.min.io - application-type: CSIDriver - directpv.min.io/created-by: kubectl-directpv - directpv.min.io/version: v1beta1 - name: directpv-min-io -parameters: - csi.storage.k8s.io/fstype: xfs -provisioner: directpv-min-io -reclaimPolicy: Delete -volumeBindingMode: WaitForFirstConsumer - - diff --git a/resources/openshift/base/directpvdrives.directpv.min.io.yaml b/resources/openshift/base/directpvdrives.directpv.min.io.yaml deleted file mode 100644 index b1b34c81..00000000 --- a/resources/openshift/base/directpvdrives.directpv.min.io.yaml +++ /dev/null @@ -1,168 +0,0 @@ - -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - controller-gen.kubebuilder.io/version: v0.15.0 - creationTimestamp: null - labels: - directpv.min.io/version: v1beta1 - name: directpvdrives.directpv.min.io -spec: - conversion: - strategy: None - group: directpv.min.io - names: - kind: DirectPVDrive - listKind: DirectPVDriveList - plural: directpvdrives - singular: directpvdrive - scope: Cluster - versions: - - name: v1beta1 - schema: - openAPIV3Schema: - description: DirectPVDrive denotes drive CRD object. - properties: - apiVersion: - description: |- - APIVersion defines the versioned schema of this representation of an object. - Servers should convert recognized schemas to the latest internal value, and - may reject unrecognized values. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources - type: string - kind: - description: |- - Kind is a string value representing the REST resource this object represents. - Servers may infer this from the endpoint the client submits requests to. - Cannot be updated. - In CamelCase. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds - type: string - metadata: - type: object - spec: - description: DriveSpec represents DirectPV drive specification values. - properties: - relabel: - type: boolean - unschedulable: - type: boolean - type: object - status: - description: DriveStatus denotes drive information. - properties: - allocatedCapacity: - format: int64 - type: integer - conditions: - items: - description: "Condition contains details for one aspect of the current - state of this API Resource.\n---\nThis struct is intended for - direct use as an array at the field path .status.conditions. For - example,\n\n\n\ttype FooStatus struct{\n\t // Represents the - observations of a foo's current state.\n\t // Known .status.conditions.type - are: \"Available\", \"Progressing\", and \"Degraded\"\n\t // - +patchMergeKey=type\n\t // +patchStrategy=merge\n\t // +listType=map\n\t - \ // +listMapKey=type\n\t Conditions []metav1.Condition `json:\"conditions,omitempty\" - patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"`\n\n\n\t - \ // other fields\n\t}" - properties: - lastTransitionTime: - description: |- - lastTransitionTime is the last time the condition transitioned from one status to another. - This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. - format: date-time - type: string - message: - description: |- - message is a human readable message indicating details about the transition. - This may be an empty string. - maxLength: 32768 - type: string - observedGeneration: - description: |- - observedGeneration represents the .metadata.generation that the condition was set based upon. - For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date - with respect to the current state of the instance. - format: int64 - minimum: 0 - type: integer - reason: - description: |- - reason contains a programmatic identifier indicating the reason for the condition's last transition. - Producers of specific condition types may define expected values and meanings for this field, - and whether the values are considered a guaranteed API. - The value should be a CamelCase string. - This field may not be empty. - maxLength: 1024 - minLength: 1 - pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ - type: string - status: - description: status of the condition, one of True, False, Unknown. - enum: - - "True" - - "False" - - Unknown - type: string - type: - description: |- - type of condition in CamelCase or in foo.example.com/CamelCase. - --- - Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be - useful (see .node.status.conditions), the ability to deconflict is important. - The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) - maxLength: 316 - pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ - type: string - required: - - lastTransitionTime - - message - - reason - - status - - type - type: object - type: array - x-kubernetes-list-map-keys: - - type - x-kubernetes-list-type: map - freeCapacity: - format: int64 - type: integer - fsuuid: - type: string - make: - type: string - status: - description: DriveStatus denotes drive status - type: string - topology: - additionalProperties: - type: string - type: object - totalCapacity: - format: int64 - type: integer - required: - - allocatedCapacity - - freeCapacity - - fsuuid - - status - - topology - - totalCapacity - type: object - required: - - metadata - - status - type: object - served: true - storage: true -status: - acceptedNames: - kind: "" - plural: "" - conditions: null - storedVersions: null - - diff --git a/resources/openshift/base/directpvinitrequests.directpv.min.io.yaml b/resources/openshift/base/directpvinitrequests.directpv.min.io.yaml deleted file mode 100644 index 48eef357..00000000 --- a/resources/openshift/base/directpvinitrequests.directpv.min.io.yaml +++ /dev/null @@ -1,104 +0,0 @@ - -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - controller-gen.kubebuilder.io/version: v0.15.0 - creationTimestamp: null - labels: - directpv.min.io/version: v1beta1 - name: directpvinitrequests.directpv.min.io -spec: - conversion: - strategy: None - group: directpv.min.io - names: - kind: DirectPVInitRequest - listKind: DirectPVInitRequestList - plural: directpvinitrequests - singular: directpvinitrequest - scope: Cluster - versions: - - name: v1beta1 - schema: - openAPIV3Schema: - description: DirectPVInitRequest denotes DirectPVInitRequest CRD object. - properties: - apiVersion: - description: |- - APIVersion defines the versioned schema of this representation of an object. - Servers should convert recognized schemas to the latest internal value, and - may reject unrecognized values. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources - type: string - kind: - description: |- - Kind is a string value representing the REST resource this object represents. - Servers may infer this from the endpoint the client submits requests to. - Cannot be updated. - In CamelCase. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds - type: string - metadata: - type: object - spec: - description: InitRequestSpec represents the spec for InitRequest. - properties: - devices: - items: - description: InitDevice represents the device requested for initialization. - properties: - force: - type: boolean - id: - type: string - name: - type: string - required: - - force - - id - - name - type: object - type: array - x-kubernetes-list-type: atomic - required: - - devices - type: object - status: - description: InitRequestStatus represents the status of the InitRequest. - properties: - results: - items: - description: InitDeviceResult represents the result of the InitDeviceRequest. - properties: - error: - type: string - name: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-type: atomic - status: - description: InitStatus denotes initialization status - type: string - required: - - results - - status - type: object - required: - - metadata - - spec - - status - type: object - served: true - storage: true -status: - acceptedNames: - kind: "" - plural: "" - conditions: null - storedVersions: null - - diff --git a/resources/openshift/base/directpvnodes.directpv.min.io.yaml b/resources/openshift/base/directpvnodes.directpv.min.io.yaml deleted file mode 100644 index 5de53e42..00000000 --- a/resources/openshift/base/directpvnodes.directpv.min.io.yaml +++ /dev/null @@ -1,170 +0,0 @@ - -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - controller-gen.kubebuilder.io/version: v0.15.0 - creationTimestamp: null - labels: - directpv.min.io/version: v1beta1 - name: directpvnodes.directpv.min.io -spec: - conversion: - strategy: None - group: directpv.min.io - names: - kind: DirectPVNode - listKind: DirectPVNodeList - plural: directpvnodes - singular: directpvnode - scope: Cluster - versions: - - name: v1beta1 - schema: - openAPIV3Schema: - description: DirectPVNode denotes Node CRD object. - properties: - apiVersion: - description: |- - APIVersion defines the versioned schema of this representation of an object. - Servers should convert recognized schemas to the latest internal value, and - may reject unrecognized values. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources - type: string - kind: - description: |- - Kind is a string value representing the REST resource this object represents. - Servers may infer this from the endpoint the client submits requests to. - Cannot be updated. - In CamelCase. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds - type: string - metadata: - type: object - spec: - description: NodeSpec represents DirectPV node specification values. - properties: - refresh: - type: boolean - type: object - status: - description: NodeStatus denotes node information. - properties: - conditions: - items: - description: "Condition contains details for one aspect of the current - state of this API Resource.\n---\nThis struct is intended for - direct use as an array at the field path .status.conditions. For - example,\n\n\n\ttype FooStatus struct{\n\t // Represents the - observations of a foo's current state.\n\t // Known .status.conditions.type - are: \"Available\", \"Progressing\", and \"Degraded\"\n\t // - +patchMergeKey=type\n\t // +patchStrategy=merge\n\t // +listType=map\n\t - \ // +listMapKey=type\n\t Conditions []metav1.Condition `json:\"conditions,omitempty\" - patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"`\n\n\n\t - \ // other fields\n\t}" - properties: - lastTransitionTime: - description: |- - lastTransitionTime is the last time the condition transitioned from one status to another. - This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. - format: date-time - type: string - message: - description: |- - message is a human readable message indicating details about the transition. - This may be an empty string. - maxLength: 32768 - type: string - observedGeneration: - description: |- - observedGeneration represents the .metadata.generation that the condition was set based upon. - For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date - with respect to the current state of the instance. - format: int64 - minimum: 0 - type: integer - reason: - description: |- - reason contains a programmatic identifier indicating the reason for the condition's last transition. - Producers of specific condition types may define expected values and meanings for this field, - and whether the values are considered a guaranteed API. - The value should be a CamelCase string. - This field may not be empty. - maxLength: 1024 - minLength: 1 - pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ - type: string - status: - description: status of the condition, one of True, False, Unknown. - enum: - - "True" - - "False" - - Unknown - type: string - type: - description: |- - type of condition in CamelCase or in foo.example.com/CamelCase. - --- - Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be - useful (see .node.status.conditions), the ability to deconflict is important. - The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) - maxLength: 316 - pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ - type: string - required: - - lastTransitionTime - - message - - reason - - status - - type - type: object - type: array - x-kubernetes-list-map-keys: - - type - x-kubernetes-list-type: map - devices: - items: - description: Device denotes the device information in a drive - properties: - deniedReason: - type: string - fsType: - type: string - fsuuid: - type: string - id: - type: string - majorMinor: - type: string - make: - type: string - name: - type: string - size: - format: int64 - type: integer - required: - - id - - majorMinor - - name - - size - type: object - type: array - x-kubernetes-list-type: atomic - required: - - devices - type: object - required: - - metadata - - status - type: object - served: true - storage: true -status: - acceptedNames: - kind: "" - plural: "" - conditions: null - storedVersions: null - - diff --git a/resources/openshift/base/directpvvolumes.directpv.min.io.yaml b/resources/openshift/base/directpvvolumes.directpv.min.io.yaml deleted file mode 100644 index 7ad2ca89..00000000 --- a/resources/openshift/base/directpvvolumes.directpv.min.io.yaml +++ /dev/null @@ -1,162 +0,0 @@ - -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - controller-gen.kubebuilder.io/version: v0.15.0 - creationTimestamp: null - labels: - directpv.min.io/version: v1beta1 - name: directpvvolumes.directpv.min.io -spec: - conversion: - strategy: None - group: directpv.min.io - names: - kind: DirectPVVolume - listKind: DirectPVVolumeList - plural: directpvvolumes - singular: directpvvolume - scope: Cluster - versions: - - name: v1beta1 - schema: - openAPIV3Schema: - description: DirectPVVolume denotes volume CRD object. - properties: - apiVersion: - description: |- - APIVersion defines the versioned schema of this representation of an object. - Servers should convert recognized schemas to the latest internal value, and - may reject unrecognized values. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources - type: string - kind: - description: |- - Kind is a string value representing the REST resource this object represents. - Servers may infer this from the endpoint the client submits requests to. - Cannot be updated. - In CamelCase. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds - type: string - metadata: - type: object - status: - description: VolumeStatus denotes volume information. - properties: - availableCapacity: - format: int64 - type: integer - conditions: - items: - description: "Condition contains details for one aspect of the current - state of this API Resource.\n---\nThis struct is intended for - direct use as an array at the field path .status.conditions. For - example,\n\n\n\ttype FooStatus struct{\n\t // Represents the - observations of a foo's current state.\n\t // Known .status.conditions.type - are: \"Available\", \"Progressing\", and \"Degraded\"\n\t // - +patchMergeKey=type\n\t // +patchStrategy=merge\n\t // +listType=map\n\t - \ // +listMapKey=type\n\t Conditions []metav1.Condition `json:\"conditions,omitempty\" - patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"`\n\n\n\t - \ // other fields\n\t}" - properties: - lastTransitionTime: - description: |- - lastTransitionTime is the last time the condition transitioned from one status to another. - This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. - format: date-time - type: string - message: - description: |- - message is a human readable message indicating details about the transition. - This may be an empty string. - maxLength: 32768 - type: string - observedGeneration: - description: |- - observedGeneration represents the .metadata.generation that the condition was set based upon. - For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date - with respect to the current state of the instance. - format: int64 - minimum: 0 - type: integer - reason: - description: |- - reason contains a programmatic identifier indicating the reason for the condition's last transition. - Producers of specific condition types may define expected values and meanings for this field, - and whether the values are considered a guaranteed API. - The value should be a CamelCase string. - This field may not be empty. - maxLength: 1024 - minLength: 1 - pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ - type: string - status: - description: status of the condition, one of True, False, Unknown. - enum: - - "True" - - "False" - - Unknown - type: string - type: - description: |- - type of condition in CamelCase or in foo.example.com/CamelCase. - --- - Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be - useful (see .node.status.conditions), the ability to deconflict is important. - The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) - maxLength: 316 - pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ - type: string - required: - - lastTransitionTime - - message - - reason - - status - - type - type: object - type: array - x-kubernetes-list-map-keys: - - type - x-kubernetes-list-type: map - dataPath: - type: string - fsuuid: - type: string - stagingTargetPath: - type: string - status: - description: VolumeStatus represents status of a volume. - type: string - targetPath: - type: string - totalCapacity: - format: int64 - type: integer - usedCapacity: - format: int64 - type: integer - required: - - availableCapacity - - dataPath - - fsuuid - - stagingTargetPath - - status - - targetPath - - totalCapacity - - usedCapacity - type: object - required: - - metadata - - status - type: object - served: true - storage: true -status: - acceptedNames: - kind: "" - plural: "" - conditions: null - storedVersions: null - - diff --git a/resources/openshift/kustomization.yaml b/resources/openshift/kustomization.yaml index 88034414..2b23416c 100644 --- a/resources/openshift/kustomization.yaml +++ b/resources/openshift/kustomization.yaml @@ -1,21 +1,22 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization -namespace: directpv -commonAnnotations: - directpv.aistor.min.io/authors: MinIO, Inc. - directpv.min.io/support: https://subnet.min.io + resources: - - base/Namespace.yaml - - base/directpvdrives.directpv.min.io.yaml - - base/directpvinitrequests.directpv.min.io.yaml - - base/directpvnodes.directpv.min.io.yaml - - base/directpvvolumes.directpv.min.io.yaml - - base/CSIDriver.yaml - - base/StorageClass.yaml - - base/ServiceAccount.yaml - - base/ClusterRole.yaml - - base/ClusterRoleBinding.yaml - - base/Role.yaml - - base/RoleBinding.yaml - - base/DaemonSet.yaml - - base/Deployment.yaml + - ../base + +images: + - name: quay.io/minio/csi-node-driver-registrar + newName: registry.redhat.io/openshift4/ose-csi-node-driver-registrar-rhel8 + digest: sha256:ab54e6a2e8a6a1ca2da5aaf25f784c09f5bf22ea32224ec1bdb6c564f88695a9 + + - name: quay.io/minio/livenessprobe + newName: registry.redhat.io/openshift4/ose-csi-livenessprobe-rhel8 + digest: sha256:b28029f929fe2a28e666910d1acc57c3474fabdb2f9129688ef1ca56c7231d90 + + - name: quay.io/minio/csi-provisioner + newName: registry.redhat.io/openshift4/ose-csi-external-provisioner-rhel8 + digest: sha256:8bf8aa8975790e19ba107fd58699f98389e3fb692d192f4df3078fff7f0a4bba + + - name: quay.io/minio/csi-resizer@sha256:58fa627393f20892b105a137d27e236dfaec233a3a64980f84dcb15f38c21533 + newName: registry.redhat.io/openshift4/ose-csi-external-resizer-rhel8 + digest: sha256:bed8de36bac80108909205342b2d92e4de5adbfa33bf13f9346236fca52a0d3e