From 68885e820b1e5d8ccbf2193f9edceae00150a30b Mon Sep 17 00:00:00 2001 From: Mateus Oliveira Date: Mon, 17 Mar 2025 16:16:01 -0300 Subject: [PATCH 1/6] fix: OADP must-gather refactor Signed-off-by: Mateus Oliveira --- .gitignore | 6 +- must-gather/Dockerfile | 42 +- must-gather/Makefile | 51 - must-gather/README.md | 91 +- must-gather/cmd/main.go | 30 + .../_metrics_chart_template_part_1.html | 98 - .../_metrics_chart_template_part_2.html | 32 - .../collection-scripts/debug/tail_failed_pods | 11 - must-gather/collection-scripts/gather | 83 - must-gather/collection-scripts/gather_crds | 23 - must-gather/collection-scripts/gather_crs | 35 - must-gather/collection-scripts/gather_logs | 61 - .../gather_logs_without_zip | 41 - must-gather/collection-scripts/gather_metrics | 40 - .../collection-scripts/gather_metrics_dump | 28 - .../collection-scripts/gather_versions | 101 - .../collection-scripts/gather_without_tls | 3 - .../logs/gather_logs_backup | 25 - .../collection-scripts/logs/gather_logs_pods | 23 - .../collection-scripts/logs/gather_logs_pvb | 17 - .../collection-scripts/logs/gather_logs_pvr | 16 - .../logs/gather_logs_restore | 25 - must-gather/collection-scripts/pwait | 7 - .../time_window_gather/gather_1h | 3 - .../time_window_gather/gather_1h_essential | 3 - .../time_window_gather/gather_24h | 3 - .../time_window_gather/gather_24h_essential | 3 - .../time_window_gather/gather_6h | 3 - .../time_window_gather/gather_6h_essential | 3 - .../time_window_gather/gather_72h | 3 - .../time_window_gather/gather_72h_essential | 3 - .../time_window_gather/gather_all | 3 - .../time_window_gather/gather_all_essential | 3 - .../time_window_gather/gather_with_timeout | 4 - must-gather/go.mod | 131 ++ must-gather/go.sum | 390 ++++ must-gather/pkg/cli.go | 364 ++++ must-gather/pkg/gather/gather.go | 11 + must-gather/pkg/gvk/gvk.go | 138 ++ must-gather/pkg/templates/summary.go | 1670 +++++++++++++++++ 40 files changed, 2769 insertions(+), 858 deletions(-) delete mode 100644 must-gather/Makefile create mode 100644 must-gather/cmd/main.go delete mode 100644 must-gather/collection-scripts/_metrics_chart_template_part_1.html delete mode 100644 must-gather/collection-scripts/_metrics_chart_template_part_2.html delete mode 100755 must-gather/collection-scripts/debug/tail_failed_pods delete mode 100755 must-gather/collection-scripts/gather delete mode 100755 must-gather/collection-scripts/gather_crds delete mode 100755 must-gather/collection-scripts/gather_crs delete mode 100755 must-gather/collection-scripts/gather_logs delete mode 100755 must-gather/collection-scripts/gather_logs_without_zip delete mode 100755 must-gather/collection-scripts/gather_metrics delete mode 100755 must-gather/collection-scripts/gather_metrics_dump delete mode 100755 must-gather/collection-scripts/gather_versions delete mode 100755 must-gather/collection-scripts/gather_without_tls delete mode 100755 must-gather/collection-scripts/logs/gather_logs_backup delete mode 100755 must-gather/collection-scripts/logs/gather_logs_pods delete mode 100755 must-gather/collection-scripts/logs/gather_logs_pvb delete mode 100755 must-gather/collection-scripts/logs/gather_logs_pvr delete mode 100755 must-gather/collection-scripts/logs/gather_logs_restore delete mode 100644 must-gather/collection-scripts/pwait delete mode 100755 must-gather/collection-scripts/time_window_gather/gather_1h delete mode 100755 must-gather/collection-scripts/time_window_gather/gather_1h_essential delete mode 100755 must-gather/collection-scripts/time_window_gather/gather_24h delete mode 100755 must-gather/collection-scripts/time_window_gather/gather_24h_essential delete mode 100755 must-gather/collection-scripts/time_window_gather/gather_6h delete mode 100755 must-gather/collection-scripts/time_window_gather/gather_6h_essential delete mode 100755 must-gather/collection-scripts/time_window_gather/gather_72h delete mode 100755 must-gather/collection-scripts/time_window_gather/gather_72h_essential delete mode 100755 must-gather/collection-scripts/time_window_gather/gather_all delete mode 100755 must-gather/collection-scripts/time_window_gather/gather_all_essential delete mode 100755 must-gather/collection-scripts/time_window_gather/gather_with_timeout create mode 100644 must-gather/go.mod create mode 100644 must-gather/go.sum create mode 100644 must-gather/pkg/cli.go create mode 100644 must-gather/pkg/gather/gather.go create mode 100644 must-gather/pkg/gvk/gvk.go create mode 100644 must-gather/pkg/templates/summary.go diff --git a/.gitignore b/.gitignore index 2bd0422bcee..d1e0be2b342 100644 --- a/.gitignore +++ b/.gitignore @@ -38,4 +38,8 @@ cache/ debug.test* # Others -.envrc \ No newline at end of file +.envrc + +# must-gather +must-gather/must-gather/ +must-gather/must-gather.local.*/ diff --git a/must-gather/Dockerfile b/must-gather/Dockerfile index d994aaacbe2..ae13ab25472 100644 --- a/must-gather/Dockerfile +++ b/must-gather/Dockerfile @@ -1,39 +1,25 @@ -FROM --platform=$BUILDPLATFORM quay.io/konveyor/builder:ubi9-latest AS konveyor-builder +FROM --platform=$BUILDPLATFORM quay.io/konveyor/builder:ubi9-latest AS builder ARG BUILDPLATFORM ARG TARGETOS ARG TARGETARCH -ARG RESTIC_BRANCH=konveyor-0.15.0 -ARG VELERO_BRANCH=konveyor-dev -WORKDIR /build -RUN curl --location --output velero.tgz https://github.com/openshift/velero/archive/refs/heads/${VELERO_BRANCH}.tar.gz && \ - tar -xzvf velero.tgz && cd velero-${VELERO_BRANCH} && \ - VELERO_COMMIT=$(git ls-remote https://github.com/openshift/velero HEAD | awk '{printf $1}') && \ - CGO_ENABLED=0 GOOS=${TARGETOS:-linux} GOARCH=${TARGETARCH} go build -a -mod=mod -ldflags '-extldflags "-static" -X github.com/vmware-tanzu/velero/pkg/buildinfo.Version='"${VELERO_BRANCH}"' -X github.com/vmware-tanzu/velero/pkg/buildinfo.GitSHA='"${VELERO_COMMIT}" -o /velero github.com/vmware-tanzu/velero/cmd/velero && \ - cd .. && rm -rf velero.tgz velero-${VELERO_BRANCH} && \ - curl --location --output restic.tgz https://github.com/openshift/restic/archive/refs/heads/${RESTIC_BRANCH}.tar.gz && \ - tar -xzvf restic.tgz && cd restic-${RESTIC_BRANCH} && \ - CGO_ENABLED=0 GOOS=${TARGETOS:-linux} GOARCH=${TARGETARCH} go build -a -mod=mod -ldflags '-extldflags "-static"' -o /restic github.com/restic/restic/cmd/restic && \ - cd .. && rm -rf restic.tgz restic-${RESTIC_BRANCH} -FROM registry.access.redhat.com/ubi9/go-toolset:latest AS gobuilder +WORKDIR /workspace -RUN go install -v github.com/google/pprof@latest +COPY go.mod go.mod +COPY go.sum go.sum -FROM quay.io/openshift/origin-must-gather:latest AS builder +RUN go mod download -FROM registry.access.redhat.com/ubi9-minimal:latest +COPY cmd/main.go cmd/main.go +COPY pkg/ pkg/ + +RUN CGO_ENABLED=0 GOOS=${TARGETOS:-linux} GOARCH=${TARGETARCH} go build -mod=mod -a -o gather cmd/main.go -RUN echo -ne "[centos-9-appstream]\nname = CentOS 9 (RPMs) - AppStream\nbaseurl = https://mirror.stream.centos.org/9-stream/AppStream/x86_64/os/\nenabled = 1\ngpgcheck = 0" > /etc/yum.repos.d/centos-9-appstream.repo -RUN microdnf -y install rsync tar gzip graphviz findutils +FROM registry.access.redhat.com/ubi9-minimal:latest -COPY --from=gobuilder /opt/app-root/src/go/bin/pprof /usr/bin/pprof -COPY --from=builder /usr/bin/oc /usr/bin/oc -COPY --from=konveyor-builder /velero /usr/bin/velero -COPY --from=konveyor-builder /restic /usr/bin/restic +# oc adm must-gather uses these packages to download the output +RUN microdnf -y install rsync tar -COPY collection-scripts/* /usr/bin/ -COPY collection-scripts/debug/* /usr/bin/ -COPY collection-scripts/logs/* /usr/bin/ -COPY collection-scripts/time_window_gather /usr/bin/ +COPY --from=builder /workspace/gather /usr/bin/gather -ENTRYPOINT /usr/bin/gather +ENTRYPOINT ["/usr/bin/gather"] diff --git a/must-gather/Makefile b/must-gather/Makefile deleted file mode 100644 index c0dbd0b81ff..00000000000 --- a/must-gather/Makefile +++ /dev/null @@ -1,51 +0,0 @@ -IMAGE_REGISTRY ?= quay.io -IMAGE_TAG ?= latest -IMAGE_NAME ?= oadp/must-gather - -PROMETHEUS_LOCAL_DATA_DIR ?= /tmp/oadp-data-dump -# Search for prom_data.tar.gz archive in must-gather output in currect directory by default -PROMETHEUS_DUMP_PATH ?= $(shell find ./must-gather.local* -name prom_data.tar.gz -printf "%T@ %p\n" | sort -n | tail -1 | cut -d" " -f2) - -build: docker-build docker-push - -run: IMAGE_REGISTRY:=ttl.sh -run: IMAGE_NAME:=oadp/must-gather-$(shell git rev-parse --short HEAD)-$(shell echo $$RANDOM) -run: IMAGE_TAG:=1h -run: - IMAGE_REGISTRY=$(IMAGE_REGISTRY) IMAGE_NAME=$(IMAGE_NAME) IMAGE_TAG=$(IMAGE_TAG) make build && \ - oc adm must-gather --image ${IMAGE_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG} - -PLATFORM ?= linux/amd64 -docker-build: - docker build --platform=${PLATFORM} -t ${IMAGE_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG} . - -docker-push: - docker push ${IMAGE_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG} - -.PHONY: build docker-build docker-push - -prometheus-run: prometheus-cleanup-container prometheus-load-dump - docker run -d \ - --mount type=bind,source=${PROMETHEUS_LOCAL_DATA_DIR},target=/prometheus \ - --name oadp-prometheus \ - --publish 127.0.0.1:9090:9090 \ - prom/prometheus:v2.21.0 \ - && echo "Started Prometheus on http://localhost:9090" - -prometheus-load-dump: prometheus-check-archive-file prometheus-cleanup-data - mkdir -p ${PROMETHEUS_LOCAL_DATA_DIR} - tar xvf ${PROMETHEUS_DUMP_PATH} -C ${PROMETHEUS_LOCAL_DATA_DIR} --strip-components=1 --no-same-owner - chmod -R 777 ${PROMETHEUS_LOCAL_DATA_DIR} - -prometheus-cleanup-container: - # delete data files directly from the container to allow delete data directory from outside of the container - docker exec oadp-prometheus rm -rf /prometheus || true - docker rm -f oadp-prometheus || true - -prometheus-cleanup-data: - rm -rf ${PROMETHEUS_LOCAL_DATA_DIR} - -prometheus-cleanup: prometheus-cleanup-container prometheus-cleanup-data - -prometheus-check-archive-file: - test -f "${PROMETHEUS_DUMP_PATH}" || (echo "Error: Prometheus archive file does not exist. Specify valid file in PROMETHEUS_DUMP_PATH environment variable."; exit 1) diff --git a/must-gather/README.md b/must-gather/README.md index 854652a043d..7faf9fe157b 100644 --- a/must-gather/README.md +++ b/must-gather/README.md @@ -1,83 +1,24 @@ -# OADP must-gather +# oadp-must-gather -`must-gather` is a tool built on top of [OpenShift must-gather](https://github.com/openshift/must-gather) -that expands its capabilities to gather OADP operator specific resources +refactor of OADP's must-gather -### Usage +```shell +# fast test of must gather +go run cmd/main.go -**Full gather** -```sh -oc adm must-gather --image=quay.io/konveyor/oadp-must-gather:latest +# real test of must-gather +podman build -t ttl.sh/oadp/must-gather-$(git rev-parse --short HEAD)-$(echo $RANDOM) -f Dockerfile . --platform= +podman push +oc adm must-gather --image= -- /usr/bin/gather -h +oc adm must-gather --image= +# TODO test omg https://github.com/openshift/oadp-operator/pull/1269 ``` -The command above will create a local directory with a dump of the OADP Operator state. +TODO write contributing and pre-requisites -You will get a dump of: -- All namespaces where OADP operator is installed, including pod logs -- All velero.io resources located in those namespaces -- Prometheus metrics - -**Essential-only gather** - -Differences from full gather: - - Logs are only gathered from specified time window - - Skips collection of prometheus metrics. Removes duplicate logs from payload. -``` -# Essential gather (available time windows: [1h, 6h, 24h, 72h, all]) -oc adm must-gather --image=quay.io/konveyor/oadp-must-gather:latest -- /usr/bin/gather_24h_essential -``` - -#### Preview metrics on local Prometheus server - -Get Prometheus metrics data directory dump (last day, might take a while): -```sh -oc adm must-gather --image quay.io/konveyor/oadp-must-gather:latest -- /usr/bin/gather_metrics_dump +TODO when to update go.mod dependencies (like velero, oadp, nac) ``` - -Run local Prometheus instance with dumped data: -```sh -make prometheus-run # and prometheus-cleanup when you're done -``` -The latest Prometheus data file (prom_data.tar.gz) in current directory/subdirectories is searched by default. Could be specified in ```PROMETHEUS_DUMP_PATH``` environment variable. - -### Known Limitations - -`velero backups` with phase `FailedValidation` could cause `must-gather` to be slow. In order to speed up the process, pass a timeout value to the command as follows, -```sh -oc adm must-gather --image=quay.io/konveyor/oadp-must-gather:latest -- /usr/bin/gather_with_timeout -``` -### Support for insecure TLS connections - -If a custom CA cert is used, then must-gather pod fails to grab the output for velero logs/describe. In this case, the user can pass a flag to the must-gather command to allow insecure TLS connections. - -```sh -oc adm must-gather --image=quay.io/konveyor/oadp-must-gather:latest -- /usr/bin/gather_without_tls -``` -Note: By default the flag value is set to `false` - -### Combining Options - -It is not currently possible to combine multiple gather scripts, for example specifying a timeout value at the same time as allowing insecure TLS. However, it is possible in some cases to work around this limitation by setting internal variables on the must-gather command line, like this: - -```sh -oc adm must-gather --image=quay.io/konveyor/oadp-must-gather:latest -- skip_tls=true /usr/bin/gather_with_timeout -``` - -In this case, the `skip_tls` variable is set before running the gather_with_timeout script, and the net effect is a combination of gather_with_timeout and gather_without_tls. The only other variables that can be specified this way are `logs_since`, with a default value of `72h`, and `request_timeout`, with a default value of `0s`. - -### Development -You can build the image locally using the Dockerfile included. - -A `makefile` is also provided. To use it, you must pass a repository via the command-line using the variable `IMAGE_NAME`. -You can also specify the registry using the variable `IMAGE_REGISTRY` (default is [quay.io](https://quay.io)) and the tag via `IMAGE_TAG` (default is `latest`). - -The targets for `make` are as follows: -- `build`: builds the image with the supplied name and pushes it -- `docker-build`: builds the image but does not push it -- `docker-push`: pushes an already-built image - -For example: -```sh -make build IMAGE_NAME=my-repo/must-gather +go get github.com/openshift/oadp-operator@master +go get github.com/migtools/oadp-non-admin@master +go get github.com/openshift/oc@release-4.17 ``` -would build the local repository as `quay.io/my-repo/must-gather:latest` and then push it. diff --git a/must-gather/cmd/main.go b/must-gather/cmd/main.go new file mode 100644 index 00000000000..43ff37512d1 --- /dev/null +++ b/must-gather/cmd/main.go @@ -0,0 +1,30 @@ +package main + +import ( + "os" + "time" + + "github.com/spf13/cobra" + + "github.com/mateusoliveira43/oadp-must-gather/pkg" +) + +// study ref https://github.com/openshift/oadp-operator/pull/1104 + +func init() { + pkg.CLI.Flags().DurationVarP(&pkg.LogsSince, "logs-since", "l", 1*time.Hour, "TODO if zero, all") + pkg.CLI.Flags().DurationVarP(&pkg.Timeout, "timeout", "t", 0, "TODO if zero, no timeout") + pkg.CLI.Flags().BoolVarP(&pkg.SkipTLS, "skip-tls", "s", false, "TODO") + // TODO pkg.CLI.Flags().BoolVarP(&essentialOnly, "essential-only", "e", false, "TODO") + pkg.CLI.Flags().BoolP("help", "h", false, "Show OADP Must-gather help message.") + // TODO JSON output in the future? + + pkg.CLI.SetHelpCommand(&cobra.Command{Hidden: true, Use: "mateus"}) +} + +func main() { + err := pkg.CLI.Execute() + if err != nil { + os.Exit(1) + } +} diff --git a/must-gather/collection-scripts/_metrics_chart_template_part_1.html b/must-gather/collection-scripts/_metrics_chart_template_part_1.html deleted file mode 100644 index 817bc3eea1d..00000000000 --- a/must-gather/collection-scripts/_metrics_chart_template_part_1.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - - Metrics Chart - - - - - - - - - - - -

Metrics Chart

-
-
-
- -
- - - - diff --git a/must-gather/collection-scripts/debug/tail_failed_pods b/must-gather/collection-scripts/debug/tail_failed_pods deleted file mode 100755 index fe12b26c8e1..00000000000 --- a/must-gather/collection-scripts/debug/tail_failed_pods +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash - -namespace="${1:-openshift-adp}" -skip_tls="${2:-false}" - -for pod in $(oc get pods --insecure-skip-tls-verify=${skip_tls} -n ${namespace} -o jsonpath='{.items[?(.status.containerStatuses[0].lastState.terminated.reason=="Error")].metadata.name}'); do - echo "***" - echo "* Last logs from failed pod ${namespace}/${pod}:" - oc logs -n ${namespace} --insecure-skip-tls-verify=${skip_tls} $pod --tail=10 - echo -e "\n\n\n" -done diff --git a/must-gather/collection-scripts/gather b/must-gather/collection-scripts/gather deleted file mode 100755 index debbc0e55e1..00000000000 --- a/must-gather/collection-scripts/gather +++ /dev/null @@ -1,83 +0,0 @@ -#!/bin/bash - -# Store PIDs of all the subprocesses -pids=() - -# Default to gathering 72h of logs unless specified as var -logs_since="${logs_since:-72h}" -request_timeout="${request_timeout:-0s}" -skip_tls="${skip_tls:-false}" -unset KUBECONFIG - -clusterID=$(oc get clusterversion -o jsonpath='{.items[].spec.clusterID}' | cut -c -8) -namespaces=() -for ns in $(oc get dataprotectionapplications.oadp.openshift.io --all-namespaces --no-headers | awk '{print $1}') - do - echo "[namespace=${ns}] Detected OADP operator installation" - namespaces+=(${ns}) - done -# Collect all resources in OADP operator namespaces with must-gather -for ns in ${namespaces[@]}; do - echo "[namespace=${ns}] Running oc adm inspect" - /usr/bin/oc adm inspect --dest-dir must-gather/clusters/${clusterID} --all-namespaces ns/${ns} & - pids+=($!) - done - -# Collect Velero and OADP CRs -echo "Gathering Velero and OADP CRs" -/usr/bin/gather_crs ${clusterID} & -pids+=($!) - -# Collect Velero and OADP CRDs -echo "Gathering Velero and OADP CRDs" -/usr/bin/gather_crds ${clusterID} & -pids+=($!) - -# Collect the logs" -echo "[cluster=${clusterID}] Gathering logs for namespaces [${namespaces[@]}]" -/usr/bin/gather_logs ${clusterID} ${logs_since} ${request_timeout} ${skip_tls} ${namespaces[@]} & -pids+=($!) - - -# Collect metrics from Prometheus -if [ -z "$essential_only" ]; then - echo "[cluster=${clusterID}] Gathering prometheus metrics" - /usr/bin/gather_metrics & - pids+=($!) -else - echo "Essential-only must-gather was requested. Skipping prometheus metrics collection" -fi - -# Gather version information -echo "Gathering version information for top-level debug file" -/usr/bin/gather_versions "/must-gather/clusters/${clusterID}/oadp-debug-info" ${skip_tls} & -pids+=($!) - -# Check if PID array has any values, if so, wait for them to finish -if [ ${#pids[@]} -ne 0 ]; then - echo "Waiting on subprocesses to finish execution." - wait "${pids[@]}" -fi - - -# If running essential-only must-gather, delete duplicated logs collected by oc adm inspect -if [ -z "$essential_only" ]; then - echo "Full must-gather was requested. Keeping full log payload from oc adm inspect" -else - echo "Essential-only must-gather was requested. Removing duplicate pod logs from oc adm inspect to reduce must-gather size" - find /must-gather/clusters/*/namespaces/*/pods/ -name '*.log' -delete -fi - -# Tar all must-gather artifacts for faster transmission -echo "Tarring must-gather artifacts..." -archive_path="/must-gather-archive" -mkdir -p ${archive_path} -tar -zcf ${archive_path}/must-gather.tar.gz /must-gather/ -rm -rf /must-gather/* -mv ${archive_path}/must-gather.tar.gz /must-gather/ -rmdir ${archive_path} -echo "Created /must-gather/must-gather.tar.gz" - - -echo "Waiting for copy phase..." -exit 0 diff --git a/must-gather/collection-scripts/gather_crds b/must-gather/collection-scripts/gather_crds deleted file mode 100755 index ef716eb64c1..00000000000 --- a/must-gather/collection-scripts/gather_crds +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash - -# Cluster passed in from main gather -clusterID=$1 - -# Resource list -resources=() - -# OADP -resources+=($(/usr/bin/oc get crd | awk '/oadp.openshift.io/{print $1}')) - -# Velero -resources+=($(/usr/bin/oc get crd | awk '/velero.io/{print $1}')) - -echo "Starting collection of CRDs:" "${resources[@]}" -object_collection_path=/must-gather/clusters/${clusterID}/cluster-scoped-resources/apiextensions.k8s.io/customresourcedefinitions - -for resource in "${resources[@]}"; do - echo "Collecting ${resource} CRD" - mkdir -p "${object_collection_path}" - /usr/bin/oc get crd "${resource}" -o yaml &> "${object_collection_path}/${resource}.yaml" & -done -wait diff --git a/must-gather/collection-scripts/gather_crs b/must-gather/collection-scripts/gather_crs deleted file mode 100755 index ea36f0129fa..00000000000 --- a/must-gather/collection-scripts/gather_crs +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/bash -source pwait -max_parallelism=10 - -# Cluster passed in from main gather -clusterID=$1 - -# Resource list -resources=() - -# OADP -resources+=($(/usr/bin/oc get crd | awk '/oadp.openshift.io/{print $1}')) - -# Velero -resources+=($(/usr/bin/oc get crd | awk '/velero.io/{print $1}')) - -echo "Starting collection of:" "${resources[@]}" - -# we use nested loops to nicely output objects partitioned per namespace, kind -for resource in "${resources[@]}"; do - /usr/bin/oc get "${resource}" --all-namespaces -o custom-columns=NAMESPACE:.metadata.namespace --no-headers 2> /dev/null | uniq | \ - while read namespace; do - resource_name=$(echo "$resource" | cut -d "." -f 1) - echo "Collecting ${resource_name} in ${namespace} namespace" - if echo "${resource}" | grep -q velero.io; then - object_collection_path=/must-gather/clusters/${clusterID}/namespaces/${namespace}/velero.io/${resource_name} - else - object_collection_path=/must-gather/clusters/${clusterID}/namespaces/${namespace}/oadp.openshift.io/${resource_name} - fi - mkdir -p "${object_collection_path}" - /usr/bin/oc get "${resource}" -n "${namespace}" -o yaml &> "${object_collection_path}/${resource_name}.yaml" & - pwait $max_parallelism - done -done -wait diff --git a/must-gather/collection-scripts/gather_logs b/must-gather/collection-scripts/gather_logs deleted file mode 100755 index 08912e841d4..00000000000 --- a/must-gather/collection-scripts/gather_logs +++ /dev/null @@ -1,61 +0,0 @@ -#!/bin/bash -source pwait -max_parallelism=10 - -# Cluster passed in from main gather -cluster=$1 -logs_since=$2 -timeout=$3 -skip_tls=$4 -shift -shift -shift -shift -namespaces=("$@") - - -# Collect all Pod logs from namespaces where OADP operator is installed -for ns in ${namespaces[@]}; do - # Gather Pod associated logs - /usr/bin/gather_logs_pods ${cluster} ${ns} ${logs_since} ${max_parallelism} & - - # Gather logs for each oadp operator instance - for dpa in $(oc get dpa --namespace ${ns} --no-headers | awk '{print $1}'); do - plan_path="/must-gather/clusters/${cluster}/namespaces/${ns}/oadp.openshift.io/dpa-${dpa}" - mkdir -p ${plan_path} - - for backup in $(oc get backup --namespace ${ns} --no-headers | awk '{print $1}'); do - # Gather backup - backup_path="${plan_path}/backup-${backup}" - mkdir -p ${backup_path} - /usr/bin/gather_logs_backup ${cluster} ${ns} ${logs_since} ${max_parallelism} ${backup} ${backup_path} ${timeout} ${skip_tls} & - pwait $max_parallelism - for pvb in $(oc get podvolumebackup --namespace ${ns} -l "velero.io/backup-name"="${backup}" --no-headers | awk '{print $1}'); do - # Gather PVB - pvb_path="${backup_path}/podvolumebackup-${pvb}" - mkdir -p ${pvb_path} - /usr/bin/gather_logs_pvb ${cluster} ${ns} ${logs_since} ${max_parallelism} ${pvb} ${pvb_path} & - pwait $max_parallelism - done - done - - for restore in $(oc get restore --namespace ${ns} --no-headers | awk '{print $1}'); do - # Gather restore - restore_path="${plan_path}/restore-${restore}" - mkdir -p ${restore_path} - /usr/bin/gather_logs_restore ${cluster} ${ns} ${logs_since} ${max_parallelism} ${restore} ${restore_path} ${timeout} ${skip_tls} & - pwait $max_parallelism - for pvr in $(oc get podvolumerestore --namespace ${ns} -l "velero.io/restore-name"="${restore}" --no-headers | awk '{print $1}'); do - # Gather PVR - pvr_path="${restore_path}/podvolumerestore-${pvr}" - mkdir -p ${pvr_path} - /usr/bin/gather_logs_pvr ${cluster} ${ns} ${logs_since} ${max_parallelism} ${pvr} ${pvr_path} & - pwait $max_parallelism - done - done - - done -done - -# Wait for all background jobs to complete -wait \ No newline at end of file diff --git a/must-gather/collection-scripts/gather_logs_without_zip b/must-gather/collection-scripts/gather_logs_without_zip deleted file mode 100755 index 8defefe0467..00000000000 --- a/must-gather/collection-scripts/gather_logs_without_zip +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/bash - -# Default to gathering 72h of logs unless specified as var -logs_since="${logs_since:-72h}" -request_timeout="${request_timeout:-0s}" -max_parallelism=10 -unset KUBECONFIG - -clusterID=$(oc get clusterversion -o jsonpath='{.items[].spec.clusterID}' | cut -c -8) -namespaces=() -for ns in $(oc get dataprotectionapplications.oadp.openshift.io --all-namespaces --no-headers | awk '{print $1}') - do - echo "[namespace=${ns}] Detected OADP operator installation" - namespaces+=(${ns}) - done -# Collect all resources in OADP operator namespaces with must-gather -for ns in ${namespaces[@]}; do - echo "[namespace=${ns}] Running oc adm inspect" - /usr/bin/oc adm inspect --dest-dir must-gather/clusters/${clusterID} --all-namespaces ns/${ns} & -done - -# Collect the logs" -for ns in ${namespaces[@]}; do - echo "[cluster=${clusterID}] Gathering logs for namespace ${ns}]" - /usr/bin/gather_logs_pods ${clusterID} ${ns} ${logs_since} ${max_parallelism} & -done - -# Waits for gather_crs, gather_logs, gather_metrics running in background -echo "Waiting for background gather tasks to finish" -wait - -# If running essential-only must-gather, delete duplicated logs collected by oc adm inspect -if [ -z "$essential_only" ]; then - echo "Full must-gather was requested. Keeping full log payload from oc adm inspect" -else - echo "Essential-only must-gather was requested. Removing duplicate pod logs from oc adm inspect to reduce must-gather size" - find /must-gather/clusters/*/namespaces/*/pods/ -name '*.log' -delete -fi - -echo "Waiting for copy phase..." -exit 0 diff --git a/must-gather/collection-scripts/gather_metrics b/must-gather/collection-scripts/gather_metrics deleted file mode 100755 index e3f6bfabde8..00000000000 --- a/must-gather/collection-scripts/gather_metrics +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/bash - -# Prepare gather setup -unset KUBECONFIG -object_collection_path="/must-gather/metrics" -mkdir ${object_collection_path} -mkdir "${object_collection_path}/prometheus_queries" - -# Setup vars -time_now=$(date +%s) -time_ago=$(($time_now - 6*60*60)) - -# OpenShift monitoring namespace status -oc get all -n openshift-monitoring > "${object_collection_path}/openshift_monitoring_status" - -# Prometheus - metadata json dump -echo "[cluster=host] Dumping Prometheus metadata ..." -oc exec -n openshift-monitoring prometheus-k8s-0 -- \ - curl -G http://localhost:9090/api/v1/targets/metadata -s --data match_target%3D%7Binstance!%3D%22%22%7D \ - > "${object_collection_path}/prometheus_target_metadata.json" - -# Prometheus - filtered metrics json using query_range and HTML files with charts -for metric_name in velero_backup_total velero_restore_total -do - echo "[cluster=host] Capturing prometheus metric [${metric_name}]" - oc exec -n openshift-monitoring prometheus-k8s-0 -- curl -s "http://localhost:9090/api/v1/query_range?query=${metric_name}&start=${time_ago}&end=${time_now}&step=14" \ - > dump.json - - # JSON data - echo "[cluster=host] Building chart for prometheus metric [${metric_name}]" - cat dump.json > "${object_collection_path}/prometheus_queries/${metric_name}.json" - - # HTML file with the chart (using concatenated write to file, an elegant string replacement/variable evaluation didn't work with 100s kBs data) - cat /usr/bin/_metrics_chart_template_part_1.html > "${object_collection_path}/prometheus_queries/${metric_name}.html" - cat dump.json >> "${object_collection_path}/prometheus_queries/${metric_name}.html" - cat /usr/bin/_metrics_chart_template_part_2.html >> "${object_collection_path}/prometheus_queries/${metric_name}.html" - - # Cleanup the temp file - rm -f dump.json -done diff --git a/must-gather/collection-scripts/gather_metrics_dump b/must-gather/collection-scripts/gather_metrics_dump deleted file mode 100755 index 9081728650e..00000000000 --- a/must-gather/collection-scripts/gather_metrics_dump +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash -# -# NOTICE: THIS FILE IS NOT INCLUDED IN THE DEFAULT GATHER SCRIPT -# -# Can be executed by: oc adm must-gather --image quay.io/oadp/must-gather:latest -- /usr/bin/gather_metrics_dump -# - -# Prepare gather setup -unset KUBECONFIG -object_collection_path="/must-gather/metrics" -mkdir ${object_collection_path} - -# Setup vars -time_now=$(date +%s) -time_day_ago=$(($time_now - 24*60*60)) - -# Prometheus - last day data files dump -echo "Running Prometheus data files last day dump ... (might take a while)" -oc exec -n openshift-monitoring prometheus-k8s-0 -- \ - bash -c "find /prometheus -newermt \"$(date '+%Y-%m-%d %H:%M' -d @${time_day_ago})\" | tar cvzf - --no-recursion --exclude \"queries.active\" --files-from -" \ - > "${object_collection_path}/prom_data.tar.gz" - -# oc exec and tar could be unhappy with file changes during its compression, however if the dump archive was created, it is success -if [ -f "${object_collection_path}/prom_data.tar.gz" ]; then - exit 0 -else - exit $? -fi diff --git a/must-gather/collection-scripts/gather_versions b/must-gather/collection-scripts/gather_versions deleted file mode 100755 index 10fc2c46c24..00000000000 --- a/must-gather/collection-scripts/gather_versions +++ /dev/null @@ -1,101 +0,0 @@ -#!/bin/bash - -debug_info="${1:-oadp-debug-info}" -skip_tls="${2:-false}" - -mkdir -p $(dirname ${debug_info}) - -# Write information section to debug file, and fill with output of given command -function log_command() { - heading=$1 - command=$2 - echo "***" >> ${debug_info} - echo "* $heading" >> ${debug_info} - $command 2>&1 >> ${debug_info} - echo -e "\n\n" >> ${debug_info} -} - -# Search for given operator in all available namespaces, and save information -function log_operator() { - display_name=$1 - operator_name=$2 - - # Find all operators with matching name in all namespaces - namespaces=$(oc get subscriptions.operators.coreos.com --all-namespaces --insecure-skip-tls-verify=${skip_tls} \ - -o jsonpath='{.items[?(.metadata.name=="'"${operator_name}"'")].metadata.namespace}') - if [ -z "${namespaces}" ]; then # No matches, mark as not found - log_command "${display_name} information" "echo ${operator_name} operator not found" - else # Loop through matching operators and save information to debug file - for namespace in ${namespaces}; do - log_command "${display_name} version information in namespace ${namespace}" \ - "oc get subscriptions.operators.coreos.com ${operator_name} -n ${namespace} --insecure-skip-tls-verify=${skip_tls} -o yaml" - done - fi -} - -# Search for named deployments in all namespaces -function log_deployment() { - display_name=$1 - deployment_name=$2 - - namespaces=$(oc get deployment --all-namespaces --insecure-skip-tls-verify=${skip_tls} \ - -o jsonpath='{.items[?(.metadata.name=="'"${deployment_name}"'")].metadata.namespace}') - if [ -z "${namespaces}" ]; then - log_command "${display_name} information" "echo ${deployment_name} deployment not found" - else - for namespace in ${namespaces}; do - log_command "${display_name} deployment information in namespace ${namespace}" \ - "oc get deployment ${deployment_name} -n ${namespace} --insecure-skip-tls-verify=${skip_tls} -o yaml" - done - fi -} - -# OpenShift version -log_command "OpenShift version information"\ - "oc version --insecure-skip-tls-verify=${skip_tls} -o yaml" - -# Red Hat OADP operator information -log_operator "OADP" "redhat-oadp-operator" - -# Community OADP operator -log_operator "Community OADP operator" "oadp-operator" - -# Restic version -if [ -z "${skip_tls}" ]; then - log_command "Restic version" "restic version" -else - log_command "Restic version" "restic version --insecure-tls" -fi - -# Velero versions -log_command "Velero client version" "velero version --client-only" -log_deployment "Velero" "velero" - -# All storage classes -storageclasses=$(oc get storageclass --insecure-skip-tls-verify=${skip_tls} -o jsonpath='{range .items[*]}{.metadata.name}{" "}') -if [ -z "${storageclasses}" -o "${storageclasses}" == " " ]; then - log_command "StorageClass" "echo No StorageClasses found in cluster" -else - log_command "StorageClasses" "oc get storageclasses --insecure-skip-tls-verify=${skip_tls} -o yaml" -fi - -# CSI volume snapshot classes -volumesnapshotclasses=$(oc get volumesnapshotclass --insecure-skip-tls-verify=${skip_tls} -o jsonpath='{range .items[?(.metadata.annotations.velero\.io/csi-volumesnapshot-class == "true")]}{.metadata.name}{" "}') -if [ -z "${volumesnapshotclasses}" -o "${volumesnapshotclasses}" == " " ]; then - log_command "CSI VolumeSnapshotClasses" "echo No CSI VolumeSnapshotClasses found in cluster" -else - while read volumesnapshotclass; do - log_command "VolumeSnapshotClass ${volumesnapshotclass}" "oc get volumesnapshotclass --insecure-skip-tls-verify=${skip_tls} ${volumesnapshotclass} -o yaml" - done <<< "${volumesnapshotclasses}" -fi - - -# DataProtectionApplications -dpas=$(oc get dpa --all-namespaces --insecure-skip-tls-verify=${skip_tls} -o custom-columns=NAME:.metadata.name,NAMESPACE:.metadata.namespace --no-headers) -if [ -z "${dpas}" ]; then - log_command "DataProtectionApplication CRs" "echo No DPAs found in cluster" -else - while read dpa namespace; do - log_command "DataProtectionApplication ${namespace}/${dpa}" "oc get dpa --insecure-skip-tls-verify=${skip_tls} -n ${namespace} ${dpa} -o yaml" - done <<< "${dpas}" -fi diff --git a/must-gather/collection-scripts/gather_without_tls b/must-gather/collection-scripts/gather_without_tls deleted file mode 100755 index 13566005d17..00000000000 --- a/must-gather/collection-scripts/gather_without_tls +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -echo "insecure-skip-tls-verify: $1" -skip_tls=$1 /usr/bin/gather diff --git a/must-gather/collection-scripts/logs/gather_logs_backup b/must-gather/collection-scripts/logs/gather_logs_backup deleted file mode 100755 index 4cbd01b59d7..00000000000 --- a/must-gather/collection-scripts/logs/gather_logs_backup +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash -source pwait - -# Cluster passed in from main gather -cluster=$1 -ns=$2 -logs_since=$3 -max_parallelism=$4 -backup=$5 -object_collection_path=$6 -timeout=$7 -skip_tls=$8 - -# Gather backup logs and description -mkdir -p "${object_collection_path}" -echo "[cluster=${cluster}][ns=${ns}] Gathering 'velero backup describe ${backup}'" -if [ "$timeout" = "0s" ]; then - timeout 30s velero describe backup ${backup} --namespace ${ns} --insecure-skip-tls-verify=${skip_tls} --details &> "${object_collection_path}/backup-describe-${backup}.txt" & -else - timeout ${timeout} velero describe backup ${backup} --namespace ${ns} --insecure-skip-tls-verify=${skip_tls} --details &> "${object_collection_path}/backup-describe-${backup}.txt" & -fi -echo "[cluster=${cluster}][ns=${ns}] Gathering 'velero backup logs ${backup}'" -timeout 30s velero backup logs ${backup} --namespace ${ns} --insecure-skip-tls-verify=${skip_tls} --timeout=30s &> "${object_collection_path}/backup-${backup}.log" & - -wait \ No newline at end of file diff --git a/must-gather/collection-scripts/logs/gather_logs_pods b/must-gather/collection-scripts/logs/gather_logs_pods deleted file mode 100755 index 0b7e6b60325..00000000000 --- a/must-gather/collection-scripts/logs/gather_logs_pods +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash -source pwait - -# Cluster passed in from gather_logs -cluster=$1 -ns=$2 -logs_since=$3 -max_parallelism=$4 - -for pod in $(/usr/bin/oc get pods --no-headers --namespace $ns | awk '{print $1}'); do - object_collection_path="/must-gather/clusters/${cluster}/namespaces/${ns}/logs/${pod}" - mkdir -p ${object_collection_path} - - containers="--all-containers" - - echo "[cluster=${cluster}][ns=${ns}][pod=${pod}] Collecting Pod logs..." - /usr/bin/oc logs ${containers} --namespace ${ns} ${pod} --since ${logs_since} &> "${object_collection_path}/current.log" & - echo "[cluster=${cluster}][ns=${ns}][pod=${pod}] Collecting previous Pod logs..." - /usr/bin/oc logs --previous ${containers} --namespace ${ns} ${pod} --since ${logs_since} &> "${object_collection_path}/previous.log" & - pwait $max_parallelism -done - -wait \ No newline at end of file diff --git a/must-gather/collection-scripts/logs/gather_logs_pvb b/must-gather/collection-scripts/logs/gather_logs_pvb deleted file mode 100755 index c805045c14b..00000000000 --- a/must-gather/collection-scripts/logs/gather_logs_pvb +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash -source pwait - -# Cluster passed in from main gather -cluster=$1 -ns=$2 -logs_since=$3 -max_parallelism=$4 -pvb=$5 -object_collection_path=$6 - -# Get logs -node=$(oc get podvolumebackup $pvb --namespace $ns -o jsonpath='{.spec.node}') -mkdir -p ${object_collection_path} -oc describe podvolumebackup ${pvb} --namespace ${ns} &> "${object_collection_path}/pvb-describe-${pvb}.txt" & -# logs covered by restic pod logs in gather_logs_pods -wait \ No newline at end of file diff --git a/must-gather/collection-scripts/logs/gather_logs_pvr b/must-gather/collection-scripts/logs/gather_logs_pvr deleted file mode 100755 index bfdb24b8080..00000000000 --- a/must-gather/collection-scripts/logs/gather_logs_pvr +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash -source pwait - -# Cluster passed in from main gather -cluster=$1 -ns=$2 -logs_since=$3 -max_parallelism=$4 -pvr=$5 -object_collection_path=$6 - -# Gather PVR describe -mkdir -p ${object_collection_path} -oc describe podvolumerestores.velero.io ${pvr} --namespace ${ns} &> "${object_collection_path}/pvr-describe-${pvr}.txt" -# logs covered by restic pod logs in gather_logs_pods -wait \ No newline at end of file diff --git a/must-gather/collection-scripts/logs/gather_logs_restore b/must-gather/collection-scripts/logs/gather_logs_restore deleted file mode 100755 index 68a5a29d2dd..00000000000 --- a/must-gather/collection-scripts/logs/gather_logs_restore +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash -source pwait - -# Cluster passed in from main gather -cluster=$1 -ns=$2 -logs_since=$3 -max_parallelism=$4 -restore=$5 -object_collection_path=$6 -timeout=$7 -skip_tls=$8 - -# Gather restore describe and logs -mkdir -p "${object_collection_path}" -echo "[cluster=${cluster}][ns=${ns}] Gathering 'velero restore describe ${restore}'" -if [ "$timeout" = "0s" ]; then - timeout 30s velero describe restore ${restore} --namespace ${ns} --insecure-skip-tls-verify=${skip_tls} --details &> "${object_collection_path}/restore-describe-${restore}.txt" & -else - timeout ${timeout} velero describe restore ${restore} --namespace ${ns} --insecure-skip-tls-verify=${skip_tls} --details &> "${object_collection_path}/restore-describe-${restore}.txt" & -fi -echo "[cluster=${cluster}][ns=${ns}] Gathering 'velero restore logs ${restore}'" -timeout 30s velero restore logs ${restore} --namespace ${ns} --insecure-skip-tls-verify=${skip_tls} --timeout=30s &> "${object_collection_path}/restore-${restore}.log" & - -wait \ No newline at end of file diff --git a/must-gather/collection-scripts/pwait b/must-gather/collection-scripts/pwait deleted file mode 100644 index 8624ccca74f..00000000000 --- a/must-gather/collection-scripts/pwait +++ /dev/null @@ -1,7 +0,0 @@ -# Limits background job parallelism. -# Usage: `pwait 10` -> wait for background jobs to be < 10 before proceeding. -function pwait() { - while [ $(jobs -p | wc -l) -ge $1 ]; do - sleep 1 - done -} \ No newline at end of file diff --git a/must-gather/collection-scripts/time_window_gather/gather_1h b/must-gather/collection-scripts/time_window_gather/gather_1h deleted file mode 100755 index 746961d1cd1..00000000000 --- a/must-gather/collection-scripts/time_window_gather/gather_1h +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -# Gather 1 hour of logs -logs_since="1h" /usr/bin/gather \ No newline at end of file diff --git a/must-gather/collection-scripts/time_window_gather/gather_1h_essential b/must-gather/collection-scripts/time_window_gather/gather_1h_essential deleted file mode 100755 index 446fdbd43f9..00000000000 --- a/must-gather/collection-scripts/time_window_gather/gather_1h_essential +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -# Gather 1 hour of essential data (skip oc adm inspect, prometheus metrics, memory profile) -logs_since="1h" essential_only="true" /usr/bin/gather \ No newline at end of file diff --git a/must-gather/collection-scripts/time_window_gather/gather_24h b/must-gather/collection-scripts/time_window_gather/gather_24h deleted file mode 100755 index 378ffa3a7ba..00000000000 --- a/must-gather/collection-scripts/time_window_gather/gather_24h +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -# Gather 24 hours of logs -logs_since="24h" /usr/bin/gather \ No newline at end of file diff --git a/must-gather/collection-scripts/time_window_gather/gather_24h_essential b/must-gather/collection-scripts/time_window_gather/gather_24h_essential deleted file mode 100755 index c0566900ff7..00000000000 --- a/must-gather/collection-scripts/time_window_gather/gather_24h_essential +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -# Gather 24 hours of essential data (skip oc adm inspect, prometheus metrics, memory profile) -logs_since="24h" essential_only="true" /usr/bin/gather \ No newline at end of file diff --git a/must-gather/collection-scripts/time_window_gather/gather_6h b/must-gather/collection-scripts/time_window_gather/gather_6h deleted file mode 100755 index ceea9bd55e2..00000000000 --- a/must-gather/collection-scripts/time_window_gather/gather_6h +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -# Gather 6 hours of logs -logs_since="6h" /usr/bin/gather \ No newline at end of file diff --git a/must-gather/collection-scripts/time_window_gather/gather_6h_essential b/must-gather/collection-scripts/time_window_gather/gather_6h_essential deleted file mode 100755 index fe59c5657de..00000000000 --- a/must-gather/collection-scripts/time_window_gather/gather_6h_essential +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -# Gather 6 hours of essential data (skip oc adm inspect, prometheus metrics, memory profile) -logs_since="6h" essential_only="true" /usr/bin/gather \ No newline at end of file diff --git a/must-gather/collection-scripts/time_window_gather/gather_72h b/must-gather/collection-scripts/time_window_gather/gather_72h deleted file mode 100755 index bf99f5e274c..00000000000 --- a/must-gather/collection-scripts/time_window_gather/gather_72h +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -# Gather 72 hours of logs -logs_since="72h" /usr/bin/gather \ No newline at end of file diff --git a/must-gather/collection-scripts/time_window_gather/gather_72h_essential b/must-gather/collection-scripts/time_window_gather/gather_72h_essential deleted file mode 100755 index 97abe5e1a5b..00000000000 --- a/must-gather/collection-scripts/time_window_gather/gather_72h_essential +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -# Gather 72 hours of essential data (skip oc adm inspect, prometheus metrics, memory profile) -logs_since="72h" essential_only="true" /usr/bin/gather \ No newline at end of file diff --git a/must-gather/collection-scripts/time_window_gather/gather_all b/must-gather/collection-scripts/time_window_gather/gather_all deleted file mode 100755 index f3d774781a2..00000000000 --- a/must-gather/collection-scripts/time_window_gather/gather_all +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -# Gather infinity hours of logs -logs_since="0" /usr/bin/gather \ No newline at end of file diff --git a/must-gather/collection-scripts/time_window_gather/gather_all_essential b/must-gather/collection-scripts/time_window_gather/gather_all_essential deleted file mode 100755 index aca9e0713fe..00000000000 --- a/must-gather/collection-scripts/time_window_gather/gather_all_essential +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -# Gather infinity hours of essential data (skip oc adm inspect, prometheus metrics, memory profile) -logs_since="0" essential_only="true" /usr/bin/gather \ No newline at end of file diff --git a/must-gather/collection-scripts/time_window_gather/gather_with_timeout b/must-gather/collection-scripts/time_window_gather/gather_with_timeout deleted file mode 100755 index 660917fce21..00000000000 --- a/must-gather/collection-scripts/time_window_gather/gather_with_timeout +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -# Gather with request timeout set -echo "timeout: $1" -request_timeout=$1 /usr/bin/gather \ No newline at end of file diff --git a/must-gather/go.mod b/must-gather/go.mod new file mode 100644 index 00000000000..64618a8a47f --- /dev/null +++ b/must-gather/go.mod @@ -0,0 +1,131 @@ +module github.com/mateusoliveira43/oadp-must-gather + +go 1.23.1 + +toolchain go1.23.4 + +require ( + github.com/kubernetes-csi/external-snapshotter/client/v8 v8.0.0 + github.com/migtools/oadp-non-admin v0.0.0-20250307142147-a46d4d8ee69f + github.com/openshift/api v0.0.0-20240912201240-0a8800162826 + github.com/openshift/oadp-operator v1.0.2-0.20250227152435-9267da21ab64 + github.com/openshift/oc v0.0.0-alpha.0.0.20250108103617-ae1bd9e4a75b + github.com/operator-framework/api v0.26.0 + github.com/spf13/cobra v1.8.1 + github.com/vmware-tanzu/velero v1.14.0 + k8s.io/api v0.30.5 + k8s.io/apiextensions-apiserver v0.30.5 + k8s.io/apimachinery v0.30.5 + k8s.io/cli-runtime v0.30.5 + k8s.io/client-go v0.30.5 + sigs.k8s.io/controller-runtime v0.18.5 +) + +require ( + github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect + github.com/MakeNowJust/heredoc v1.0.0 // indirect + github.com/aws/aws-sdk-go v1.53.12 // indirect + github.com/aws/aws-sdk-go-v2 v1.30.3 // indirect + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.4 // indirect + github.com/aws/aws-sdk-go-v2/config v1.26.3 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.17.26 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.11 // indirect + github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.15.11 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.15 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.15 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.2.10 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.3 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.2.10 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.17 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.16.10 // indirect + github.com/aws/aws-sdk-go-v2/service/s3 v1.48.0 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.22.3 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.4 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.30.3 // indirect + github.com/aws/smithy-go v1.20.3 // indirect + github.com/beorn7/perks v1.0.1 // indirect + github.com/blang/semver/v4 v4.0.0 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/chai2010/gettext-go v1.0.2 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/emicklei/go-restful/v3 v3.12.1 // indirect + github.com/evanphx/json-patch v5.9.0+incompatible // indirect + github.com/evanphx/json-patch/v5 v5.9.0 // indirect + github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d // indirect + github.com/fatih/color v1.18.0 // indirect + github.com/fsnotify/fsnotify v1.7.0 // indirect + github.com/go-errors/errors v1.4.2 // indirect + github.com/go-logr/logr v1.4.2 // indirect + github.com/go-openapi/jsonpointer v0.21.0 // indirect + github.com/go-openapi/jsonreference v0.21.0 // indirect + github.com/go-openapi/swag v0.23.0 // indirect + github.com/gobwas/glob v0.2.3 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/protobuf v1.5.4 // indirect + github.com/google/btree v1.0.1 // indirect + github.com/google/gnostic-models v0.6.9 // indirect + github.com/google/go-cmp v0.6.0 // indirect + github.com/google/gofuzz v1.2.0 // indirect + github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/gorilla/websocket v1.5.0 // indirect + github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect + github.com/imdario/mergo v0.3.16 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/jmespath/go-jmespath v0.4.0 // indirect + github.com/josharian/intern v1.0.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/klauspost/compress v1.17.11 // indirect + github.com/kubernetes-csi/external-snapshotter/client/v7 v7.0.0 // indirect + github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect + github.com/mailru/easyjson v0.7.7 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect + github.com/mitchellh/go-wordwrap v1.0.1 // indirect + github.com/moby/spdystream v0.4.0 // indirect + github.com/moby/term v0.5.0 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect + github.com/peterbourgon/diskv v2.0.1+incompatible // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/prometheus/client_golang v1.20.5 // indirect + github.com/prometheus/client_model v0.6.1 // indirect + github.com/prometheus/common v0.60.1 // indirect + github.com/prometheus/procfs v0.15.1 // indirect + github.com/russross/blackfriday/v2 v2.1.0 // indirect + github.com/sirupsen/logrus v1.9.3 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/xlab/treeprint v1.2.0 // indirect + go.starlark.net v0.0.0-20230525235612-a134d8f9ddca // indirect + golang.org/x/exp v0.0.0-20240222234643-814bf88cf225 // indirect + golang.org/x/net v0.33.0 // indirect + golang.org/x/oauth2 v0.24.0 // indirect + golang.org/x/sync v0.11.0 // indirect + golang.org/x/sys v0.28.0 // indirect + golang.org/x/term v0.27.0 // indirect + golang.org/x/text v0.21.0 // indirect + golang.org/x/time v0.8.0 // indirect + gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect + google.golang.org/protobuf v1.35.2 // indirect + gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect + gopkg.in/inf.v0 v0.9.1 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + k8s.io/component-base v0.30.5 // indirect + k8s.io/klog/v2 v2.130.1 // indirect + k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 // indirect + k8s.io/kubectl v0.30.5 // indirect + k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 // indirect + sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect + sigs.k8s.io/kustomize/api v0.17.2 // indirect + sigs.k8s.io/kustomize/kyaml v0.17.1 // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.4.3 // indirect + sigs.k8s.io/yaml v1.4.0 // indirect +) + +replace github.com/vmware-tanzu/velero => github.com/openshift/velero v0.10.2-0.20241211163542-fa8f2486175b diff --git a/must-gather/go.sum b/must-gather/go.sum new file mode 100644 index 00000000000..17c946c2763 --- /dev/null +++ b/must-gather/go.sum @@ -0,0 +1,390 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= +github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ= +github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= +github.com/aws/aws-sdk-go v1.53.12 h1:8f8K+YaTy2qwtGwVIo2Ftq22UCH96xQAX7Q0lyZKDiA= +github.com/aws/aws-sdk-go v1.53.12/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= +github.com/aws/aws-sdk-go-v2 v1.30.3 h1:jUeBtG0Ih+ZIFH0F4UkmL9w3cSpaMv9tYYDbzILP8dY= +github.com/aws/aws-sdk-go-v2 v1.30.3/go.mod h1:nIQjQVp5sfpQcTc9mPSr1B0PaWK5ByX9MOoDadSN4lc= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.4 h1:OCs21ST2LrepDfD3lwlQiOqIGp6JiEUqG84GzTDoyJs= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.4/go.mod h1:usURWEKSNNAcAZuzRn/9ZYPT8aZQkR7xcCtunK/LkJo= +github.com/aws/aws-sdk-go-v2/config v1.26.3 h1:dKuc2jdp10y13dEEvPqWxqLoc0vF3Z9FC45MvuQSxOA= +github.com/aws/aws-sdk-go-v2/config v1.26.3/go.mod h1:Bxgi+DeeswYofcYO0XyGClwlrq3DZEXli0kLf4hkGA0= +github.com/aws/aws-sdk-go-v2/credentials v1.17.26 h1:tsm8g/nJxi8+/7XyJJcP2dLrnK/5rkFp6+i2nhmz5fk= +github.com/aws/aws-sdk-go-v2/credentials v1.17.26/go.mod h1:3vAM49zkIa3q8WT6o9Ve5Z0vdByDMwmdScO0zvThTgI= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.11 h1:KreluoV8FZDEtI6Co2xuNk/UqI9iwMrOx/87PBNIKqw= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.11/go.mod h1:SeSUYBLsMYFoRvHE0Tjvn7kbxaUhl75CJi1sbfhMxkU= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.15.11 h1:I6lAa3wBWfCz/cKkOpAcumsETRkFAl70sWi8ItcMEsM= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.15.11/go.mod h1:be1NIO30kJA23ORBLqPo1LttEM6tPNSEcjkd1eKzNW0= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.15 h1:SoNJ4RlFEQEbtDcCEt+QG56MY4fm4W8rYirAmq+/DdU= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.15/go.mod h1:U9ke74k1n2bf+RIgoX1SXFed1HLs51OgUSs+Ph0KJP8= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.15 h1:C6WHdGnTDIYETAm5iErQUiVNsclNx9qbJVPIt03B6bI= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.15/go.mod h1:ZQLZqhcu+JhSrA9/NXRm8SkDvsycE+JkV3WGY41e+IM= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0/go.mod h1:8tu/lYfQfFe6IGnaOdrpVgEL2IrrDOf6/m9RQum4NkY= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.2.10 h1:5oE2WzJE56/mVveuDZPJESKlg/00AaS2pY2QZcnxg4M= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.2.10/go.mod h1:FHbKWQtRBYUz4vO5WBWjzMD2by126ny5y/1EoaWoLfI= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.3 h1:dT3MqvGhSoaIhRseqw2I0yH81l7wiR2vjs57O51EAm8= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.3/go.mod h1:GlAeCkHwugxdHaueRr4nhPuY+WW+gR8UjlcqzPr1SPI= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.2.10 h1:L0ai8WICYHozIKK+OtPzVJBugL7culcuM4E4JOpIEm8= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.2.10/go.mod h1:byqfyxJBshFk0fF9YmK0M0ugIO8OWjzH2T3bPG4eGuA= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.17 h1:HGErhhrxZlQ044RiM+WdoZxp0p+EGM62y3L6pwA4olE= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.17/go.mod h1:RkZEx4l0EHYDJpWppMJ3nD9wZJAa8/0lq9aVC+r2UII= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.16.10 h1:KOxnQeWy5sXyS37fdKEvAsGHOr9fa/qvwxfJurR/BzE= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.16.10/go.mod h1:jMx5INQFYFYB3lQD9W0D8Ohgq6Wnl7NYOJ2TQndbulI= +github.com/aws/aws-sdk-go-v2/service/s3 v1.48.0 h1:PJTdBMsyvra6FtED7JZtDpQrIAflYDHFoZAu/sKYkwU= +github.com/aws/aws-sdk-go-v2/service/s3 v1.48.0/go.mod h1:4qXHrG1Ne3VGIMZPCB8OjH/pLFO94sKABIusjh0KWPU= +github.com/aws/aws-sdk-go-v2/service/sso v1.22.3 h1:Fv1vD2L65Jnp5QRsdiM64JvUM4Xe+E0JyVsRQKv6IeA= +github.com/aws/aws-sdk-go-v2/service/sso v1.22.3/go.mod h1:ooyCOXjvJEsUw7x+ZDHeISPMhtwI3ZCB7ggFMcFfWLU= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.4 h1:yiwVzJW2ZxZTurVbYWA7QOrAaCYQR72t0wrSBfoesUE= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.4/go.mod h1:0oxfLkpz3rQ/CHlx5hB7H69YUpFiI1tql6Q6Ne+1bCw= +github.com/aws/aws-sdk-go-v2/service/sts v1.30.3 h1:ZsDKRLXGWHk8WdtyYMoGNO7bTudrvuKpDKgMVRlepGE= +github.com/aws/aws-sdk-go-v2/service/sts v1.30.3/go.mod h1:zwySh8fpFyXp9yOr/KVzxOl8SRqgf/IDw5aUt9UKFcQ= +github.com/aws/smithy-go v1.20.3 h1:ryHwveWzPV5BIof6fyDvor6V3iUL7nTfiTKXHiW05nE= +github.com/aws/smithy-go v1.20.3/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= +github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chai2010/gettext-go v1.0.2 h1:1Lwwip6Q2QGsAdl/ZKPCwTe9fe0CjlUbqj5bFNSjIRk= +github.com/chai2010/gettext-go v1.0.2/go.mod h1:y+wnP2cHYaVj19NZhYKAwEMH2CI1gNHeQQ+5AjwawxA= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= +github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/emicklei/go-restful/v3 v3.12.1 h1:PJMDIM/ak7btuL8Ex0iYET9hxM3CI2sjZtzpL63nKAU= +github.com/emicklei/go-restful/v3 v3.12.1/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/evanphx/json-patch v5.9.0+incompatible h1:fBXyNpNMuTTDdquAq/uisOr2lShz4oaXpDTX2bLe7ls= +github.com/evanphx/json-patch v5.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch/v5 v5.9.0 h1:kcBlZQbplgElYIlo/n1hJbls2z/1awpXxpRi0/FOJfg= +github.com/evanphx/json-patch/v5 v5.9.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ= +github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d h1:105gxyaGwCFad8crR9dcMQWvV9Hvulu6hwUh4tWPJnM= +github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4= +github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= +github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU= +github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= +github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= +github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= +github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ= +github.com/go-logr/zapr v1.3.0/go.mod h1:YKepepNBd1u/oyhd/yQmtjVXmm9uML4IXUgMOwR8/Gg= +github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ= +github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY= +github.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ= +github.com/go-openapi/jsonreference v0.21.0/go.mod h1:LmZmgsrTkVg9LG4EaHeY8cBDslNPMo06cago5JNLkm4= +github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE= +github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= +github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= +github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= +github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= +github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= +github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= +github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= +github.com/google/gnostic-models v0.6.9 h1:MU/8wDLif2qCXZmzncUQ/BOfxWfthHi63KqpoNbWqVw= +github.com/google/gnostic-models v0.6.9/go.mod h1:CiWsm0s6BSQd1hRn8/QmxqB6BesYcbSZxsz9b0KuDBw= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= +github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/pprof v0.0.0-20240424215950-a892ee059fd6 h1:k7nVchz72niMH6YLQNvHSdIE7iqsQxK1P41mySCvssg= +github.com/google/pprof v0.0.0-20240424215950-a892ee059fd6/go.mod h1:kf6iHlnVGwgKolg33glAes7Yg/8iWP8ukqeldJSO7jw= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= +github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 h1:+ngKgrYPPJrOjhax5N+uePQ0Fh1Z7PheYoUI/0nzkPA= +github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4= +github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc= +github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kubernetes-csi/external-snapshotter/client/v7 v7.0.0 h1:j3YK74myEQRxR/srciTpOrm221SAvz6J5OVWbyfeXFo= +github.com/kubernetes-csi/external-snapshotter/client/v7 v7.0.0/go.mod h1:FlyYFe32mPxKEPaRXKNxfX576d1AoCzstYDoOOnyMA4= +github.com/kubernetes-csi/external-snapshotter/client/v8 v8.0.0 h1:mjQG0Vakr2h246kEDR85U8y8ZhPgT3bguTCajRa/jaw= +github.com/kubernetes-csi/external-snapshotter/client/v8 v8.0.0/go.mod h1:E3vdYxHj2C2q6qo8/Da4g7P+IcwqRZyy3gJBzYybV9Y= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de h1:9TO3cAIGXtEhnIaL+V+BEER86oLrvS+kWobKpbJuye0= +github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/migtools/oadp-non-admin v0.0.0-20250307142147-a46d4d8ee69f h1:SmF3kfx+fFyMM48iFLZrgU9sMiM26O/wr/d4ugM4qkQ= +github.com/migtools/oadp-non-admin v0.0.0-20250307142147-a46d4d8ee69f/go.mod h1:HkIB9eu21prmr+Mm2TsIUZGOh8OEH07fPDk90WkaU9Y= +github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= +github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= +github.com/moby/spdystream v0.4.0 h1:Vy79D6mHeJJjiPdFEL2yku1kl0chZpJfZcPpb16BRl8= +github.com/moby/spdystream v0.4.0/go.mod h1:xBAYlnt/ay+11ShkdFKNAG7LsyK/tmNBVvVOwrfMgdI= +github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= +github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 h1:n6/2gBQ3RWajuToeY6ZtZTIKv2v7ThUy5KKusIT0yc0= +github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus= +github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= +github.com/onsi/ginkgo/v2 v2.19.0 h1:9Cnnf7UHo57Hy3k6/m5k3dRfGTMXGvxhHFvkDTCTpvA= +github.com/onsi/ginkgo/v2 v2.19.0/go.mod h1:rlwLi9PilAFJ8jCg9UE1QP6VBpd6/xj3SRC0d6TU0To= +github.com/onsi/gomega v1.33.1 h1:dsYjIxxSR755MDmKVsaFQTE22ChNBcuuTWgkUDSubOk= +github.com/onsi/gomega v1.33.1/go.mod h1:U4R44UsT+9eLIaYRB2a5qajjtQYn0hauxvRm16AVYg0= +github.com/openshift/api v0.0.0-20240912201240-0a8800162826 h1:A8D9SN/hJUwAbdO0rPCVTqmuBOctdgurr53gK701SYo= +github.com/openshift/api v0.0.0-20240912201240-0a8800162826/go.mod h1:OOh6Qopf21pSzqNVCB5gomomBXb8o5sGKZxG2KNpaXM= +github.com/openshift/oadp-operator v1.0.2-0.20250227152435-9267da21ab64 h1:IGInwinu/HJpaRs/eMLM8NAkw6uzIxEv/5Lx1uCV3r8= +github.com/openshift/oadp-operator v1.0.2-0.20250227152435-9267da21ab64/go.mod h1:gNUsBZgNcoS90Z68mNSUgx7pwtOc3THddWJx6uGV14A= +github.com/openshift/oc v0.0.0-alpha.0.0.20250108103617-ae1bd9e4a75b h1:dBEu456jnnhr7KH1T+Mrna1DvFadk1qN+NEtLb8Nn8U= +github.com/openshift/oc v0.0.0-alpha.0.0.20250108103617-ae1bd9e4a75b/go.mod h1:22L7FMouzG54z19RZ/o+RcMCLa8vCdvZ4jQ+u3iHWHw= +github.com/openshift/velero v0.10.2-0.20241211163542-fa8f2486175b h1:ykGzFFul6lhtphKH4V6lWzdIW1oGEtiFfOdS1WyOuNw= +github.com/openshift/velero v0.10.2-0.20241211163542-fa8f2486175b/go.mod h1:bbcPBz7mGYVY7ORWbQhD2Yx09e2ZKH2gqS+MQj+zJCU= +github.com/operator-framework/api v0.26.0 h1:YVntU2NkVl5zSLLwK5kFcH6P3oSvN9QDgTsY9mb4yUM= +github.com/operator-framework/api v0.26.0/go.mod h1:3IxOwzVUeGxYlzfwKCcfCyS+q3EEhWA/4kv7UehbeyM= +github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= +github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y= +github.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= +github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= +github.com/prometheus/common v0.60.1 h1:FUas6GcOw66yB/73KC+BOZoFJmbo/1pojoILArPAaSc= +github.com/prometheus/common v0.60.1/go.mod h1:h0LYf1R1deLSKtD4Vdg8gy4RuOvENW2J/h19V5NADQw= +github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= +github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= +github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= +github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= +github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= +github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/spf13/afero v1.10.0 h1:EaGW2JJh15aKOejeuJ+wpFSHnbd7GE6Wvp3TsNhb6LY= +github.com/spf13/afero v1.10.0/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= +github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= +github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/xlab/treeprint v1.2.0 h1:HzHnuAF1plUN2zGlAFHbSQP2qJ0ZAD3XF5XD7OesXRQ= +github.com/xlab/treeprint v1.2.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +go.starlark.net v0.0.0-20230525235612-a134d8f9ddca h1:VdD38733bfYv5tUZwEIskMM93VanwNIi5bIKnDrJdEY= +go.starlark.net v0.0.0-20230525235612-a134d8f9ddca/go.mod h1:jxU+3+j+71eXOW14274+SmmuW82qJzl6iZSeqEtTGds= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= +go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20240222234643-814bf88cf225 h1:LfspQV/FYTatPTr/3HzIcmiUFH7PGP+OQ6mgDYo3yuQ= +golang.org/x/exp v0.0.0-20240222234643-814bf88cf225/go.mod h1:CxmFvTBINI24O/j8iY7H1xHzx2i4OsyguNBmN/uPtqc= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I= +golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.24.0 h1:KTBBxWqUa0ykRPLtV69rRto9TLXcqYkeswu48x/gvNE= +golang.org/x/oauth2 v0.24.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w= +golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q= +golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= +golang.org/x/time v0.8.0 h1:9i3RxcPv3PZnitoVGMPDKZSq1xW1gK1Xy3ArNOGZfEg= +golang.org/x/time v0.8.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= +gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.35.2 h1:8Ar7bF+apOIoThw1EdZl0p1oWvMqTHmpA2fRTyZO8io= +google.golang.org/protobuf v1.35.2/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSPG+6V4= +gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M= +gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +k8s.io/api v0.30.5 h1:Coz05sfEVywzGcA96AJPUfs2B8LBMnh+IIsM+HCfaz8= +k8s.io/api v0.30.5/go.mod h1:HfNBGFvq9iNK8dmTKjYIdAtMxu8BXTb9c1SJyO6QjKs= +k8s.io/apiextensions-apiserver v0.30.5 h1:JfXTIyzXf5+ryncbp7T/uaVjLdvkwtqoNG2vo7S2a6M= +k8s.io/apiextensions-apiserver v0.30.5/go.mod h1:uVLEME2UPA6UN22i+jTu66B9/0CnsjlHkId+Awo0lvs= +k8s.io/apimachinery v0.30.5 h1:CQZO19GFgw4zcOjY2H+mJ3k1u1o7zFACTNCB7nu4O18= +k8s.io/apimachinery v0.30.5/go.mod h1:iexa2somDaxdnj7bha06bhb43Zpa6eWH8N8dbqVjTUc= +k8s.io/cli-runtime v0.30.5 h1:MWY6efoBVH3h0O6p2DgaQszabV5ZntHZwTHBkiz+PSI= +k8s.io/cli-runtime v0.30.5/go.mod h1:AKMWLDIJQUA5a7yEh5gmzkhpZqYpuDEVovanugfSnQk= +k8s.io/client-go v0.30.5 h1:vEDSzfTz0F8TXcWVdXl+aqV7NAV8M3UvC2qnGTTCoKw= +k8s.io/client-go v0.30.5/go.mod h1:/q5fHHBmhAUesOOFJACpD7VJ4e57rVtTPDOsvXrPpMk= +k8s.io/component-base v0.30.5 h1:O6W8GfdBuyctVy7lu7I0yo8kB6bYgzGzjCyaagb2BR0= +k8s.io/component-base v0.30.5/go.mod h1:eliJtfE7RG18UHMWrqPQWodf1GnQVFGA6McNOHYi11g= +k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= +k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= +k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 h1:BZqlfIlq5YbRMFko6/PM7FjZpUb45WallggurYhKGag= +k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340/go.mod h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98= +k8s.io/kubectl v0.30.5 h1:UHIdbLWHjL/+CaFc9ZESwpwdvpp9EDPLdgGolhMv8tQ= +k8s.io/kubectl v0.30.5/go.mod h1:Pr+NYcX5Lx8eG04B/0t1rzjWcXsvvbda8swiZV9plQw= +k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 h1:pUdcCO1Lk/tbT5ztQWOBi5HBgbBP1J8+AsQnQCKsi8A= +k8s.io/utils v0.0.0-20240711033017-18e509b52bc8/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +sigs.k8s.io/controller-runtime v0.18.5 h1:nTHio/W+Q4aBlQMgbnC5hZb4IjIidyrizMai9P6n4Rk= +sigs.k8s.io/controller-runtime v0.18.5/go.mod h1:TVoGrfdpbA9VRFaRnKgk9P5/atA0pMwq+f+msb9M8Sg= +sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= +sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= +sigs.k8s.io/kustomize/api v0.17.2 h1:E7/Fjk7V5fboiuijoZHgs4aHuexi5Y2loXlVOAVAG5g= +sigs.k8s.io/kustomize/api v0.17.2/go.mod h1:UWTz9Ct+MvoeQsHcJ5e+vziRRkwimm3HytpZgIYqye0= +sigs.k8s.io/kustomize/kyaml v0.17.1 h1:TnxYQxFXzbmNG6gOINgGWQt09GghzgTP6mIurOgrLCQ= +sigs.k8s.io/kustomize/kyaml v0.17.1/go.mod h1:9V0mCjIEYjlXuCdYsSXvyoy2BTsLESH7TlGV81S282U= +sigs.k8s.io/structured-merge-diff/v4 v4.4.3 h1:sCP7Vv3xx/CWIuTPVN38lUPx0uw0lcLfzaiDa8Ja01A= +sigs.k8s.io/structured-merge-diff/v4 v4.4.3/go.mod h1:N8f93tFZh9U6vpxwRArLiikrE5/2tiu1w1AGfACIGE4= +sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= +sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= diff --git a/must-gather/pkg/cli.go b/must-gather/pkg/cli.go new file mode 100644 index 00000000000..f87c8224456 --- /dev/null +++ b/must-gather/pkg/cli.go @@ -0,0 +1,364 @@ +package pkg + +import ( + "fmt" + "slices" + "time" + + volumesnapshotv1 "github.com/kubernetes-csi/external-snapshotter/client/v8/apis/volumesnapshot/v1" + nac1alpha1 "github.com/migtools/oadp-non-admin/api/v1alpha1" + openshiftconfigv1 "github.com/openshift/api/config/v1" + oadpv1alpha1 "github.com/openshift/oadp-operator/api/v1alpha1" + ocadminspect "github.com/openshift/oc/pkg/cli/admin/inspect" + operatorsv1alpha1 "github.com/operator-framework/api/pkg/operators/v1alpha1" + "github.com/spf13/cobra" + velerov1 "github.com/vmware-tanzu/velero/pkg/apis/velero/v1" + velerov2alpha1 "github.com/vmware-tanzu/velero/pkg/apis/velero/v2alpha1" + corev1 "k8s.io/api/core/v1" + storagev1 "k8s.io/api/storage/v1" + "k8s.io/cli-runtime/pkg/genericiooptions" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/client/config" + + "github.com/mateusoliveira43/oadp-must-gather/pkg/gather" + "github.com/mateusoliveira43/oadp-must-gather/pkg/templates" +) + +const ( + mustGatherVersion = "dev-mar-14-2025" + // TODO remove var, not applicable anymore + oadpOpenShiftVersion = "4.18" + // TODO const +) + +// TODO which errors should make must-gather exit earlier? + +var ( + LogsSince time.Duration + Timeout time.Duration + SkipTLS bool + // essentialOnly bool + + CLI = &cobra.Command{ + Use: "oc adm must-gather --image= -- /usr/bin/gather", + Long: `OADP Must-gather + +TODO`, + Args: cobra.NoArgs, + Example: ` # TODO + oc adm must-gather --image= + + # TODO + oc adm must-gather --image= -- /usr/bin/gather --essential-only --logs-since