From cb53e68069c85d2a47a85adbb437fa13dc39cd8c Mon Sep 17 00:00:00 2001 From: vishwanath Date: Tue, 11 Jul 2023 10:36:56 -0700 Subject: [PATCH 001/242] try-1 ME fixes --- .pipelines/azure-pipeline-build.yml | 1 + otelcollector/scripts/setup.sh | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.pipelines/azure-pipeline-build.yml b/.pipelines/azure-pipeline-build.yml index 13354c152..96e6de481 100644 --- a/.pipelines/azure-pipeline-build.yml +++ b/.pipelines/azure-pipeline-build.yml @@ -2,6 +2,7 @@ trigger: branches: include: - main + - vishwa/e3 pr: autoCancel: true branches: diff --git a/otelcollector/scripts/setup.sh b/otelcollector/scripts/setup.sh index 47ae73444..4594925c6 100644 --- a/otelcollector/scripts/setup.sh +++ b/otelcollector/scripts/setup.sh @@ -64,7 +64,9 @@ cp /etc/cron.daily/logrotate /etc/cron.hourly/ # Install ME echo "Installing Metrics Extension..." -sudo tdnf install -y metricsext2-2.2023.224.2214 +sudo wget https://github.com/Azure/prometheus-collector/releases/download/me-linux-exemplar-trial/metricsext2-2.2023.707.1841-1.cm2.x86_64.rpm +sudo tdnf install -y metricsext2-2.2023.707.1841-1.cm2.x86_64.rpm +#sudo tdnf install -y metricsext2-2.2023.224.2214 sudo tdnf list installed | grep metricsext2 | awk '{print $2}' > metricsextversion.txt # tdnf does not have an autoremove feature. Only necessary packages are copied over to distroless build. Below reduces the image size if using non-distroless From fb4e120c55cf48583600bc044ec876ee0024d80c Mon Sep 17 00:00:00 2001 From: vishwanath Date: Tue, 11 Jul 2023 11:39:25 -0700 Subject: [PATCH 002/242] disable arm64 build --- .pipelines/azure-pipeline-build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pipelines/azure-pipeline-build.yml b/.pipelines/azure-pipeline-build.yml index 96e6de481..3241157ee 100644 --- a/.pipelines/azure-pipeline-build.yml +++ b/.pipelines/azure-pipeline-build.yml @@ -186,12 +186,12 @@ jobs: docker buildx use dockerbuilder docker login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) if [ "$(Build.Reason)" != "PullRequest" ]; then - docker buildx build . --platform=linux/amd64,linux/arm64 --file ./build/linux/Dockerfile -t $(LINUX_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/metadata.json --push + docker buildx build . --platform=linux/amd64 --file ./build/linux/Dockerfile -t $(LINUX_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/metadata.json --push docker pull $(LINUX_FULL_IMAGE_NAME) else # Build multiarch image to make sure there are no issues - docker buildx build . --platform=linux/amd64,linux/arm64 --file ./build/linux/Dockerfile -t $(LINUX_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/metadata.json + docker buildx build . --platform=linux/amd64 --file ./build/linux/Dockerfile -t $(LINUX_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/metadata.json # Load in amd64 image to run vulnerability scan docker buildx build . --file ./build/linux/Dockerfile -t $(LINUX_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/metadata.json From bcbf0f48f2e6595974be5066bc9d0f84fdcc1681 Mon Sep 17 00:00:00 2001 From: vishwanath Date: Tue, 18 Jul 2023 18:30:54 -0700 Subject: [PATCH 003/242] fix me config --- otelcollector/metricextension/me.config | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/otelcollector/metricextension/me.config b/otelcollector/metricextension/me.config index ec8c808c4..58aa65dbf 100644 --- a/otelcollector/metricextension/me.config +++ b/otelcollector/metricextension/me.config @@ -1,7 +1,8 @@ { "otlp":{ "endpoints":[ - "127.0.0.1:55680" + "127.0.0.1:55680", + { "uri": "127.0.0.1:55681", "normalize": true } ], "resourceAttributes":[ "cluster", From a011aaf3c00a70a0de06cb8a954b2d86cfd687a5 Mon Sep 17 00:00:00 2001 From: vishwanath Date: Tue, 18 Jul 2023 21:33:52 -0700 Subject: [PATCH 004/242] update endpoint --- otelcollector/metricextension/me.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/otelcollector/metricextension/me.config b/otelcollector/metricextension/me.config index 58aa65dbf..2c0e3a79e 100644 --- a/otelcollector/metricextension/me.config +++ b/otelcollector/metricextension/me.config @@ -2,7 +2,7 @@ "otlp":{ "endpoints":[ "127.0.0.1:55680", - { "uri": "127.0.0.1:55681", "normalize": true } + { "uri": "0.0.0.0:55681", "normalize": true } ], "resourceAttributes":[ "cluster", From 8b5069f157d0d4e49135baf31fd506815f70c064 Mon Sep 17 00:00:00 2001 From: rashmichandrashekar Date: Mon, 7 Aug 2023 16:01:33 -0700 Subject: [PATCH 005/242] Merge changes from grace/operator and rashmi/operator-config-new to a clean branch (#553) --- .gitmodules | 3 + .pipelines/azure-pipeline-build.yml | 230 ++- ...sCollector.TargetAllocator.Parameters.json | 64 + .../RolloutSpecs/RolloutSpecs.json | 7 + .../ScopeBindings/Public.ScopeBindings.json | 4 + .../ServiceModels/Public.ServiceModel.json | 5 + .trivyignore | 4 + otelcollector/build/linux/Dockerfile | 7 +- .../linux/configuration-reader/Dockerfile | 108 ++ .../prometheus-config-merger.rb | 67 +- .../configmapparser/tomlparser-debug-mode.rb | 26 +- .../configuration-reader-builder/Makefile | 9 + .../configuration-reader-builder/go.mod | 73 + .../configuration-reader-builder/go.sum | 714 ++++++++ .../configuration-reader-builder/main.go | 94 + .../customresources/pod-monitor-template.yaml | 12 + .../service-monitor-template.yaml | 12 + .../templates/ama-metrics-clusterRole.yaml | 15 + .../templates/ama-metrics-daemonset.yaml | 20 +- .../templates/ama-metrics-deployment.yaml | 4 +- .../templates/ama-metrics-podmonitor-crd.yaml | 424 +++++ .../ama-metrics-servicemonitor-crd.yaml | 435 +++++ .../ama-metrics-targetallocator-service.yaml | 24 + .../ama-metrics-targetallocator.yaml | 171 ++ .../values-template.yaml | 6 +- .../fluent-bit/fluent-bit-daemonset.conf | 26 + .../fluent-bit/src/out_appinsights.go | 2 +- otelcollector/fluent-bit/src/telemetry.go | 69 +- .../opentelemetry-collector-builder/Makefile | 10 +- .../collector-config-default.yml | 5 +- .../collector-config-replicaset.yml | 50 + .../collector-config-template.yml | 5 +- .../components.go | 2 + .../opentelemetry-collector-builder/go.mod | 21 +- .../opentelemetry-collector-builder/go.sum | 1595 ++++++++++++++++- otelcollector/opentelemetry-operator | 1 + .../components.go | 2 + .../prom-config-validator-builder/go.mod | 19 +- .../prom-config-validator-builder/go.sum | 83 +- .../prom-config-validator-builder/main.go | 7 +- otelcollector/prometheusreceiver/go.mod | 2 +- otelcollector/prometheusreceiver/go.sum | 4 +- .../prometheusreceiver/metrics_receiver.go | 30 +- otelcollector/scripts/arc-eula.sh | 13 + otelcollector/scripts/configmap-parser.sh | 131 ++ .../scripts/livenessprobe-configreader.sh | 11 + otelcollector/scripts/logger.sh | 23 + otelcollector/scripts/main-configreader.sh | 50 + otelcollector/scripts/main.sh | 190 +- otelcollector/scripts/setup-configreader.sh | 38 + .../telegraf-prometheus-collector.conf | 20 + 51 files changed, 4616 insertions(+), 331 deletions(-) create mode 100644 .gitmodules create mode 100644 .pipelines/deployment/ServiceGroupRoot/Parameters/PrometheusCollector.TargetAllocator.Parameters.json create mode 100644 otelcollector/build/linux/configuration-reader/Dockerfile create mode 100644 otelcollector/configuration-reader-builder/Makefile create mode 100644 otelcollector/configuration-reader-builder/go.mod create mode 100644 otelcollector/configuration-reader-builder/go.sum create mode 100644 otelcollector/configuration-reader-builder/main.go create mode 100644 otelcollector/customresources/pod-monitor-template.yaml create mode 100644 otelcollector/customresources/service-monitor-template.yaml create mode 100644 otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-podmonitor-crd.yaml create mode 100644 otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-servicemonitor-crd.yaml create mode 100644 otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-targetallocator-service.yaml create mode 100644 otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-targetallocator.yaml create mode 100644 otelcollector/opentelemetry-collector-builder/collector-config-replicaset.yml create mode 160000 otelcollector/opentelemetry-operator create mode 100644 otelcollector/scripts/arc-eula.sh create mode 100644 otelcollector/scripts/configmap-parser.sh create mode 100644 otelcollector/scripts/livenessprobe-configreader.sh create mode 100644 otelcollector/scripts/logger.sh create mode 100644 otelcollector/scripts/main-configreader.sh create mode 100644 otelcollector/scripts/setup-configreader.sh diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..9410581a2 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "otelcollector/opentelemetry-operator"] + path = otelcollector/opentelemetry-operator + url = https://github.com/gracewehner/opentelemetry-operator diff --git a/.pipelines/azure-pipeline-build.yml b/.pipelines/azure-pipeline-build.yml index 3a94caecf..6e3cf1d87 100644 --- a/.pipelines/azure-pipeline-build.yml +++ b/.pipelines/azure-pipeline-build.yml @@ -2,6 +2,8 @@ trigger: branches: include: - main + - grace/operator + pr: autoCancel: true branches: @@ -29,6 +31,8 @@ jobs: pool: name: Azure-Pipelines-CI-Test-EO steps: + - checkout: self + submodules: true - bash: | if [ $(IS_PR) == "True" ]; then BRANCH_NAME=$(System.PullRequest.SourceBranch) @@ -45,13 +49,27 @@ jobs: LINUX_IMAGE_TAG=$SEMVER # Truncating to 128 characters as it is required by docker LINUX_IMAGE_TAG=$(echo "${LINUX_IMAGE_TAG}" | cut -c1-128) - WINDOWS_IMAGE_TAG=$SEMVER-win + + #Truncating this to 124 to add the cfg suffix + LINUX_IMAGE_TAG_PREFIX=$(echo "${LINUX_IMAGE_TAG}" | cut -c1-124) + LINUX_CONFIG_READER_IMAGE_TAG=$LINUX_IMAGE_TAG_PREFIX-cfg + + # Truncating to 115 characters as it is required by docker (4 characters used in -win and 9 characters used in -ltsc2019/-ltsc2022) + WINDOWS_IMAGE_TAG_PREFIX=$(echo "${LINUX_IMAGE_TAG}" | cut -c1-115) + WINDOWS_IMAGE_TAG=$WINDOWS_IMAGE_TAG_PREFIX-win + + + #Truncating this to 112 characters to add the targetallocator suffix + TARGET_ALLOCATOR_IMAGE_TAG_PREFIX=$(echo "${LINUX_IMAGE_TAG}" | cut -c1-124) + TARGET_ALLOCATOR_IMAGE_TAG=$TARGET_ALLOCATOR_IMAGE_TAG_PREFIX-targetallocator + # Truncating to 119 characters as it is required by docker (9 characters used in -ltsc2019/-ltsc2022) - WINDOWS_IMAGE_TAG=$(echo "${WINDOWS_IMAGE_TAG}" | cut -c1-119) WINDOWS_2019_BASE_IMAGE_VERSION=ltsc2019 WINDOWS_2022_BASE_IMAGE_VERSION=ltsc2022 LINUX_FULL_IMAGE_NAME=$ACR_REGISTRY$ACR_REPOSITORY:$LINUX_IMAGE_TAG + TARGET_ALLOCATOR_FULL_IMAGE_NAME=$ACR_REGISTRY$ACR_REPOSITORY:$TARGET_ALLOCATOR_IMAGE_TAG + LINUX_CONFIG_READER_FULL_IMAGE_NAME=$ACR_REGISTRY$ACR_REPOSITORY:$LINUX_CONFIG_READER_IMAGE_TAG WINDOWS_FULL_IMAGE_NAME=$ACR_REGISTRY$ACR_REPOSITORY:$WINDOWS_IMAGE_TAG HELM_FULL_IMAGE_NAME=$ACR_REGISTRY$ACR_REPOSITORY_HELM/$HELM_CHART_NAME:$SEMVER ARC_HELM_FULL_IMAGE_NAME=$ACR_REGISTRY$ACR_REPOSITORY_HELM/$ARC_HELM_CHART_NAME:$SEMVER @@ -59,6 +77,9 @@ jobs: echo "##vso[build.updatebuildnumber]$SEMVER" echo "##vso[task.setvariable variable=SEMVER;isOutput=true]$SEMVER" echo "##vso[task.setvariable variable=LINUX_FULL_IMAGE_NAME;isOutput=true]$LINUX_FULL_IMAGE_NAME" + echo "##vso[task.setvariable variable=TARGET_ALLOCATOR_IMAGE_TAG;isOutput=true]$TARGET_ALLOCATOR_IMAGE_TAG" + echo "##vso[task.setvariable variable=TARGET_ALLOCATOR_FULL_IMAGE_NAME;isOutput=true]$TARGET_ALLOCATOR_FULL_IMAGE_NAME" + echo "##vso[task.setvariable variable=LINUX_CONFIG_READER_FULL_IMAGE_NAME;isOutput=true]$LINUX_CONFIG_READER_FULL_IMAGE_NAME" echo "##vso[task.setvariable variable=WINDOWS_FULL_IMAGE_NAME;isOutput=true]$WINDOWS_FULL_IMAGE_NAME" echo "##vso[task.setvariable variable=WINDOWS_IMAGE_TAG;isOutput=true]$WINDOWS_IMAGE_TAG" echo "##vso[task.setvariable variable=WINDOWS_2019_BASE_IMAGE_VERSION;isOutput=true]$WINDOWS_2019_BASE_IMAGE_VERSION" @@ -128,6 +149,8 @@ jobs: # This is necessary because of: https://github.com/moby/moby/issues/37965 DOCKER_BUILDKIT: 1 steps: + - checkout: self + submodules: true - task: CodeQL3000Init@0 displayName: 'SDL: init codeql' @@ -143,14 +166,14 @@ jobs: make condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) workingDirectory: $(Build.SourcesDirectory)/otelcollector/opentelemetry-collector-builder/ - displayName: "SDL: build otelcollector, promconfigvalidator, and fluent-bit plugin for scanning" + displayName: "SDL: build otelcollector, promconfigvalidator, targetallocator, and fluent-bit plugin for scanning" - task: BinSkim@4 displayName: 'SDL: run binskim' condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) inputs: InputType: 'CommandLine' - arguments: 'analyze --rich-return-code $(Build.SourcesDirectory)/otelcollector/opentelemetry-collector-builder/otelcollector $(Build.SourcesDirectory)/otelcollector/prom-config-validator-builder/promconfigvalidator $(Build.SourcesDirectory)/otelcollector/fluent-bit/src/out_appinsights.so' + arguments: 'analyze --rich-return-code $(Build.SourcesDirectory)/otelcollector/opentelemetry-collector-builder/otelcollector $(Build.SourcesDirectory)/otelcollector/prom-config-validator-builder/promconfigvalidator $(Build.SourcesDirectory)/otelcollector/opentelemetry-operator/cmd/otel-allocator/targetallocator $(Build.SourcesDirectory)/otelcollector/fluent-bit/src/out_appinsights.so' - task: Gosec@1 displayName: 'SDL: run gosec' @@ -267,6 +290,198 @@ jobs: GdnBreakGdnToolSemmle: true GdnBreakGdnToolSemmleSeverity: 'Warning' +- job: TargetAllocator + displayName: Build target allocator image + pool: + name: Azure-Pipelines-CI-Test-EO + dependsOn: common + variables: + TARGET_ALLOCATOR_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.TARGET_ALLOCATOR_FULL_IMAGE_NAME'] ] + # This is necessary because of: https://github.com/moby/moby/issues/37965 + DOCKER_BUILDKIT: 1 + steps: + - checkout: self + submodules: true + persistCredentials: true + - bash: | + mkdir -p $(Build.ArtifactStagingDirectory)/targetallocator + + # Necessary due to necessary due to https://stackoverflow.com/questions/60080264/docker-cannot-build-multi-platform-images-with-docker-buildx + sudo apt-get update && sudo apt-get -y install qemu binfmt-support qemu-user-static + docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + + docker buildx create --name dockerbuilder + docker buildx use dockerbuilder + docker login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) + if [ "$(Build.Reason)" != "PullRequest" ]; then + docker buildx build . --platform=linux/amd64,linux/arm64 --file Dockerfile -t $(TARGET_ALLOCATOR_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/targetallocator/metadata.json --push + docker pull $(TARGET_ALLOCATOR_FULL_IMAGE_NAME) + else + + # Build multiarch image to make sure there are no issues + docker buildx build . --platform=linux/amd64,linux/arm64 --file Dockerfile -t $(TARGET_ALLOCATOR_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/targetallocator/metadata.json + + # Load in amd64 image to run vulnerability scan + docker buildx build . --file Dockerfile -t $(TARGET_ALLOCATOR_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/targetallocator/metadata.json + fi + workingDirectory: $(Build.SourcesDirectory)/otelcollector/opentelemetry-operator/cmd/otel-allocator + displayName: "Build: build and push target allocator image to dev ACR" + - bash: | + curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin + trivy image --ignore-unfixed --no-progress --severity HIGH,CRITICAL,MEDIUM --exit-code 1 $(TARGET_ALLOCATOR_FULL_IMAGE_NAME) + workingDirectory: $(Build.SourcesDirectory) + displayName: "Build: run trivy scan" + +- job: Linux_ConfigReader + displayName: Build linux image for config reader + pool: + name: Azure-Pipelines-CI-Test-EO + dependsOn: common + variables: + LINUX_CONFIG_READER_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.LINUX_CONFIG_READER_FULL_IMAGE_NAME'] ] + # This is necessary because of: https://github.com/moby/moby/issues/37965 + DOCKER_BUILDKIT: 1 + steps: + + - task: CodeQL3000Init@0 + displayName: 'SDL: init codeql' + condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + + - task: GoTool@0 + displayName: "Build: specify golang version" + inputs: + version: '1.19' + + - bash: | + sudo apt-get install build-essential -y + make + condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + workingDirectory: $(Build.SourcesDirectory)/otelcollector/configuration-reader-builder/ + displayName: "SDL: build configuration reader for scanning" + + - task: BinSkim@4 + displayName: 'SDL: run binskim' + condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + inputs: + InputType: 'CommandLine' + arguments: 'analyze --rich-return-code $(Build.SourcesDirectory)/otelcollector/configuration-reader-builder/configurationreader' + + - task: Gosec@1 + displayName: 'SDL: run gosec' + condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + inputs: + targetPattern: 'gosecPattern' + targetGosecPattern: '$(Build.SourcesDirectory)/otelcollector' + + - bash: | + wget https://github.com/microsoft/DevSkim/releases/download/v0.6.9/DevSkim_linux_0.6.9.zip + unzip DevSkim_linux_0.6.9.zip + chmod 775 DevSkim_linux_0.6.9/devskim + ./DevSkim_linux_0.6.9/devskim analyze $(Build.SourcesDirectory)/otelcollector --ignore-globs **/deploy/dashboard/**,**/react/static/** --severity critical,important + displayName: 'SDL: run devskim' + condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + workingDirectory: $(Build.SourcesDirectory) + + - bash: | + ruby --version + sudo apt-get install ruby-full + ruby --version + sudo gem install brakeman + brakeman $(Build.SourcesDirectory)/otelcollector/configmapparser --force + displayName: 'SDL: run brakeman' + condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + + - bash: | + mkdir -p $(Build.ArtifactStagingDirectory)/linux + + # Necessary due to necessary due to https://stackoverflow.com/questions/60080264/docker-cannot-build-multi-platform-images-with-docker-buildx + sudo apt-get update && sudo apt-get -y install qemu binfmt-support qemu-user-static + docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + + docker buildx create --name dockerbuilder + docker buildx use dockerbuilder + docker login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) + if [ "$(Build.Reason)" != "PullRequest" ]; then + docker buildx build . --platform=linux/amd64,linux/arm64 --file ./build/linux/configuration-reader/Dockerfile -t $(LINUX_CONFIG_READER_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/configuration-reader/metadata.json --push + docker pull $(LINUX_CONFIG_READER_FULL_IMAGE_NAME) + else + + # Build multiarch image to make sure there are no issues + docker buildx build . --platform=linux/amd64,linux/arm64 --file ./build/linux/configuration-reader/Dockerfile -t $(LINUX_CONFIG_READER_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/configuration-reader/metadata.json + + # Load in amd64 image to run vulnerability scan + docker buildx build . --file ./build/linux/configuration-reader/Dockerfile -t $(LINUX_CONFIG_READER_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/configuration-reader/metadata.json + fi + workingDirectory: $(Build.SourcesDirectory)/otelcollector/ + displayName: "Build: build and push configuration reader image to dev ACR" + + # - bash: | + # curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin + # trivy image --ignore-unfixed --no-progress --severity HIGH,CRITICAL,MEDIUM --exit-code 1 $(LINUX_CONFIG_READER_FULL_IMAGE_NAME) + # workingDirectory: $(Build.SourcesDirectory) + # displayName: "Build: run trivy scan" + + - task: CodeQL3000Finalize@0 + displayName: 'SDL: run codeql' + condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + + - task: ComponentGovernanceComponentDetection@0 + displayName: "SDL: run component governance" + condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) + inputs: + scanType: 'Register' + verbosity: 'Verbose' + dockerImagesToScan: '$(LINUX_CONFIG_READER_FULL_IMAGE_NAME)' + alertWarningLevel: 'High' + + - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 + displayName: "Ev2: Generate image artifacts" + condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) + inputs: + BuildDropPath: '$(Build.ArtifactStagingDirectory)/linux' + DockerImagesToScan: '$(LINUX_CONFIG_READER_FULL_IMAGE_NAME)' + + - task: SdtReport@2 + displayName: 'SDL: generate report' + condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + inputs: + GdnExportAllTools: false + GdnExportGdnToolBinSkim: true + GdnExportGdnToolBinSkimSeverity: 'Note' + GdnExportGdnToolGosec: true + GdnExportGdnToolGosecSeverity: 'Note' + GdnExportGdnToolSemmle: true + GdnExportGdnToolSemmleSeverity: 'Note' + + - task: PublishSecurityAnalysisLogs@3 + displayName: 'SDL: publish report' + condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + inputs: + ArtifactName: 'CodeAnalysisLogs' + ArtifactType: 'Container' + PublishProcessedResults: true + AllTools: true + ToolLogsNotFoundAction: 'Standard' + + - task: PublishBuildArtifacts@1 + displayName: "Ev2: Publish image artifacts" + condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) + inputs: + pathToPublish: '$(Build.ArtifactStagingDirectory)' + artifactName: drop + + - task: PostAnalysis@2 + displayName: 'SDL: Post-Build Analysis' + condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + inputs: + GdnBreakAllTools: false + GdnBreakGdnToolBinSkim: true + GdnBreakGdnToolBinSkimSeverity: 'Warning' + GdnBreakGdnToolGosec: true + GdnBreakGdnToolGosecSeverity: 'Warning' + GdnBreakGdnToolSemmle: true + GdnBreakGdnToolSemmleSeverity: 'Warning' + - job: Windows2019 displayName: "Build windows 2019 image" pool: @@ -548,7 +763,7 @@ jobs: else echo "-e error failed to login to az with managed identity credentials" exit 1 - fi + fi ACCESS_TOKEN=$(az account get-access-token --resource $RESOURCE_AUDIENCE --query accessToken -o json) if [ $? -eq 0 ]; then @@ -556,7 +771,7 @@ jobs: else echo "-e error get access token from resource:$RESOURCE_AUDIENCE failed." exit 1 - fi + fi ACCESS_TOKEN=$(echo $ACCESS_TOKEN | tr -d '"' | tr -d '"\r\n') ARC_API_URL="https://eastus2euap.dp.kubernetesconfiguration.azure.com" @@ -577,7 +792,7 @@ jobs: inputs: azureSubscription: 'ContainerInsights_Build_Subscription(9b96ebbd-c57a-42d1-bbe9-b69296e4c7fb)' scriptType: 'bash' - scriptLocation: 'inlineScript' + scriptLocation: 'inlineScript' inlineScript: | az config set extension.use_dynamic_install=yes_without_prompt az k8s-extension update --name azuremonitor-metrics --resource-group ci-dev-arc-wcus --cluster-name ci-dev-arc-wcus --cluster-type connectedClusters --version $HELM_SEMVER --release-train pipeline @@ -598,6 +813,7 @@ jobs: HELM_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.HELM_FULL_IMAGE_NAME'] ] steps: - checkout: self + submodules: true persistCredentials: true - bash: | diff --git a/.pipelines/deployment/ServiceGroupRoot/Parameters/PrometheusCollector.TargetAllocator.Parameters.json b/.pipelines/deployment/ServiceGroupRoot/Parameters/PrometheusCollector.TargetAllocator.Parameters.json new file mode 100644 index 000000000..9e6f6efca --- /dev/null +++ b/.pipelines/deployment/ServiceGroupRoot/Parameters/PrometheusCollector.TargetAllocator.Parameters.json @@ -0,0 +1,64 @@ +{ + "$schema": "http://schema.express.azure.com/schemas/2015-01-01-alpha/RolloutParameters.json", + "contentVersion": "1.0.0.0", + "wait": [ + { + "name": "waitSdpBakeTime", + "properties": { + "duration": "PT24H" + } + } + ], + "shellExtensions": [ + { + "name": "PushAgentToACR", + "type": "ShellExtensionType", + "properties": { + "maxexecutiontime": "PT1H" + }, + "package": { + "reference": { + "path": "artifacts.tar.gz" + } + }, + "launch": { + "command": [ + "/bin/bash", + "pushAgentToAcr.sh" + ], + "environmentVariables": [ + { + "name": "ACR_REGISTRY", + "value": "__ACR_REGISTRY__" + }, + { + "name": "PROD_ACR_REPOSITORY", + "value": "__PROD_ACR_AGENT_REPOSITORY__" + }, + { + "name": "MCR_REGISTRY", + "value": "__MCR_REGISTRY__" + }, + { + "name": "PROD_MCR_REPOSITORY", + "value": "__PROD_MCR_AGENT_REPOSITORY__" + }, + { + "name": "DEV_MCR_REPOSITORY", + "value": "__DEV_MCR_AGENT_REPOSITORY__" + }, + { + "name": "IMAGE_TAG", + "value": "__TARGETALLOCATOR_TAG__" + } + ], + "identity": { + "type": "userAssigned", + "userAssignedIdentities": [ + "__MANAGED_IDENTITY__" + ] + } + } + } + ] +} \ No newline at end of file diff --git a/.pipelines/deployment/ServiceGroupRoot/RolloutSpecs/RolloutSpecs.json b/.pipelines/deployment/ServiceGroupRoot/RolloutSpecs/RolloutSpecs.json index bb67a5f50..747620277 100644 --- a/.pipelines/deployment/ServiceGroupRoot/RolloutSpecs/RolloutSpecs.json +++ b/.pipelines/deployment/ServiceGroupRoot/RolloutSpecs/RolloutSpecs.json @@ -32,6 +32,13 @@ "actions": [ "Shell/PushAgentToACR" ], "dependsOn": [ ] }, + { + "name": "PushTargetAllocator", + "targetType": "ServiceResource", + "targetName": "PushTargetAllocator", + "actions": [ "Shell/PushAgentToACR" ], + "dependsOn": [ ] + }, { "name": "PushKSMChart", "targetType": "ServiceResource", diff --git a/.pipelines/deployment/ServiceGroupRoot/ScopeBindings/Public.ScopeBindings.json b/.pipelines/deployment/ServiceGroupRoot/ScopeBindings/Public.ScopeBindings.json index 28778f04a..5eb637174 100644 --- a/.pipelines/deployment/ServiceGroupRoot/ScopeBindings/Public.ScopeBindings.json +++ b/.pipelines/deployment/ServiceGroupRoot/ScopeBindings/Public.ScopeBindings.json @@ -53,6 +53,10 @@ "find": "__WINDOWS_TAG__", "replaceWith": "$(WindowsTag)" }, + { + "find": "__TARGETALLOCATOR_TAG__", + "replaceWith": "$(TargetAllocatorTag)" + }, { "find": "__PROD_MCR_AGENT_REPOSITORY__", "replaceWith": "$(ProdMCRAgentRepository)" diff --git a/.pipelines/deployment/ServiceGroupRoot/ServiceModels/Public.ServiceModel.json b/.pipelines/deployment/ServiceGroupRoot/ServiceModels/Public.ServiceModel.json index e9f9da730..3d529ff96 100644 --- a/.pipelines/deployment/ServiceGroupRoot/ServiceModels/Public.ServiceModel.json +++ b/.pipelines/deployment/ServiceGroupRoot/ServiceModels/Public.ServiceModel.json @@ -50,6 +50,11 @@ "InstanceOf": "ShellExtension", "RolloutParametersPath": "Parameters\\PrometheusCollector.Windows.Parameters.json" }, + { + "Name": "PushTargetAllocator", + "InstanceOf": "ShellExtension", + "RolloutParametersPath": "Parameters\\PrometheusCollector.TargetAllocator.Parameters.json" + }, { "Name": "Push1PHelmChart", "InstanceOf": "ShellExtension", diff --git a/.trivyignore b/.trivyignore index be74d628e..c56d3a54d 100644 --- a/.trivyignore +++ b/.trivyignore @@ -13,6 +13,8 @@ CVE-2022-27191 CVE-2022-23471 CVE-2023-25153 CVE-2023-25173 +# target-allocator +CVE-2023-2253 # MEDIUM # opt/telegraf/telegraf @@ -27,3 +29,5 @@ CVE-2022-41723 CVE-2022-41717 CVE-2022-46146 CVE-2022-41721 +# target-allocator +CVE-2023-29401 diff --git a/otelcollector/build/linux/Dockerfile b/otelcollector/build/linux/Dockerfile index ec8cdb8ed..d0a758194 100644 --- a/otelcollector/build/linux/Dockerfile +++ b/otelcollector/build/linux/Dockerfile @@ -54,12 +54,13 @@ COPY ./logrotate/crontab /etc/crontab COPY ./scripts/livenessprobe.sh $tmpdir/microsoft/liveness/livenessprobe.sh COPY ./configmapparser/*.rb $tmpdir/microsoft/configmapparser/ COPY ./configmapparser/default-prom-configs/*.yml $tmpdir/microsoft/otelcollector/default-prom-configs/ -COPY ./opentelemetry-collector-builder/collector-config-default.yml ./opentelemetry-collector-builder/collector-config-template.yml ./opentelemetry-collector-builder/PROMETHEUS_VERSION $tmpdir/microsoft/otelcollector/ +COPY ./opentelemetry-collector-builder/collector-config-default.yml ./opentelemetry-collector-builder/collector-config-template.yml ./opentelemetry-collector-builder/collector-config-replicaset.yml ./opentelemetry-collector-builder/PROMETHEUS_VERSION $tmpdir/microsoft/otelcollector/ COPY --from=otelcollector-builder /src/opentelemetry-collector-builder/otelcollector $tmpdir/microsoft/otelcollector/ COPY --from=otelcollector-builder /src/opentelemetry-collector-builder/otelcollector $tmpdir/microsoft/otelcollector/ COPY --from=otelcollector-builder /src/goversion.txt $tmpdir/goversion.txt COPY --from=prom-config-validator-builder /src/prom-config-validator-builder/promconfigvalidator $tmpdir/ -COPY ./scripts/setup.sh ./scripts/main.sh $tmpdir/ + +COPY ./scripts/*.sh $tmpdir/ COPY ./metricextension/me.config ./metricextension/me_internal.config ./metricextension/me_ds.config ./metricextension/me_ds_internal.config /usr/sbin/ COPY ./telegraf/telegraf-prometheus-collector.conf $tmpdir/telegraf/ COPY ./fluent-bit/fluent-bit.conf ./fluent-bit/fluent-bit-daemonset.conf ./fluent-bit/fluent-bit-parsers.conf $tmpdir/fluent-bit/ @@ -73,7 +74,7 @@ COPY ./build/linux/rpm-repos/ /etc/yum.repos.d/ ARG TARGETARCH RUN tdnf clean all RUN tdnf repolist --refresh -RUN tdnf update +RUN tdnf update -y RUN tdnf install -y wget sudo net-tools cronie vim ruby-devel logrotate procps-ng busybox diffutils curl RUN mkdir /busybin && busybox --install /busybin RUN chmod 775 /etc/cron.daily/logrotate diff --git a/otelcollector/build/linux/configuration-reader/Dockerfile b/otelcollector/build/linux/configuration-reader/Dockerfile new file mode 100644 index 000000000..a0369fae8 --- /dev/null +++ b/otelcollector/build/linux/configuration-reader/Dockerfile @@ -0,0 +1,108 @@ +FROM --platform=$BUILDPLATFORM mcr.microsoft.com/oss/go/microsoft/golang:1.19 as prom-config-validator-builder +WORKDIR /src +RUN apt-get update && apt-get install gcc-aarch64-linux-gnu -y +COPY ./prom-config-validator-builder/go.mod ./prom-config-validator-builder/go.sum ./prom-config-validator-builder/ +COPY ./prometheusreceiver/go.mod ./prometheusreceiver/go.sum ./prometheusreceiver/ +WORKDIR /src/prometheusreceiver +RUN go version +RUN go mod download +WORKDIR /src/prom-config-validator-builder +RUN go mod download +COPY ./prom-config-validator-builder /src/prom-config-validator-builder +COPY ./prometheusreceiver /src/prometheusreceiver +ARG TARGETOS TARGETARCH +RUN if [ "$TARGETARCH" = "arm64" ] ; then CC=aarch64-linux-gnu-gcc CGO_ENABLED=1 GOOS=$TARGETOS GOARCH=$TARGETARCH go build -buildmode=pie -ldflags '-linkmode external -extldflags=-Wl,-z,now' -o promconfigvalidator . ; else CGO_ENABLED=1 GOOS=$TARGETOS GOARCH=$TARGETARCH go build -buildmode=pie -ldflags '-linkmode external -extldflags=-Wl,-z,now' -o promconfigvalidator . ; fi + +FROM --platform=$BUILDPLATFORM mcr.microsoft.com/oss/go/microsoft/golang:1.19 as configuration-reader-builder +WORKDIR /src +RUN apt-get update && apt-get install gcc-aarch64-linux-gnu -y +COPY ./configuration-reader-builder/go.mod ./configuration-reader-builder/go.sum ./configuration-reader-builder/ +RUN go version > goversion.txt +WORKDIR /src/configuration-reader-builder +RUN go mod download +COPY ./configuration-reader-builder /src/configuration-reader-builder +ARG TARGETOS TARGETARCH +RUN if [ "$TARGETARCH" = "arm64" ] ; then CC=aarch64-linux-gnu-gcc CGO_ENABLED=1 GOOS=$TARGETOS GOARCH=$TARGETARCH go build -buildmode=pie -ldflags '-linkmode external -extldflags=-Wl,-z,now' -o configurationreader . ; else CGO_ENABLED=1 GOOS=$TARGETOS GOARCH=$TARGETARCH go build -buildmode=pie -ldflags '-linkmode external -extldflags=-Wl,-z,now' -o configurationreader . ; fi + +FROM mcr.microsoft.com/cbl-mariner/base/core:2.0 as builder +LABEL description="Azure Monitor Prometheus metrics collector - configuration reader sidecar" +LABEL maintainer="ciprometheus@microsoft.com" +ENV OS_TYPE "linux" +ENV tmpdir /opt +COPY ./logrotate/logrotate /etc/cron.daily/logrotate +COPY ./logrotate/crontab /etc/crontab +COPY ./scripts/livenessprobe-configreader.sh $tmpdir/microsoft/liveness/livenessprobe-configreader.sh +COPY ./configmapparser/*.rb $tmpdir/microsoft/configmapparser/ +COPY ./configmapparser/default-prom-configs/*.yml $tmpdir/microsoft/otelcollector/default-prom-configs/ +COPY ./opentelemetry-collector-builder/collector-config-default.yml ./opentelemetry-collector-builder/collector-config-template.yml ./opentelemetry-collector-builder/PROMETHEUS_VERSION $tmpdir/microsoft/otelcollector/ +COPY --from=configuration-reader-builder /src/goversion.txt $tmpdir/goversion.txt +COPY --from=prom-config-validator-builder /src/prom-config-validator-builder/promconfigvalidator $tmpdir/ +COPY --from=configuration-reader-builder /src/configuration-reader-builder/configurationreader $tmpdir/ + +COPY ./scripts/*.sh $tmpdir/ +COPY ./LICENSE $tmpdir/microsoft +COPY ./NOTICE $tmpdir/microsoft +COPY ./build/linux/rpm-repos/ /etc/yum.repos.d/ + +ARG TARGETARCH +RUN tdnf clean all +RUN tdnf repolist --refresh +RUN tdnf update -y +RUN tdnf install -y wget sudo net-tools cronie vim ruby-devel logrotate procps-ng busybox diffutils curl +RUN mkdir /busybin && busybox --install /busybin +RUN chmod 775 /etc/cron.daily/logrotate +RUN chmod 775 $tmpdir/*.sh; +RUN sync; +RUN $tmpdir/setup-configreader.sh ${TARGETARCH} + +FROM mcr.microsoft.com/cbl-mariner/distroless/base:2.0 +ENV PATH="/busybin:${PATH}" +ENV OS_TYPE "linux" + +# files +COPY --from=builder /opt /opt +COPY --from=builder /etc /etc +COPY --from=builder /busybin /busybin +COPY --from=builder /var/lib/logrotate /var/lib/logrotate +COPY --from=builder /var/spool/cron /var/spool/cron + +# executables +COPY --from=builder /usr/bin/ruby /usr/bin/ruby +COPY --from=builder /usr/lib/ruby /usr/lib/ruby +COPY --from=builder /usr/bin/inotifywait /usr/bin/inotifywait +COPY --from=builder /usr/bin/bash /usr/bin/bash +COPY --from=builder /usr/sbin/busybox /usr/sbin/busybox +COPY --from=builder /usr/sbin/crond /usr/sbin/crond +COPY --from=builder /usr/bin/vim /usr/bin/vim +COPY --from=builder /usr/share/vim /usr/share/vim +COPY --from=builder /usr/sbin/logrotate /usr/sbin/logrotate +COPY --from=builder /usr/bin/gzip /usr/bin/ +COPY --from=builder /usr/bin/curl /usr/bin/ +COPY --from=builder /bin/sh /bin/sh + +# bash dependencies +COPY --from=builder /lib/libreadline.so.8 /lib/ +COPY --from=builder /usr/lib/libncursesw.so.6 /usr/lib/libtinfo.so.6 /usr/lib/ +# inotifywait dependencies +COPY --from=builder /lib/libinotifytools.so.0 /lib/ +# crond dependencies +COPY --from=builder /lib/libselinux.so.1 /lib/libpam.so.0 /lib/libc.so.6 /lib/libpcre.so.1 /lib/libaudit.so.1 /lib/libcap-ng.so.0/ /lib/ +# vim dependencies +COPY --from=builder /lib/libm.so.6 /lib/libtinfo.so.6 /lib/ +# ruby dependencies +COPY --from=builder /usr/lib/libruby.so.3.1 /usr/lib/libz.so.1 /usr/lib/libgmp.so.10 /usr/lib/libcrypt.so.1 /usr/lib/libm.so.6 /usr/lib/ +# ruby re2 dependencies +COPY --from=builder /usr/lib/libre2.so.0a /usr/lib/libstdc++.so.6 /usr/lib/libgcc_s.so.1 /usr/lib/libz.so.1 /usr/lib/libgmp.so.10 /usr/lib/libcrypt.so.1 /usr/lib/libm.so.6 /usr/lib/ +# logrotate dependencies +COPY --from=builder /lib/libselinux.so.1 /lib/libpopt.so.0 /lib/libpcre.so.1 /lib/ +# curl dependencies +COPY --from=builder /lib/libcurl.so.4 /lib/libz.so.1 /lib/libc.so.6 /lib/libnghttp2.so.14 /lib/libssh2.so.1 /lib/libssl.so.1.1 /lib/libcrypto.so.1.1 /lib/libgssapi_krb5.so.2 /lib/libzstd.so.1 /lib/ +COPY --from=builder /usr/lib/libkrb5.so.3 /usr/lib/libk5crypto.so.3 /usr/lib/libcom_err.so.2 /usr/lib/libkrb5support.so.0 /usr/lib/libresolv.so.2 /usr/lib/ +# sh dependencies +COPY --from=builder /lib/libreadline.so.8 /lib/libc.so.6 /usr/lib/libncursesw.so.6 /usr/lib/libtinfo.so.6 /lib/ + +RUN [ "/bin/bash", "-c", "chmod 644 /etc/crontab" ] +RUN [ "/bin/bash", "-c", "chown root.root /etc/crontab" ] +RUN [ "/bin/bash", "-c", "chmod 755 /etc/cron.daily/logrotate" ] +ENTRYPOINT [ "/bin/bash" ] +CMD [ "/opt/main-configreader.sh" ] diff --git a/otelcollector/configmapparser/prometheus-config-merger.rb b/otelcollector/configmapparser/prometheus-config-merger.rb index c0c9c6808..b465d199c 100644 --- a/otelcollector/configmapparser/prometheus-config-merger.rb +++ b/otelcollector/configmapparser/prometheus-config-merger.rb @@ -12,6 +12,7 @@ @mergedDefaultConfigPath = "/opt/defaultsMergedConfig.yml" @replicasetControllerType = "replicaset" @daemonsetControllerType = "daemonset" +@configReaderSidecarContainerType = "configreadersidecar" @supportedSchemaVersion = true @defaultPromConfigPathPrefix = "/opt/microsoft/otelcollector/default-prom-configs/" @regexHashFile = "/opt/microsoft/configmapparser/config_def_targets_metrics_keep_list_hash" @@ -77,6 +78,16 @@ def loadIntervalHash end end +def isConfigReaderSidecar + if !ENV["CONTAINER_TYPE"].nil? && !ENV["CONTAINER_TYPE"].empty? + currentContainerType = ENV["CONTAINER_TYPE"].strip.downcase + if !currentContainerType.nil? && currentContainerType == @configReaderSidecarContainerType + return true + end + end + return false +end + def UpdateScrapeIntervalConfig(yamlConfigFile, scrapeIntervalSetting) begin ConfigParseErrorLogger.log(LOGGING_PREFIX, "Updating scrape interval config for #{yamlConfigFile}") @@ -159,28 +170,34 @@ def AppendRelabelConfig(yamlConfigFile, relabelConfig, keepRegex) def populateDefaultPrometheusConfig begin # check if running in daemonset or replicaset - currentControllerType = ENV["CONTROLLER_TYPE"].strip.downcase - + currentControllerType = "" + if !ENV["CONTROLLER_TYPE"].nil? && !ENV["CONTROLLER_TYPE"].empty? + currentControllerType = ENV["CONTROLLER_TYPE"].strip.downcase + end advancedMode = false #default is false windowsDaemonset = false #default is false # get current mode (advanced or not...) - currentMode = ENV["MODE"].strip.downcase - if currentMode == "advanced" - advancedMode = true + if !ENV["MODE"].nil? && !ENV["MODE"].empty? + currentMode = ENV["MODE"].strip.downcase + if currentMode == "advanced" + advancedMode = true + end end # get if windowsdaemonset is enabled or not (ie. WINMODE env = advanced or not...) - winMode = ENV["WINMODE"].strip.downcase - if winMode == "advanced" - windowsDaemonset = true + if !ENV["WINMODE"].nil? && !ENV["WINMODE"].empty? + winMode = ENV["WINMODE"].strip.downcase + if winMode == "advanced" + windowsDaemonset = true + end end defaultConfigs = [] if !ENV["AZMON_PROMETHEUS_KUBELET_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_KUBELET_SCRAPING_ENABLED"].downcase == "true" kubeletMetricsKeepListRegex = @regexHash["KUBELET_METRICS_KEEP_LIST_REGEX"] kubeletScrapeInterval = @intervalHash["KUBELET_SCRAPE_INTERVAL"] - if currentControllerType == @replicasetControllerType + if isConfigReaderSidecar if advancedMode == false UpdateScrapeIntervalConfig(@kubeletDefaultFileRsSimple, kubeletScrapeInterval) if !kubeletMetricsKeepListRegex.nil? && !kubeletMetricsKeepListRegex.empty? @@ -195,7 +212,7 @@ def populateDefaultPrometheusConfig defaultConfigs.push(@kubeletDefaultFileRsAdvanced) end else - if advancedMode == true && (windowsDaemonset == true || ENV["OS_TYPE"].downcase == "linux") + if advancedMode == true && currentControllerType == @daemonsetControllerType && (windowsDaemonset == true || ENV["OS_TYPE"].downcase == "linux") UpdateScrapeIntervalConfig(@kubeletDefaultFileDs, kubeletScrapeInterval) if !kubeletMetricsKeepListRegex.nil? && !kubeletMetricsKeepListRegex.empty? AppendMetricRelabelConfig(@kubeletDefaultFileDs, kubeletMetricsKeepListRegex) @@ -209,7 +226,7 @@ def populateDefaultPrometheusConfig end end end - if !ENV["AZMON_PROMETHEUS_COREDNS_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_COREDNS_SCRAPING_ENABLED"].downcase == "true" && currentControllerType == @replicasetControllerType + if !ENV["AZMON_PROMETHEUS_COREDNS_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_COREDNS_SCRAPING_ENABLED"].downcase == "true" && isConfigReaderSidecar corednsMetricsKeepListRegex = @regexHash["COREDNS_METRICS_KEEP_LIST_REGEX"] corednsScrapeInterval = @intervalHash["COREDNS_SCRAPE_INTERVAL"] UpdateScrapeIntervalConfig(@corednsDefaultFile, corednsScrapeInterval) @@ -221,7 +238,7 @@ def populateDefaultPrometheusConfig if !ENV["AZMON_PROMETHEUS_CADVISOR_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_CADVISOR_SCRAPING_ENABLED"].downcase == "true" cadvisorMetricsKeepListRegex = @regexHash["CADVISOR_METRICS_KEEP_LIST_REGEX"] cadvisorScrapeInterval = @intervalHash["CADVISOR_SCRAPE_INTERVAL"] - if currentControllerType == @replicasetControllerType + if isConfigReaderSidecar if advancedMode == false UpdateScrapeIntervalConfig(@cadvisorDefaultFileRsSimple, cadvisorScrapeInterval) if !cadvisorMetricsKeepListRegex.nil? && !cadvisorMetricsKeepListRegex.empty? @@ -233,7 +250,7 @@ def populateDefaultPrometheusConfig defaultConfigs.push(@cadvisorDefaultFileRsAdvanced) end else - if advancedMode == true && ENV["OS_TYPE"].downcase == "linux" + if advancedMode == true && ENV["OS_TYPE"].downcase == "linux" && currentControllerType == @daemonsetControllerType UpdateScrapeIntervalConfig(@cadvisorDefaultFileDs, cadvisorScrapeInterval) if !cadvisorMetricsKeepListRegex.nil? && !cadvisorMetricsKeepListRegex.empty? AppendMetricRelabelConfig(@cadvisorDefaultFileDs, cadvisorMetricsKeepListRegex) @@ -246,7 +263,7 @@ def populateDefaultPrometheusConfig end end end - if !ENV["AZMON_PROMETHEUS_KUBEPROXY_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_KUBEPROXY_SCRAPING_ENABLED"].downcase == "true" && currentControllerType == @replicasetControllerType + if !ENV["AZMON_PROMETHEUS_KUBEPROXY_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_KUBEPROXY_SCRAPING_ENABLED"].downcase == "true" && isConfigReaderSidecar kubeproxyMetricsKeepListRegex = @regexHash["KUBEPROXY_METRICS_KEEP_LIST_REGEX"] kubeproxyScrapeInterval = @intervalHash["KUBEPROXY_SCRAPE_INTERVAL"] UpdateScrapeIntervalConfig(@kubeproxyDefaultFile, kubeproxyScrapeInterval) @@ -255,7 +272,7 @@ def populateDefaultPrometheusConfig end defaultConfigs.push(@kubeproxyDefaultFile) end - if !ENV["AZMON_PROMETHEUS_APISERVER_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_APISERVER_SCRAPING_ENABLED"].downcase == "true" && currentControllerType == @replicasetControllerType + if !ENV["AZMON_PROMETHEUS_APISERVER_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_APISERVER_SCRAPING_ENABLED"].downcase == "true" && isConfigReaderSidecar apiserverMetricsKeepListRegex = @regexHash["APISERVER_METRICS_KEEP_LIST_REGEX"] apiserverScrapeInterval = @intervalHash["APISERVER_SCRAPE_INTERVAL"] UpdateScrapeIntervalConfig(@apiserverDefaultFile, apiserverScrapeInterval) @@ -264,7 +281,7 @@ def populateDefaultPrometheusConfig end defaultConfigs.push(@apiserverDefaultFile) end - if !ENV["AZMON_PROMETHEUS_KUBESTATE_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_KUBESTATE_SCRAPING_ENABLED"].downcase == "true" && currentControllerType == @replicasetControllerType + if !ENV["AZMON_PROMETHEUS_KUBESTATE_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_KUBESTATE_SCRAPING_ENABLED"].downcase == "true" && isConfigReaderSidecar kubestateMetricsKeepListRegex = @regexHash["KUBESTATE_METRICS_KEEP_LIST_REGEX"] kubestateScrapeInterval = @intervalHash["KUBESTATE_SCRAPE_INTERVAL"] UpdateScrapeIntervalConfig(@kubestateDefaultFile, kubestateScrapeInterval) @@ -280,7 +297,7 @@ def populateDefaultPrometheusConfig if !ENV["AZMON_PROMETHEUS_NODEEXPORTER_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_NODEEXPORTER_SCRAPING_ENABLED"].downcase == "true" nodeexporterMetricsKeepListRegex = @regexHash["NODEEXPORTER_METRICS_KEEP_LIST_REGEX"] nodeexporterScrapeInterval = @intervalHash["NODEEXPORTER_SCRAPE_INTERVAL"] - if currentControllerType == @replicasetControllerType + if isConfigReaderSidecar if advancedMode == true && @sendDSUpMetric == true UpdateScrapeIntervalConfig(@nodeexporterDefaultFileRsAdvanced, nodeexporterScrapeInterval) contents = File.read(@nodeexporterDefaultFileRsAdvanced) @@ -300,7 +317,7 @@ def populateDefaultPrometheusConfig defaultConfigs.push(@nodeexporterDefaultFileRsSimple) end else - if advancedMode == true && ENV["OS_TYPE"].downcase == "linux" + if advancedMode == true && ENV["OS_TYPE"].downcase == "linux" && currentControllerType == @daemonsetControllerType UpdateScrapeIntervalConfig(@nodeexporterDefaultFileDs, nodeexporterScrapeInterval) if !nodeexporterMetricsKeepListRegex.nil? && !nodeexporterMetricsKeepListRegex.empty? AppendMetricRelabelConfig(@nodeexporterDefaultFileDs, nodeexporterMetricsKeepListRegex) @@ -318,10 +335,10 @@ def populateDefaultPrometheusConfig if !ENV["AZMON_PROMETHEUS_KAPPIEBASIC_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_KAPPIEBASIC_SCRAPING_ENABLED"].downcase == "true" kappiebasicMetricsKeepListRegex = @regexHash["KAPPIEBASIC_METRICS_KEEP_LIST_REGEX"] kappiebasicScrapeInterval = @intervalHash["KAPPIEBASIC_SCRAPE_INTERVAL"] - if currentControllerType == @replicasetControllerType + if isConfigReaderSidecar #do nothing -- kappie is not supported to be scrapped automatically outside ds. if needed, customer can disable this ds target, and enable rs scraping thru custom config map - else #kappie scraping will be turned ON by default only when in MAC/addon mode (for both windows & linux) - if advancedMode == true && !ENV['MAC'].nil? && !ENV['MAC'].empty? && ENV['MAC'].strip.downcase == "true" #&& ENV["OS_TYPE"].downcase == "linux" + elsif currentControllerType == @daemonsetControllerType #kappie scraping will be turned ON by default only when in MAC/addon mode (for both windows & linux) + if advancedMode == true && !ENV["MAC"].nil? && !ENV["MAC"].empty? && ENV["MAC"].strip.downcase == "true" #&& ENV["OS_TYPE"].downcase == "linux" UpdateScrapeIntervalConfig(@kappiebasicDefaultFileDs, kappiebasicScrapeInterval) if !kappiebasicMetricsKeepListRegex.nil? && !kappiebasicMetricsKeepListRegex.empty? AppendMetricRelabelConfig(@kappiebasicDefaultFileDs, kappiebasicMetricsKeepListRegex) @@ -345,6 +362,7 @@ def populateDefaultPrometheusConfig if !ENV["AZMON_PROMETHEUS_WINDOWSEXPORTER_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_WINDOWSEXPORTER_SCRAPING_ENABLED"].downcase == "true" winexporterMetricsKeepListRegex = @regexHash["WINDOWSEXPORTER_METRICS_KEEP_LIST_REGEX"] windowsexporterScrapeInterval = @intervalHash["WINDOWSEXPORTER_SCRAPE_INTERVAL"] + # Not adding the isConfigReaderSidecar check instead of replicaset check since this is legacy 1P chart path and not relevant anymore. if currentControllerType == @replicasetControllerType && advancedMode == false && ENV["OS_TYPE"].downcase == "linux" UpdateScrapeIntervalConfig(@windowsexporterDefaultRsSimpleFile, windowsexporterScrapeInterval) if !winexporterMetricsKeepListRegex.nil? && !winexporterMetricsKeepListRegex.empty? @@ -367,7 +385,7 @@ def populateDefaultPrometheusConfig defaultConfigs.push(@windowsexporterDefaultDsFile) # If advanced mode is enabled, but not the windows daemonset, scrape windows kubelet from the replicaset as if it's simple mode - elsif currentControllerType == @replicasetControllerType && advancedMode == true && windowsDaemonset == false && ENV["OS_TYPE"].downcase == "linux" + elsif isConfigReaderSidecar UpdateScrapeIntervalConfig(@windowsexporterDefaultRsSimpleFile, windowsexporterScrapeInterval) if !winexporterMetricsKeepListRegex.nil? && !winexporterMetricsKeepListRegex.empty? AppendMetricRelabelConfig(@windowsexporterDefaultRsSimpleFile, winexporterMetricsKeepListRegex) @@ -379,6 +397,7 @@ def populateDefaultPrometheusConfig if !ENV["AZMON_PROMETHEUS_WINDOWSKUBEPROXY_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_WINDOWSKUBEPROXY_SCRAPING_ENABLED"].downcase == "true" winkubeproxyMetricsKeepListRegex = @regexHash["WINDOWSKUBEPROXY_METRICS_KEEP_LIST_REGEX"] windowskubeproxyScrapeInterval = @intervalHash["WINDOWSKUBEPROXY_SCRAPE_INTERVAL"] + # Not adding the isConfigReaderSidecar check instead of replicaset check since this is legacy 1P chart path and not relevant anymore. if currentControllerType == @replicasetControllerType && advancedMode == false && ENV["OS_TYPE"].downcase == "linux" UpdateScrapeIntervalConfig(@windowskubeproxyDefaultFileRsSimpleFile, windowskubeproxyScrapeInterval) if !winkubeproxyMetricsKeepListRegex.nil? && !winkubeproxyMetricsKeepListRegex.empty? @@ -401,7 +420,7 @@ def populateDefaultPrometheusConfig defaultConfigs.push(@windowskubeproxyDefaultDsFile) # If advanced mode is enabled, but not the windows daemonset, scrape windows kubelet from the replicaset as if it's simple mode - elsif currentControllerType == @replicasetControllerType && advancedMode == true && windowsDaemonset == false && ENV["OS_TYPE"].downcase == "linux" + elsif isConfigReaderSidecar UpdateScrapeIntervalConfig(@windowskubeproxyDefaultFileRsSimpleFile, windowskubeproxyScrapeInterval) if !winkubeproxyMetricsKeepListRegex.nil? && !winkubeproxyMetricsKeepListRegex.empty? AppendMetricRelabelConfig(@windowskubeproxyDefaultFileRsSimpleFile, winkubeproxyMetricsKeepListRegex) @@ -410,7 +429,7 @@ def populateDefaultPrometheusConfig end end - if !ENV["AZMON_PROMETHEUS_POD_ANNOTATION_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_POD_ANNOTATION_SCRAPING_ENABLED"].downcase == "true" && currentControllerType == @replicasetControllerType + if !ENV["AZMON_PROMETHEUS_POD_ANNOTATION_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_POD_ANNOTATION_SCRAPING_ENABLED"].downcase == "true" && isConfigReaderSidecar podannotationNamespacesRegex = ENV["AZMON_PROMETHEUS_POD_ANNOTATION_NAMESPACES_REGEX"] podannotationMetricsKeepListRegex = @regexHash["POD_ANNOTATION_METRICS_KEEP_LIST_REGEX"] podannotationScrapeInterval = @intervalHash["POD_ANNOTATION_SCRAPE_INTERVAL"] diff --git a/otelcollector/configmapparser/tomlparser-debug-mode.rb b/otelcollector/configmapparser/tomlparser-debug-mode.rb index 8c4fe09ed..58d25bd71 100644 --- a/otelcollector/configmapparser/tomlparser-debug-mode.rb +++ b/otelcollector/configmapparser/tomlparser-debug-mode.rb @@ -2,12 +2,14 @@ # frozen_string_literal: true require "tomlrb" +require "yaml" require_relative "ConfigParseErrorLogger" LOGGING_PREFIX = "debug-mode-config" @configMapMountPath = "/etc/config/settings/debug-mode" @configVersion = "" @configSchemaVersion = "" +@replicasetCollectorConfig = "/opt/microsoft/otelcollector/collector-config-replicaset.yml" # Setting default values which will be used in case they are not set in the configmap or if configmap doesnt exist @defaultEnabled = false @@ -54,14 +56,34 @@ def populateSettingValuesFromConfigMap(parsedConfig) file = File.open("/opt/microsoft/configmapparser/config_debug_mode_env_var", "w") if !file.nil? - if !ENV['OS_TYPE'].nil? && ENV['OS_TYPE'].downcase == "linux" + if !ENV["OS_TYPE"].nil? && ENV["OS_TYPE"].downcase == "linux" file.write("export DEBUG_MODE_ENABLED=#{@defaultEnabled}\n") else file.write("DEBUG_MODE_ENABLED=#{@defaultEnabled}\n") end - + file.close else ConfigParseErrorLogger.logError(LOGGING_PREFIX, "Exception while opening file for writing prometheus-collector config environment variables") end +# Adding logic to set otlp in service pipeline metrics when debug mode is enabled. This is done in promconfigvalidator for daemonset. +# We need to do this here for the replicaset since we don't run the promconfigvalidator for rs config. +if @defaultEnabled == true + begin + controllerType = ENV["CONTROLLER_TYPE"] + if !controllerType.nil? && !controllerType.empty? && controllerType == "ReplicaSet" + ConfigParseErrorLogger.log(LOGGING_PREFIX, "Setting otlp in the exporter metrics for service pipeline since debug mode is enabled ...") + config = YAML.load(File.read(@replicasetCollectorConfig)) + if !config.nil? + config["service"]["pipelines"]["metrics"]["exporters"] = ["otlp", "prometheus"] + cfgYamlWithDebugModeSettings = YAML::dump(config) + File.open(@replicasetCollectorConfig, "w") { |file| file.puts cfgYamlWithDebugModeSettings } + end + ConfigParseErrorLogger.log(LOGGING_PREFIX, "Done setting otlp in the exporter metrics for service pipeline.") + end + rescue => errorStr + ConfigParseErrorLogger.logError(LOGGING_PREFIX, "Exception while setting otlp in the exporter metrics for service pipeline when debug mode is enabled - #{errorStr}") + end +end + ConfigParseErrorLogger.logSection(LOGGING_PREFIX, "End debug-mode Settings Processing") diff --git a/otelcollector/configuration-reader-builder/Makefile b/otelcollector/configuration-reader-builder/Makefile new file mode 100644 index 000000000..091ef58f9 --- /dev/null +++ b/otelcollector/configuration-reader-builder/Makefile @@ -0,0 +1,9 @@ +.PHONY: configurationreader +configurationreader: + @echo "========================= Building configurationreader =========================" + @echo "========================= cleanup existing configurationreader =========================" + rm -rf configurationreader + @echo "========================= go get =========================" + go get + @echo "========================= go build =========================" + go build -buildmode=pie -ldflags '-linkmode external -extldflags=-Wl,-z,now' -o configurationreader . \ No newline at end of file diff --git a/otelcollector/configuration-reader-builder/go.mod b/otelcollector/configuration-reader-builder/go.mod new file mode 100644 index 000000000..d3a3f4068 --- /dev/null +++ b/otelcollector/configuration-reader-builder/go.mod @@ -0,0 +1,73 @@ +module github.com/configurationreader + +go 1.20 + +require ( + github.com/prometheus/prometheus v0.45.0 + gopkg.in/yaml.v2 v2.4.0 + k8s.io/api v0.26.2 + k8s.io/apimachinery v0.26.2 + k8s.io/client-go v0.26.2 +) + +require ( + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.3.1 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.1 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 // indirect + github.com/AzureAD/microsoft-authentication-library-for-go v0.8.1 // indirect + github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 // indirect + github.com/aws/aws-sdk-go v1.44.276 // indirect + github.com/beorn7/perks v1.0.1 // indirect + github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/emicklei/go-restful/v3 v3.10.1 // indirect + github.com/go-kit/log v0.2.1 // indirect + github.com/go-logfmt/logfmt v0.6.0 // indirect + github.com/go-logr/logr v1.2.4 // indirect + github.com/go-openapi/jsonpointer v0.19.6 // indirect + github.com/go-openapi/jsonreference v0.20.2 // indirect + github.com/go-openapi/swag v0.22.3 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang-jwt/jwt/v4 v4.5.0 // indirect + github.com/golang/protobuf v1.5.3 // indirect + github.com/google/gnostic v0.6.9 // indirect + github.com/google/go-cmp v0.5.9 // indirect + github.com/google/gofuzz v1.2.0 // indirect + github.com/google/uuid v1.3.0 // indirect + github.com/grafana/regexp v0.0.0-20221122212121-6b5c0a4cb7fd // indirect + github.com/jmespath/go-jmespath v0.4.0 // indirect + github.com/josharian/intern v1.0.0 // indirect + github.com/jpillora/backoff v1.0.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/kylelemons/godebug v1.1.0 // indirect + github.com/mailru/easyjson v0.7.7 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f // indirect + github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 // indirect + github.com/prometheus/client_golang v1.15.1 // indirect + github.com/prometheus/client_model v0.4.0 // indirect + github.com/prometheus/common v0.44.0 // indirect + github.com/prometheus/common/sigv4 v0.1.0 // indirect + github.com/prometheus/procfs v0.9.0 // indirect + golang.org/x/crypto v0.8.0 // indirect + golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 // indirect + golang.org/x/net v0.10.0 // indirect + golang.org/x/oauth2 v0.8.0 // indirect + golang.org/x/sys v0.8.0 // indirect + golang.org/x/term v0.8.0 // indirect + golang.org/x/text v0.9.0 // indirect + golang.org/x/time v0.3.0 // indirect + google.golang.org/appengine v1.6.7 // indirect + google.golang.org/protobuf v1.30.0 // indirect + gopkg.in/inf.v0 v0.9.1 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + k8s.io/klog/v2 v2.100.1 // indirect + k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f // indirect + k8s.io/utils v0.0.0-20230308161112-d77c459e9343 // indirect + sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect + sigs.k8s.io/yaml v1.3.0 // indirect +) diff --git a/otelcollector/configuration-reader-builder/go.sum b/otelcollector/configuration-reader-builder/go.sum new file mode 100644 index 000000000..485fc7407 --- /dev/null +++ b/otelcollector/configuration-reader-builder/go.sum @@ -0,0 +1,714 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/Azure/azure-sdk-for-go v65.0.0+incompatible h1:HzKLt3kIwMm4KeJYTdx9EbjRYTySD/t8i1Ee/W5EGXw= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.3.1 h1:gVXuXcWd1i4C2Ruxe321aU+IKGaStvGB/S90PUPB/W8= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.3.1/go.mod h1:DffdKW9RFqa5VgmsjUOsS7UE7eiA5iAvYUs63bhKQ0M= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.1 h1:T8quHYlUGyb/oqtSTwqlCr1ilJHrDv+ZtpSfo+hm1BU= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.1/go.mod h1:gLa1CL2RNE4s7M3yopJ/p0iq5DdY6Yv5ZUt9MTRZOQM= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 h1:sXr+ck84g/ZlZUOZiNELInmMgOsuGwdjjVkEIde0OtY= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0/go.mod h1:okt5dMMTOFjX/aovMlrjvvXoPMBVSPzk9185BT0+eZM= +github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= +github.com/Azure/go-autorest/autorest v0.11.29 h1:I4+HL/JDvErx2LjyzaVxllw2lRDB5/BT2Bm4g20iqYw= +github.com/Azure/go-autorest/autorest/adal v0.9.23 h1:Yepx8CvFxwNKpH6ja7RZ+sKX+DWYNldbLiALMC3BTz8= +github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8KY+LPI6wiWrP/myHw= +github.com/Azure/go-autorest/autorest/to v0.4.0 h1:oXVqrxakqqV1UZdSazDOPOLvOIz+XA683u8EctwboHk= +github.com/Azure/go-autorest/autorest/validation v0.3.1 h1:AgyqjAd94fwNAoTjl/WQXg4VvFeRFpO+UhNyRXqF1ac= +github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+ZtXWSmf4Tg= +github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo= +github.com/AzureAD/microsoft-authentication-library-for-go v0.8.1 h1:oPdPEZFSbl7oSPEAIPMPBMUmiL+mqgzBJwM/9qYcwNg= +github.com/AzureAD/microsoft-authentication-library-for-go v0.8.1/go.mod h1:4qFor3D/HDsvBME35Xy9rwW9DecL+M2sNw1ybjPtwA0= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= +github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 h1:s6gZFSlWYmbqAuRjVTiNNhvNRfY2Wxp9nhfyel4rklc= +github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA= +github.com/aws/aws-sdk-go v1.38.35/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= +github.com/aws/aws-sdk-go v1.44.276 h1:ywPlx9C5Yc482dUgAZ9bHpQ6onVvJvYE9FJWsNDCEy0= +github.com/aws/aws-sdk-go v1.44.276/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +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/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +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/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230428030218-4003588d1b74 h1:zlUubfBUxApscKFsF4VSvvfhsBNTBu0eF/ddvpo96yk= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/digitalocean/godo v1.99.0 h1:gUHO7n9bDaZFWvbzOum4bXE0/09ZuYA9yA8idQHX57E= +github.com/dnaeon/go-vcr v1.1.0 h1:ReYa/UBrRyQdant9B4fNHGoCNKw6qh6P0fsdGmZpR7c= +github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= +github.com/docker/docker v24.0.2+incompatible h1:eATx+oLz9WdNVkQrr0qjQ8HvRJ4bOOxfzEo8R+dA3cg= +github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= +github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= +github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= +github.com/emicklei/go-restful/v3 v3.10.1 h1:rc42Y5YTp7Am7CS630D7JmhRjq4UlEUuEKfrDac4bSQ= +github.com/emicklei/go-restful/v3 v3.10.1/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/go-control-plane v0.11.0 h1:jtLewhRR2vMRNnq2ZZUoCjUlgut+Y0+sDDWPOfwOi1o= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v1.0.1 h1:kt9FtLiooDc0vbwTLhdg3dyNX1K9Qwa1EK9LcD4jVUQ= +github.com/fatih/color v1.14.1 h1:qfhVLaG5s+nCROl1zJsZRxFeYrHLqWroPOQ8BWiNb4w= +github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= +github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= +github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= +github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= +github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= +github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= +github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= +github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= +github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= +github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= +github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-resty/resty/v2 v2.7.0 h1:me+K9p3uhSmXtrBZ4k9jcEAfJmuC8IivWHwaLZwPrFY= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-zookeeper/zk v1.0.3 h1:7M2kwOsc//9VeeFiPtf+uSJlVpU66x9Ba5+8XK7/TDg= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= +github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +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.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/gnostic v0.6.9 h1:ZK/5VhkoX835RikCHpSUJV9a+S3e1zLh59YnyWeBW+0= +github.com/google/gnostic v0.6.9/go.mod h1:Nm8234We1lq6iB9OmlgNv3nH91XLLVZHCDayfA3xq+E= +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.4.1/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.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= +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/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/gophercloud/gophercloud v1.4.0 h1:RqEu43vaX0lb0LanZr5BylK5ICVxjpFFoc0sxivyuHU= +github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= +github.com/grafana/regexp v0.0.0-20221122212121-6b5c0a4cb7fd h1:PpuIBO5P3e9hpqBD0O/HjhShYuM6XE0i/lbE6J94kww= +github.com/grafana/regexp v0.0.0-20221122212121-6b5c0a4cb7fd/go.mod h1:M5qHK+eWfAv8VR/265dIuEpL3fNfeC21tXXp9itM24A= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/hashicorp/consul/api v1.21.0 h1:WMR2JiyuaQWRAMFaOGiYfY4Q4HRpyYRe/oYQofjyduM= +github.com/hashicorp/cronexpr v1.1.1 h1:NJZDd87hGXjoZBdvyCF9mX4DCq5Wy7+A/w+A7q0wn6c= +github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= +github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= +github.com/hashicorp/go-hclog v1.4.0 h1:ctuWFGrhFha8BnnzxqeRGidlEcQkDyL5u8J8t5eA11I= +github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-retryablehttp v0.7.2 h1:AcYqCvkpalPnPF2pn0KamgwamS42TqUDDYFRKq/RAd0= +github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.6.0 h1:uL2shRDx7RTrOrTCUZEGP/wJUFiUI8QT6E7z5o8jga4= +github.com/hashicorp/nomad/api v0.0.0-20230605233119-67e39d5d248f h1:yxjcAZRuYymIDC0W4IQHgTe9EQdu2BsjPlVmKwyVZT4= +github.com/hashicorp/serf v0.10.1 h1:Z1H2J60yRKvfDYAOZLd2MU0ND4AH/WDz7xYHDWQsIPY= +github.com/hetznercloud/hcloud-go v1.45.1 h1:nl0OOklFfQT5J6AaNIOhl5Ruh3fhmGmhvZEqHbibVuk= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= +github.com/ionos-cloud/sdk-go/v6 v6.1.7 h1:uVG1Q/ZDJ7YmCI9Oevpue9xJEH5UrUMyXv8gm7NTxIw= +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/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= +github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +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/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +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/kolo/xmlrpc v0.0.0-20220921171641-a4b6fa1dd06b h1:udzkj9S/zlT5X367kqJis0QP7YMxobob6zhzq6Yre00= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +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/linode/linodego v1.17.0 h1:aWS98f0jUoY2lhsEuBxRdVkqyGM0nazPd68AEDF0EvU= +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-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= +github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/miekg/dns v1.1.54 h1:5jon9mWcb0sFJGpnI99tOMhCPyJ+RPVz5b63MQG0VWI= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +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 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +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/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/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/onsi/ginkgo/v2 v2.4.0 h1:+Ig9nvqgS5OBSACXNk15PLdp0U9XPYROt9CFzVdFGIs= +github.com/onsi/gomega v1.23.0 h1:/oxKu9c2HVap+F3PfKort2Hw5DEU+HGlW8n+tguWsys= +github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= +github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM= +github.com/ovh/go-ovh v1.4.1 h1:VBGa5wMyQtTP7Zb+w97zRCh9sLtM/2YKRyy+MEJmWaM= +github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= +github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +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 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= +github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_golang v1.15.1 h1:8tXpTmJbyH5lydzFPoxSIJ0J46jdh3tylbvM1xCv0LI= +github.com/prometheus/client_golang v1.15.1/go.mod h1:e9yaBhRPU2pPNsZwE+JdQl0KEt1N9XgF6zxWmaC0xOk= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY= +github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= +github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= +github.com/prometheus/common v0.29.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY= +github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY= +github.com/prometheus/common/sigv4 v0.1.0 h1:qoVebwtwwEhS85Czm2dSROY5fTo2PAPEVdDeppTwGX4= +github.com/prometheus/common/sigv4 v0.1.0/go.mod h1:2Jkxxk9yYvCkE5G1sQT7GuEXm57JrvHu9k5YwTjsNtI= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= +github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= +github.com/prometheus/prometheus v0.45.0 h1:O/uG+Nw4kNxx/jDPxmjsSDd+9Ohql6E7ZSY1x5x/0KI= +github.com/prometheus/prometheus v0.45.0/go.mod h1:jC5hyO8ItJBnDWGecbEucMyXjzxGv9cxsxsjS9u5s1w= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= +github.com/scaleway/scaleway-sdk-go v1.0.0-beta.17 h1:1WuWJu7/e8SqK+uQl7lfk/N/oMZTL2NE/TJsNKRNMc4= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/vultr/govultr/v2 v2.17.2 h1:gej/rwr91Puc/tgh+j33p/BLR16UrIPnSr+AIwYWZQs= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +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/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.8.0 h1:pd9TJtTueMTVQXzk8E2XESSMQDj/U7OUu0PqJqPXQjQ= +golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 h1:k/i9J1pBpvlfR+9QsetwPyERsqu1GIbi967PQMq3Ivc= +golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +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-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +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/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= +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-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/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-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/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-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= +golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.8.0 h1:6dkIjl3j3LtZ/O3sTgZTMsLKSftL/B8Zgq4huOIIUu8= +golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= +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-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/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-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/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.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/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-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= +golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +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-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.9.3 h1:Gn1I8+64MsuTb/HpH+LmQtNas23LhUVr3rYZ0eKuaMM= +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= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +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/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20230320184635-7606e756e683 h1:khxVcsk/FhnzxMKOyD+TDGwjbEOpcPuIpmafPGFmhMA= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.55.0 h1:3Oj82/tFSCeUrRTg/5E/7d/W5A1tj6Ky1ABAuZuv5ag= +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.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.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/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/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/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.0-20200615113413-eeeca48fe776/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-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +k8s.io/api v0.26.2 h1:dM3cinp3PGB6asOySalOZxEG4CZ0IAdJsrYZXE/ovGQ= +k8s.io/api v0.26.2/go.mod h1:1kjMQsFE+QHPfskEcVNgL3+Hp88B80uj0QtSOlj8itU= +k8s.io/apimachinery v0.26.2 h1:da1u3D5wfR5u2RpLhE/ZtZS2P7QvDgLZTi9wrNZl/tQ= +k8s.io/apimachinery v0.26.2/go.mod h1:ats7nN1LExKHvJ9TmwootT00Yz05MuYqPXEXaVeOy5I= +k8s.io/client-go v0.26.2 h1:s1WkVujHX3kTp4Zn4yGNFK+dlDXy1bAAkIl+cFAiuYI= +k8s.io/client-go v0.26.2/go.mod h1:u5EjOuSyBa09yqqyY7m3abZeovO/7D/WehVVlZ2qcqU= +k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg= +k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f h1:2kWPakN3i/k81b0gvD5C5FJ2kxm1WrQFanWchyKuqGg= +k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f/go.mod h1:byini6yhqGC14c3ebc/QwanvYwhuMWF6yz2F8uwW8eg= +k8s.io/utils v0.0.0-20230308161112-d77c459e9343 h1:m7tbIjXGcGIAtpmQr7/NAi7RsWoW3E7Zcm4jI1HicTc= +k8s.io/utils v0.0.0-20230308161112-d77c459e9343/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +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/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= +sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= +sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= +sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= diff --git a/otelcollector/configuration-reader-builder/main.go b/otelcollector/configuration-reader-builder/main.go new file mode 100644 index 000000000..f69dcb6e6 --- /dev/null +++ b/otelcollector/configuration-reader-builder/main.go @@ -0,0 +1,94 @@ +package main + +import ( + "flag" + "fmt" + "log" + + "os" + + yaml "gopkg.in/yaml.v2" +) + +type Config struct { + LabelSelector map[string]string `yaml:"label_selector,omitempty"` + Config map[string]interface{} `yaml:"config"` + AllocationStrategy string `yaml:"allocation_strategy,omitempty"` +} + +type OtelConfig struct { + Exporters interface{} `yaml:"exporters"` + Processors interface{} `yaml:"processors"` + Extensions interface{} `yaml:"extensions"` + Receivers struct { + Prometheus struct { + Config map[string]interface{} `yaml:"config"` + TargetAllocator interface{} `yaml:"target_allocator"` + } `yaml:"prometheus"` + } `yaml:"receivers"` + Service struct { + Extensions interface{} `yaml:"extensions"` + Pipelines struct { + Metrics struct { + Exporters interface{} `yaml:"exporters"` + Processors interface{} `yaml:"processors"` + Receivers interface{} `yaml:"receivers"` + } `yaml:"metrics"` + } `yaml:"pipelines"` + Telemetry struct { + Logs struct { + Level interface{} `yaml:"level"` + Encoding interface{} `yaml:"encoding"` + } `yaml:"logs"` + } `yaml:"telemetry"` + } `yaml:"service"` +} + +var RESET = "\033[0m" +var RED = "\033[31m" + +var taConfigFilePath = "/ta-configuration/targetallocator.yaml" + +func logFatalError(message string) { + // Always log the full message + log.Fatalf("%s%s%s", RED, message, RESET) +} + +func updateTAConfigFile(configFilePath string) { + defaultsMergedConfigFileContents, err := os.ReadFile(configFilePath) + if err != nil { + logFatalError(fmt.Sprintf("config-reader::Unable to read file contents from: %s - %v\n", configFilePath, err)) + os.Exit(1) + } + var promScrapeConfig map[string]interface{} + var otelConfig OtelConfig + err = yaml.Unmarshal([]byte(defaultsMergedConfigFileContents), &otelConfig) + if err != nil { + logFatalError(fmt.Sprintf("config-reader::Unable to unmarshal merged otel configuration from: %s - %v\n", configFilePath, err)) + os.Exit(1) + } + + promScrapeConfig = otelConfig.Receivers.Prometheus.Config + targetAllocatorConfig := Config{ + LabelSelector: map[string]string{ + "rsName": "ama-metrics", + "kubernetes.azure.com/managedby": "aks", + }, + Config: promScrapeConfig, + } + + targetAllocatorConfigYaml, _ := yaml.Marshal(targetAllocatorConfig) + if err := os.WriteFile(taConfigFilePath, targetAllocatorConfigYaml, 0644); err != nil { + logFatalError(fmt.Sprintf("config-reader::Unable to write to: %s - %v\n", taConfigFilePath, err)) + os.Exit(1) + } + + log.Println("Updated file - targetallocator.yaml for the TargetAllocator to pick up new config changes") +} + +func main() { + configFilePtr := flag.String("config", "", "Config file to read") + flag.Parse() + otelConfigFilePath := *configFilePtr + updateTAConfigFile(otelConfigFilePath) +} diff --git a/otelcollector/customresources/pod-monitor-template.yaml b/otelcollector/customresources/pod-monitor-template.yaml new file mode 100644 index 000000000..e29c3847a --- /dev/null +++ b/otelcollector/customresources/pod-monitor-template.yaml @@ -0,0 +1,12 @@ +apiVersion: monitoring.coreos.com/v1 +kind: PodMonitor +metadata: + name: +spec: + # The following limits - labelLimit, labelNameLengthLimit and labelValueLengthLimit should exist in the pod monitor CR + # These ensure that the metrics don't get dropped because labels/labelnames/labelvalues exceed the limits supported by the processing pipeline + labelLimit: 63 + labelNameLengthLimit: 511 + labelValueLengthLimit: 1023 + # rest of the pod monitor + diff --git a/otelcollector/customresources/service-monitor-template.yaml b/otelcollector/customresources/service-monitor-template.yaml new file mode 100644 index 000000000..85cc30dcb --- /dev/null +++ b/otelcollector/customresources/service-monitor-template.yaml @@ -0,0 +1,12 @@ +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + name: +spec: + # The following limits - labelLimit, labelNameLengthLimit and labelValueLengthLimit should exist in the service monitor CR + # These ensure that the metrics don't get dropped because labels/labelnames/labelvalues exceed the limits supported by the processing pipeline + labelLimit: 63 + labelNameLengthLimit: 511 + labelValueLengthLimit: 1023 + # rest of the service monitor + diff --git a/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-clusterRole.yaml b/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-clusterRole.yaml index b0c3ec6bd..62b6b259a 100644 --- a/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-clusterRole.yaml +++ b/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-clusterRole.yaml @@ -17,6 +17,14 @@ rules: "ingress" ] verbs: ["list", "get", "watch"] + - apiGroups: + - discovery.k8s.io + resources: + - endpointslices + verbs: + - list + - watch + - get - apiGroups: - networking.k8s.io resources: @@ -31,3 +39,10 @@ rules: - apiGroups: ["clusterconfig.azure.com"] resources: ["azureclusteridentityrequests", "azureclusteridentityrequests/status"] verbs: ["get", "update", "list", "create"] + - apiGroups: + - monitoring.coreos.com + resources: + - servicemonitors + - podmonitors + verbs: + - '*' diff --git a/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-daemonset.yaml b/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-daemonset.yaml index 8e64ab76d..99221b08e 100644 --- a/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-daemonset.yaml +++ b/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-daemonset.yaml @@ -35,20 +35,20 @@ spec: requests: cpu: 75m memory: 150Mi - {{- if and (.Values.AzureMonitorMetrics.ArcExtension) (.Values.Azure.proxySettings.isProxyEnabled) }} + {{- if and (eq .Values.AzureMonitorMetrics.ArcExtension true) (.Values.Azure.proxySettings.isProxyEnabled) }} envFrom: - secretRef: name: ama-metrics-proxy-config {{- end }} env: - name: CLUSTER - {{- if .Values.AzureMonitorMetrics.ArcExtension }} + {{- if eq .Values.AzureMonitorMetrics.ArcExtension true }} value: "{{ .Values.Azure.Cluster.ResourceId }}" {{- else }} value: "{{ .Values.global.commonGlobals.Customer.AzureResourceID }}" {{- end }} - name: AKSREGION - {{- if .Values.AzureMonitorMetrics.ArcExtension }} + {{- if eq .Values.AzureMonitorMetrics.ArcExtension true }} value: "{{ .Values.Azure.Cluster.Region }}" {{- else }} value: "{{ .Values.global.commonGlobals.Region }}" @@ -58,7 +58,7 @@ spec: - name: AZMON_COLLECT_ENV value: "false" - name: customEnvironment - {{- if .Values.AzureMonitorMetrics.ArcExtension }} + {{- if eq .Values.AzureMonitorMetrics.ArcExtension true }} value: "{{ lower .Values.Azure.Cluster.Cloud }}" {{- else if .Values.AzureMonitorMetrics.isArcACluster }} value: "arcautonomous" @@ -67,7 +67,7 @@ spec: {{- end }} - name: OMS_TLD value: "opinsights.azure.com" - {{- if .Values.AzureMonitorMetrics.isArcACluster }} + {{- if eq .Values.AzureMonitorMetrics.isArcACluster true }} - name: customRegionalEndpoint value: {{ required "customRegionalEndpoint is required in Arc Autonomous" .Values.AzureMonitorMetrics.arcAutonomousSettings.customRegionalEndpoint | toString | trim | quote }} - name: customGlobalEndpoint @@ -110,7 +110,7 @@ spec: - name: NODE_EXPORTER_NAME value: "" # Replace this with the node exporter shipped out of box with AKS - name: NODE_EXPORTER_TARGETPORT - {{- if .Values.AzureMonitorMetrics.ArcExtension }} + {{- if eq .Values.AzureMonitorMetrics.ArcExtension true }} value: "{{ index .Values "prometheus-node-exporter" "service" "targetPort" }}" {{- else }} value: "19100" @@ -149,12 +149,12 @@ spec: - mountPath: /anchors/mariner name: anchors-mariner readOnly: true - {{- if or (ne .Values.AzureMonitorMetrics.ArcExtension true) (and (ne .Values.Azure.Distribution "aks_edge_k3s") (ne .Values.Azure.Distribution "aks_edge_k8s")) }} + {{- if or (ne .Values.AzureMonitorMetrics.ArcExtension true) (and (ne .Values.Azure.Cluster.Distribution "aks_edge_k3s") (ne .Values.Azure.Cluster.Distribution "aks_edge_k8s")) }} - mountPath: /anchors/ubuntu name: anchors-ubuntu readOnly: true {{- end }} - {{- if .Values.AzureMonitorMetrics.ArcExtension }} + {{- if eq .Values.AzureMonitorMetrics.ArcExtension true }} - mountPath: /anchors/proxy name: ama-metrics-proxy-cert readOnly: true @@ -169,7 +169,7 @@ spec: periodSeconds: 15 timeoutSeconds: 5 failureThreshold: 3 - {{- if .Values.AzureMonitorMetrics.ArcExtension }} + {{- if eq .Values.AzureMonitorMetrics.ArcExtension true }} - name: arc-msi-adapter imagePullPolicy: IfNotPresent env: @@ -262,7 +262,7 @@ spec: hostPath: path: /etc/pki/ca-trust/anchors/ type: DirectoryOrCreate - {{- if or (ne .Values.AzureMonitorMetrics.ArcExtension true) (and (ne .Values.Azure.Distribution "aks_edge_k3s") (ne .Values.Azure.Distribution "aks_edge_k8s")) }} + {{- if or (ne .Values.AzureMonitorMetrics.ArcExtension true) (and (ne .Values.Azure.Cluster.Distribution "aks_edge_k3s") (ne .Values.Azure.Cluster.Distribution "aks_edge_k8s")) }} - name: anchors-ubuntu hostPath: path: /usr/local/share/ca-certificates/ diff --git a/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-deployment.yaml b/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-deployment.yaml index 7278d7a94..1bf13e861 100644 --- a/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-deployment.yaml +++ b/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-deployment.yaml @@ -160,7 +160,7 @@ spec: - mountPath: /anchors/mariner name: anchors-mariner readOnly: true - {{- if or (ne .Values.AzureMonitorMetrics.ArcExtension true) (and (ne .Values.Azure.Distribution "aks_edge_k3s") (ne .Values.Azure.Distribution "aks_edge_k8s")) }} + {{- if or (ne .Values.AzureMonitorMetrics.ArcExtension true) (and (ne .Values.Azure.Cluster.Distribution "aks_edge_k3s") (ne .Values.Azure.Cluster.Distribution "aks_edge_k8s")) }} - mountPath: /anchors/ubuntu name: anchors-ubuntu readOnly: true @@ -289,7 +289,7 @@ spec: hostPath: path: /etc/pki/ca-trust/anchors/ type: DirectoryOrCreate - {{- if or (ne .Values.AzureMonitorMetrics.ArcExtension true) (and (ne .Values.Azure.Distribution "aks_edge_k3s") (ne .Values.Azure.Distribution "aks_edge_k8s")) }} + {{- if or (ne .Values.AzureMonitorMetrics.ArcExtension true) (and (ne .Values.Azure.Cluster.Distribution "aks_edge_k3s") (ne .Values.Azure.Cluster.Distribution "aks_edge_k8s")) }} - name: anchors-ubuntu hostPath: path: /usr/local/share/ca-certificates/ diff --git a/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-podmonitor-crd.yaml b/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-podmonitor-crd.yaml new file mode 100644 index 000000000..bb46f8e8d --- /dev/null +++ b/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-podmonitor-crd.yaml @@ -0,0 +1,424 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.11.1 + creationTimestamp: null + name: podmonitors.monitoring.coreos.com +spec: + group: monitoring.coreos.com + names: + categories: + - prometheus-operator + kind: PodMonitor + listKind: PodMonitorList + plural: podmonitors + shortNames: + - pmon + singular: podmonitor + scope: Namespaced + versions: + - name: v1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + attachMetadata: + properties: + node: + type: boolean + type: object + jobLabel: + type: string + labelLimit: + format: int64 + type: integer + labelNameLengthLimit: + format: int64 + type: integer + labelValueLengthLimit: + format: int64 + type: integer + namespaceSelector: + properties: + any: + type: boolean + matchNames: + items: + type: string + type: array + type: object + podMetricsEndpoints: + items: + properties: + authorization: + properties: + credentials: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: + type: string + type: object + basicAuth: + properties: + password: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + username: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + bearerTokenSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + enableHttp2: + type: boolean + filterRunning: + type: boolean + followRedirects: + type: boolean + honorLabels: + type: boolean + honorTimestamps: + type: boolean + interval: + pattern: ^(0|(([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?)$ + type: string + metricRelabelings: + items: + properties: + action: + default: replace + enum: + - replace + - Replace + - keep + - Keep + - drop + - Drop + - hashmod + - HashMod + - labelmap + - LabelMap + - labeldrop + - LabelDrop + - labelkeep + - LabelKeep + - lowercase + - Lowercase + - uppercase + - Uppercase + - keepequal + - KeepEqual + - dropequal + - DropEqual + type: string + modulus: + format: int64 + type: integer + regex: + type: string + replacement: + type: string + separator: + type: string + sourceLabels: + items: + pattern: ^[a-zA-Z_][a-zA-Z0-9_]*$ + type: string + type: array + targetLabel: + type: string + type: object + type: array + oauth2: + properties: + clientId: + properties: + configMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + secret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + clientSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + endpointParams: + additionalProperties: + type: string + type: object + scopes: + items: + type: string + type: array + tokenUrl: + minLength: 1 + type: string + required: + - clientId + - clientSecret + - tokenUrl + type: object + params: + additionalProperties: + items: + type: string + type: array + type: object + path: + type: string + port: + type: string + proxyUrl: + type: string + relabelings: + items: + properties: + action: + default: replace + enum: + - replace + - Replace + - keep + - Keep + - drop + - Drop + - hashmod + - HashMod + - labelmap + - LabelMap + - labeldrop + - LabelDrop + - labelkeep + - LabelKeep + - lowercase + - Lowercase + - uppercase + - Uppercase + - keepequal + - KeepEqual + - dropequal + - DropEqual + type: string + modulus: + format: int64 + type: integer + regex: + type: string + replacement: + type: string + separator: + type: string + sourceLabels: + items: + pattern: ^[a-zA-Z_][a-zA-Z0-9_]*$ + type: string + type: array + targetLabel: + type: string + type: object + type: array + scheme: + enum: + - http + - https + type: string + scrapeTimeout: + pattern: ^(0|(([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?)$ + type: string + targetPort: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + tlsConfig: + properties: + ca: + properties: + configMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + secret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + cert: + properties: + configMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + secret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + insecureSkipVerify: + type: boolean + keySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + serverName: + type: string + type: object + type: object + type: array + podTargetLabels: + items: + type: string + type: array + sampleLimit: + format: int64 + type: integer + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + targetLimit: + format: int64 + type: integer + required: + - podMetricsEndpoints + - selector + type: object + required: + - spec + type: object + served: true + storage: true \ No newline at end of file diff --git a/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-servicemonitor-crd.yaml b/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-servicemonitor-crd.yaml new file mode 100644 index 000000000..cd8d1c4cb --- /dev/null +++ b/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-servicemonitor-crd.yaml @@ -0,0 +1,435 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.11.1 + creationTimestamp: null + name: servicemonitors.monitoring.coreos.com +spec: + group: monitoring.coreos.com + names: + categories: + - prometheus-operator + kind: ServiceMonitor + listKind: ServiceMonitorList + plural: servicemonitors + shortNames: + - smon + singular: servicemonitor + scope: Namespaced + versions: + - name: v1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + attachMetadata: + properties: + node: + type: boolean + type: object + endpoints: + items: + properties: + authorization: + properties: + credentials: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: + type: string + type: object + basicAuth: + properties: + password: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + username: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + bearerTokenFile: + type: string + bearerTokenSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + enableHttp2: + type: boolean + filterRunning: + type: boolean + followRedirects: + type: boolean + honorLabels: + type: boolean + honorTimestamps: + type: boolean + interval: + pattern: ^(0|(([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?)$ + type: string + metricRelabelings: + items: + properties: + action: + default: replace + enum: + - replace + - Replace + - keep + - Keep + - drop + - Drop + - hashmod + - HashMod + - labelmap + - LabelMap + - labeldrop + - LabelDrop + - labelkeep + - LabelKeep + - lowercase + - Lowercase + - uppercase + - Uppercase + - keepequal + - KeepEqual + - dropequal + - DropEqual + type: string + modulus: + format: int64 + type: integer + regex: + type: string + replacement: + type: string + separator: + type: string + sourceLabels: + items: + pattern: ^[a-zA-Z_][a-zA-Z0-9_]*$ + type: string + type: array + targetLabel: + type: string + type: object + type: array + oauth2: + properties: + clientId: + properties: + configMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + secret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + clientSecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + endpointParams: + additionalProperties: + type: string + type: object + scopes: + items: + type: string + type: array + tokenUrl: + minLength: 1 + type: string + required: + - clientId + - clientSecret + - tokenUrl + type: object + params: + additionalProperties: + items: + type: string + type: array + type: object + path: + type: string + port: + type: string + proxyUrl: + type: string + relabelings: + items: + properties: + action: + default: replace + enum: + - replace + - Replace + - keep + - Keep + - drop + - Drop + - hashmod + - HashMod + - labelmap + - LabelMap + - labeldrop + - LabelDrop + - labelkeep + - LabelKeep + - lowercase + - Lowercase + - uppercase + - Uppercase + - keepequal + - KeepEqual + - dropequal + - DropEqual + type: string + modulus: + format: int64 + type: integer + regex: + type: string + replacement: + type: string + separator: + type: string + sourceLabels: + items: + pattern: ^[a-zA-Z_][a-zA-Z0-9_]*$ + type: string + type: array + targetLabel: + type: string + type: object + type: array + scheme: + enum: + - http + - https + type: string + scrapeTimeout: + pattern: ^(0|(([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?)$ + type: string + targetPort: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + tlsConfig: + properties: + ca: + properties: + configMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + secret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + caFile: + type: string + cert: + properties: + configMap: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + secret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + certFile: + type: string + insecureSkipVerify: + type: boolean + keyFile: + type: string + keySecret: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + serverName: + type: string + type: object + type: object + type: array + jobLabel: + type: string + labelLimit: + format: int64 + type: integer + labelNameLengthLimit: + format: int64 + type: integer + labelValueLengthLimit: + format: int64 + type: integer + namespaceSelector: + properties: + any: + type: boolean + matchNames: + items: + type: string + type: array + type: object + podTargetLabels: + items: + type: string + type: array + sampleLimit: + format: int64 + type: integer + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + targetLabels: + items: + type: string + type: array + targetLimit: + format: int64 + type: integer + required: + - endpoints + - selector + type: object + required: + - spec + type: object + served: true + storage: true \ No newline at end of file diff --git a/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-targetallocator-service.yaml b/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-targetallocator-service.yaml new file mode 100644 index 000000000..46f3aceeb --- /dev/null +++ b/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-targetallocator-service.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: Service +metadata: + labels: + component: ama-metrics-targetallocator + kubernetes.azure.com/managedby: aks + name: ama-metrics-targetallocator + namespace: kube-system +spec: + internalTrafficPolicy: Cluster + ipFamilies: + - IPv4 + ipFamilyPolicy: SingleStack + ports: + - name: targetallocation + port: 80 + protocol: TCP + targetPort: 8080 + selector: + rsName: ama-metrics-targetallocator + sessionAffinity: None + type: ClusterIP +status: + loadBalancer: {} diff --git a/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-targetallocator.yaml b/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-targetallocator.yaml new file mode 100644 index 000000000..327613cea --- /dev/null +++ b/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-targetallocator.yaml @@ -0,0 +1,171 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + component: ama-metrics-targetallocator + kubernetes.azure.com/managedby: aks + name: ama-metrics-targetallocator + namespace: kube-system +spec: + progressDeadlineSeconds: 600 + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + rsName: ama-metrics-targetallocator + strategy: + rollingUpdate: + maxSurge: 25% + maxUnavailable: 25% + type: RollingUpdate + template: + metadata: + creationTimestamp: null + labels: + rsName: ama-metrics-targetallocator + kubernetes.azure.com/managedby: aks + spec: + containers: + - args: + - --enable-prometheus-cr-watcher + env: + - name: OTELCOL_NAMESPACE + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.namespace + - name: NODE_IP + valueFrom: + fieldRef: + fieldPath: status.hostIP + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: CLUSTER + {{- if .Values.AzureMonitorMetrics.ArcExtension }} + value: "{{ .Values.Azure.Cluster.ResourceId }}" + {{- else }} + value: "{{ .Values.global.commonGlobals.Customer.AzureResourceID }}" + {{- end }} + image: "mcr.microsoft.com{{ .Values.AzureMonitorMetrics.ImageRepository }}:{{ .Values.AzureMonitorMetrics.ImageTagTargetAllocator }}" + imagePullPolicy: IfNotPresent + name: targetallocator + resources: + limits: + cpu: 500m + memory: 1Gi + requests: + cpu: 10m + memory: 50Mi + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /conf + name: ta-config-shared + livenessProbe: + httpGet: + path: /metrics + port: 8080 + initialDelaySeconds: 60 + periodSeconds: 3 + - name: config-reader + env: + - name: CLUSTER + {{- if .Values.AzureMonitorMetrics.ArcExtension }} + value: "{{ .Values.Azure.Cluster.ResourceId }}" + {{- else }} + value: "{{ .Values.global.commonGlobals.Customer.AzureResourceID }}" + {{- end }} + - name: AKSREGION + {{- if .Values.AzureMonitorMetrics.ArcExtension }} + value: "{{ .Values.Azure.Cluster.Region }}" + {{- else }} + value: "{{ .Values.global.commonGlobals.Region }}" + {{- end }} + - name: NODE_IP + valueFrom: + fieldRef: + fieldPath: status.hostIP + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: CONTAINER_TYPE + value: "ConfigReaderSidecar" + - name: MODE + value: "advanced" # only supported mode is 'advanced', any other value will be the default/non-advance mode + - name: MAC + value: "true" + - name: AZMON_COLLECT_ENV + value: "false" + - name: KUBE_STATE_NAME + value: ama-metrics-ksm + - name: NODE_EXPORTER_NAME + value: "" # Replace this with the node exporter shipped out of box with AKS + - name: NODE_EXPORTER_TARGETPORT + {{- if .Values.AzureMonitorMetrics.ArcExtension }} + value: "{{ index .Values "prometheus-node-exporter" "service" "targetPort" }}" + {{- else }} + value: "19100" + {{- end }} + - name: customEnvironment + {{- if .Values.AzureMonitorMetrics.ArcExtension }} + value: "{{ lower .Values.Azure.Cluster.Cloud }}" + {{- else if .Values.AzureMonitorMetrics.isArcACluster }} + value: "arcautonomous" + {{- else }} + value: "{{ lower .Values.global.commonGlobals.CloudEnvironment }}" + {{- end }} + - name: WINMODE + value: "" # WINDOWS: only supported mode is 'advanced', any other value will be the default/non-advance mode + - name: MINIMAL_INGESTION_PROFILE + value: "true" # only supported value is the string "true" + image: "mcr.microsoft.com{{ .Values.AzureMonitorMetrics.ImageRepository }}:{{ .Values.AzureMonitorMetrics.ImageTagCfg }}" + imagePullPolicy: IfNotPresent + resources: {} + volumeMounts: + - mountPath: /etc/config/settings + name: settings-vol-config + readOnly: true + - mountPath: /etc/config/settings/prometheus + name: prometheus-config-vol + readOnly: true + - mountPath: /ta-configuration + name: ta-config-shared + livenessProbe: + exec: + command: + - /bin/bash + - -c + - /opt/microsoft/liveness/livenessprobe-configreader.sh + initialDelaySeconds: 60 + periodSeconds: 15 + timeoutSeconds: 5 + failureThreshold: 3 + dnsPolicy: ClusterFirst + restartPolicy: Always + schedulerName: default-scheduler + securityContext: {} + serviceAccount: ama-metrics-serviceaccount + serviceAccountName: ama-metrics-serviceaccount + terminationGracePeriodSeconds: 30 + volumes: + - name: settings-vol-config + configMap: + name: ama-metrics-settings-configmap + optional: true + - name: prometheus-config-vol + configMap: + name: ama-metrics-prometheus-config + optional: true + - name: ta-config-shared + emptyDir: {} \ No newline at end of file diff --git a/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values-template.yaml b/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values-template.yaml index ce0f47f81..e994906e2 100644 --- a/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values-template.yaml +++ b/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values-template.yaml @@ -1,8 +1,8 @@ AzureMonitorMetrics: KubeStateMetrics: # Uncomment the below 2 settings if you want to pass in the labels and/or annotations - #MetricLabelsAllowlist: "testlabel=[.*]" - #MetricAnnotationsAllowList: "" + # MetricLabelsAllowlist: "*=[*]" + # MetricAnnotationsAllowList: "pods=[*],nodes=[*]" ImageRepository: "/oss/kubernetes/kube-state-metrics" # Kube-state-metrics ImageTag - 2.9.2, corresponds to chart version - 5.10.1 ImageTag: "v2.9.2" @@ -38,6 +38,8 @@ AzureMonitorMetrics: ImageRepository: ${MCR_REPOSITORY} ImageTag: ${IMAGE_TAG} ImageTagWin: ${IMAGE_TAG}-win + ImageTagTargetAllocator: ${IMAGE_TAG}-targetallocator + ImageTagCfg: ${IMAGE_TAG}-cfg # The below 2 settings are not Azure Monitor Metrics adapter chart. They are substituted in a different manner. # Please update these with the latest ones from here so that you get the image that is currently deployed by the AKS RP - # Repository: https://msazure.visualstudio.com/CloudNativeCompute/_git/aks-rp?path=/ccp/charts/addon-charts/azure-monitor-metrics-addon/templates/ama-metrics-daemonset.yaml&version=GBrashmi/prom-addon-arm64&line=136&lineEnd=136&lineStartColumn=56&lineEndColumn=85&lineStyle=plain&_a=contents diff --git a/otelcollector/fluent-bit/fluent-bit-daemonset.conf b/otelcollector/fluent-bit/fluent-bit-daemonset.conf index 7317bc0c8..cb90396b2 100644 --- a/otelcollector/fluent-bit/fluent-bit-daemonset.conf +++ b/otelcollector/fluent-bit/fluent-bit-daemonset.conf @@ -38,6 +38,32 @@ Skip_Long_Lines On Ignore_Older 2m +# targetallocator targetallocator container logs +[INPUT] + Name tail + Tag prometheus.log.targetallocator.tacontainer + Path /var/log/containers/ama-metrics-*targetallocator*kube-system*targetallocator*.log + DB /var/opt/microsoft/state/prometheus-collector-ai.db + DB.Sync Off + Parser cri + Read_from_Head true + Mem_Buf_Limit 1m + Path_Key filepath + Skip_Long_Lines On + +# targetallocator config-reader container logs +[INPUT] + Name tail + Tag prometheus.log.targetallocator.configreader + Path /var/log/containers/ama-metrics-*targetallocator*kube-system*config-reader*.log + DB /var/opt/microsoft/state/prometheus-collector-ai.db + DB.Sync Off + Parser cri + Read_from_Head true + Mem_Buf_Limit 1m + Path_Key filepath + Skip_Long_Lines On + # addon-token-adapter container logs [INPUT] Name tail diff --git a/otelcollector/fluent-bit/src/out_appinsights.go b/otelcollector/fluent-bit/src/out_appinsights.go index 6162f47f2..710ee4c00 100644 --- a/otelcollector/fluent-bit/src/out_appinsights.go +++ b/otelcollector/fluent-bit/src/out_appinsights.go @@ -44,7 +44,7 @@ func FLBPluginInit(ctx unsafe.Pointer) int { } if strings.ToLower(os.Getenv(envControllerType)) == "daemonset" && strings.ToLower(os.Getenv("OS_TYPE")) == "linux" { - go SendKsmCpuMemoryToAppInsightsMetrics() + go SendContainersCpuMemoryToAppInsightsMetrics() } go PushMEProcessedAndReceivedCountToAppInsightsMetrics() diff --git a/otelcollector/fluent-bit/src/telemetry.go b/otelcollector/fluent-bit/src/telemetry.go index bbc9b94cc..ecc7f295f 100644 --- a/otelcollector/fluent-bit/src/telemetry.go +++ b/otelcollector/fluent-bit/src/telemetry.go @@ -351,20 +351,21 @@ func SendCoreCountToAppInsightsMetrics() { // Struct for getting relevant fields from JSON object obtained from cadvisor endpoint type CadvisorJson struct { Pods []struct { - Containers []struct { - Name string `json:"name"` - Cpu struct { - UsageNanoCores float64 `json:"usageNanoCores"` - } `json:"cpu"` - Memory struct { - RssBytes float64 `json:"rssBytes"` - } `json:"memory"` - } `json:"containers"` + Containers []Container `json:"containers"` } `json:"pods"` } +type Container struct { + Name string `json:"name"` + Cpu struct { + UsageNanoCores float64 `json:"usageNanoCores"` + } `json:"cpu"` + Memory struct { + RssBytes float64 `json:"rssBytes"` + } `json:"memory"` +} -// Send Cpu and Memory Usage for Kube state metrics to Application Insights periodically -func SendKsmCpuMemoryToAppInsightsMetrics() { +// Send Cpu and Memory Usage for our containers to Application Insights periodically +func SendContainersCpuMemoryToAppInsightsMetrics() { var p CadvisorJson err := json.Unmarshal(retrieveKsmData(), &p) @@ -376,31 +377,41 @@ func SendKsmCpuMemoryToAppInsightsMetrics() { ksmTelemetryTicker := time.NewTicker(time.Second * time.Duration(ksmAttachedTelemetryIntervalSeconds)) for ; true; <-ksmTelemetryTicker.C { - cpuKsmUsageNanoCoresLinux := float64(0) - memoryKsmRssBytesLinux := float64(0) - for podId := 0; podId < len(p.Pods); podId++ { for containerId := 0; containerId < len(p.Pods[podId].Containers); containerId++ { - if strings.TrimSpace(p.Pods[podId].Containers[containerId].Name) == "" { + container := p.Pods[podId].Containers[containerId] + containerName := strings.TrimSpace(container.Name) + + switch containerName { + case "": message := fmt.Sprintf("Container name is missing") Log(message) continue - } - if strings.TrimSpace(p.Pods[podId].Containers[containerId].Name) == "ama-metrics-ksm" { - cpuKsmUsageNanoCoresLinux += p.Pods[podId].Containers[containerId].Cpu.UsageNanoCores - memoryKsmRssBytesLinux += p.Pods[podId].Containers[containerId].Memory.RssBytes + case "ama-metrics-ksm": + GetAndSendContainerCPUandMemoryFromCadvisorJSON(container, ksmCpuMemoryTelemetryName, "MemKsmRssBytes") + case "ta-container": + GetAndSendContainerCPUandMemoryFromCadvisorJSON(container, "taCPUUsage", "taMemRssBytes") + case "config-reader": + GetAndSendContainerCPUandMemoryFromCadvisorJSON(container, "cnfgRdrCPUUsage", "cnfgRdrMemRssBytes") } } } - // Send metric to app insights for Cpu and Memory Usage for Kube state metrics - metricTelemetryItem := appinsights.NewMetricTelemetry(ksmCpuMemoryTelemetryName, cpuKsmUsageNanoCoresLinux) + } +} - // Abbreviated properties to save telemetry cost - metricTelemetryItem.Properties["MemKsmRssBytesLinux"] = fmt.Sprintf("%d", memoryKsmRssBytesLinux) +func GetAndSendContainerCPUandMemoryFromCadvisorJSON(container Container, cpuMetricName string, memMetricName string) { + cpuUsageNanoCoresLinux := container.Cpu.UsageNanoCores + memoryRssBytesLinux := container.Memory.RssBytes - TelemetryClient.Track(metricTelemetryItem) - } + // Send metric to app insights for Cpu and Memory Usage for Kube state metrics + metricTelemetryItem := appinsights.NewMetricTelemetry(cpuMetricName, cpuUsageNanoCoresLinux) + + // Abbreviated properties to save telemetry cost + metricTelemetryItem.Properties[memMetricName] = fmt.Sprintf("%d", int(memoryRssBytesLinux)) + + TelemetryClient.Track(metricTelemetryItem) + Log(fmt.Sprintf("Sent container CPU and Mem data for %s", cpuMetricName)) } // Retrieve the JSON payload of Kube state metrics from Cadvisor endpoint @@ -466,12 +477,13 @@ func PushLogErrorsToAppInsightsTraces(records []map[interface{}]interface{}, sev for _, record := range records { var logEntry = "" - // Logs have different parsed formats depending on if they're from otelcollector or metricsextension + // Logs have different parsed formats depending on if they're from otelcollector or container logs if tag == fluentbitOtelCollectorLogsTag { logEntry = fmt.Sprintf("%s %s", ToString(record["caller"]), ToString(record["msg"])) - } else if tag == fluentbitContainerLogsTag { + } else { logEntry = ToString(record["log"]) } + logLines = append(logLines, logEntry) } @@ -676,9 +688,10 @@ func UpdateMEReceivedMetricsCount(records []map[interface{}]interface{}) int { // Add to the total that PublishTimeseriesVolume() uses if strings.ToLower(os.Getenv(envPrometheusCollectorHealth)) == "true" { - TimeseriesVolumeMutex.Lock() + TimeseriesVolumeMutex.Lock() TimeseriesReceivedTotal += metricsReceivedCount TimeseriesVolumeMutex.Unlock() + } } diff --git a/otelcollector/opentelemetry-collector-builder/Makefile b/otelcollector/opentelemetry-collector-builder/Makefile index ccc642a30..cfc516b02 100644 --- a/otelcollector/opentelemetry-collector-builder/Makefile +++ b/otelcollector/opentelemetry-collector-builder/Makefile @@ -1,4 +1,4 @@ -all: otelcollector fluentbitplugin promconfigvalidator +all: otelcollector fluentbitplugin promconfigvalidator targetallocator .PHONY: otelcollector otelcollector: @@ -10,4 +10,10 @@ fluentbitplugin: make -C ../fluent-bit/src promconfigvalidator: - make -C ../prom-config-validator-builder \ No newline at end of file + make -C ../prom-config-validator-builder + +targetallocator: + make -C ../opentelemetry-operator/cmd/otel-allocator + +configurationreader: + make -C ../configuration-reader-builder \ No newline at end of file diff --git a/otelcollector/opentelemetry-collector-builder/collector-config-default.yml b/otelcollector/opentelemetry-collector-builder/collector-config-default.yml index 9f63a58be..85e59878b 100644 --- a/otelcollector/opentelemetry-collector-builder/collector-config-default.yml +++ b/otelcollector/opentelemetry-collector-builder/collector-config-default.yml @@ -33,7 +33,10 @@ receivers: scrape_configs: # scrape_configs must be non-null for collector to start - job_name: empty_job +extensions: + health_check: service: + extensions: [health_check] pipelines: metrics: receivers: [prometheus] @@ -41,7 +44,7 @@ service: processors: [batch,resource] telemetry: logs: - level: warn + level: debug encoding: json metrics: level: detailed diff --git a/otelcollector/opentelemetry-collector-builder/collector-config-replicaset.yml b/otelcollector/opentelemetry-collector-builder/collector-config-replicaset.yml new file mode 100644 index 000000000..df4e52a73 --- /dev/null +++ b/otelcollector/opentelemetry-collector-builder/collector-config-replicaset.yml @@ -0,0 +1,50 @@ +exporters: + prometheus: + endpoint: "127.0.0.1:9091" + const_labels: + cluster: $AZMON_CLUSTER_LABEL + otlp: + endpoint: 127.0.0.1:55680 + tls: + insecure: true + compression: "gzip" + retry_on_failure: + enabled: false + timeout: 12s +processors: + batch: + send_batch_size: 7000 + timeout: 200ms + send_batch_max_size: 7000 + resource: + attributes: + - key: cluster + value: "$AZMON_CLUSTER_LABEL" + action: "upsert" + - key: job + from_attribute: service.name + action: insert + - key: instance + from_attribute: service.instance.id + action: insert +receivers: + prometheus: + target_allocator: + endpoint: http://ama-metrics-targetallocator.kube-system.svc.cluster.local + interval: 30s + collector_id: "$POD_NAME" +extensions: + health_check: +service: + extensions: [health_check] + pipelines: + metrics: + receivers: [prometheus] + exporters: [otlp] + processors: [batch,resource] + telemetry: + logs: + level: debug + encoding: json + metrics: + level: detailed diff --git a/otelcollector/opentelemetry-collector-builder/collector-config-template.yml b/otelcollector/opentelemetry-collector-builder/collector-config-template.yml index 7276ee8c1..a06fd95d6 100644 --- a/otelcollector/opentelemetry-collector-builder/collector-config-template.yml +++ b/otelcollector/opentelemetry-collector-builder/collector-config-template.yml @@ -32,7 +32,10 @@ processors: receivers: prometheus: config: +extensions: + health_check: service: + extensions: [health_check] pipelines: metrics: receivers: [prometheus] @@ -40,7 +43,7 @@ service: processors: [batch, resource] telemetry: logs: - level: warn + level: debug encoding: json metrics: level: detailed diff --git a/otelcollector/opentelemetry-collector-builder/components.go b/otelcollector/opentelemetry-collector-builder/components.go index 27be07c5e..a631b7897 100644 --- a/otelcollector/opentelemetry-collector-builder/components.go +++ b/otelcollector/opentelemetry-collector-builder/components.go @@ -22,6 +22,7 @@ import ( "go.opentelemetry.io/collector/extension" "go.opentelemetry.io/collector/extension/zpagesextension" "go.opentelemetry.io/collector/receiver" + "github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension" ) func components() (otelcol.Factories, error) { @@ -31,6 +32,7 @@ func components() (otelcol.Factories, error) { factories.Extensions, err = extension.MakeFactoryMap( pprofextension.NewFactory(), zpagesextension.NewFactory(), + healthcheckextension.NewFactory(), ) if err != nil { return otelcol.Factories{}, err diff --git a/otelcollector/opentelemetry-collector-builder/go.mod b/otelcollector/opentelemetry-collector-builder/go.mod index c9140fd08..21853931b 100644 --- a/otelcollector/opentelemetry-collector-builder/go.mod +++ b/otelcollector/opentelemetry-collector-builder/go.mod @@ -8,6 +8,7 @@ require ( github.com/gracewehner/prometheusreceiver v0.0.0-00010101000000-000000000000 github.com/open-telemetry/opentelemetry-collector-contrib/exporter/fileexporter v0.74.0 github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusexporter v0.74.0 + github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.74.0 github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.74.0 github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor v0.74.0 go.opentelemetry.io/collector v0.74.0 @@ -16,13 +17,9 @@ require ( go.opentelemetry.io/collector/exporter v0.74.0 go.opentelemetry.io/collector/exporter/loggingexporter v0.73.0 go.opentelemetry.io/collector/exporter/otlpexporter v0.73.0 - go.opentelemetry.io/collector/exporter/otlphttpexporter v0.74.0 - go.opentelemetry.io/collector/extension/ballastextension v0.74.0 go.opentelemetry.io/collector/extension/zpagesextension v0.74.0 - go.opentelemetry.io/collector/processor/batchprocessor v0.73.0 - go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.74.0 + go.opentelemetry.io/collector/processor/batchprocessor v0.74.0 go.opentelemetry.io/collector/receiver v0.74.0 - go.opentelemetry.io/collector/receiver/otlpreceiver v0.74.0 ) require ( @@ -40,7 +37,7 @@ require ( github.com/Azure/go-autorest/tracing v0.6.0 // indirect github.com/Microsoft/go-winio v0.5.1 // indirect github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 // indirect - github.com/armon/go-metrics v0.3.10 // indirect + github.com/armon/go-metrics v0.4.0 // indirect github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d // indirect github.com/aws/aws-sdk-go v1.44.220 // indirect github.com/beorn7/perks v1.0.1 // indirect @@ -97,8 +94,9 @@ require ( github.com/hashicorp/cronexpr v1.1.1 // indirect github.com/hashicorp/errwrap v1.0.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect - github.com/hashicorp/go-hclog v1.3.1 // indirect + github.com/hashicorp/go-hclog v1.4.0 // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect + github.com/hashicorp/go-msgpack v0.5.5 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-retryablehttp v0.7.1 // indirect github.com/hashicorp/go-rootcerts v1.0.2 // indirect @@ -109,6 +107,7 @@ require ( github.com/imdario/mergo v0.3.12 // indirect github.com/inconshreveable/mousetrap v1.0.1 // indirect github.com/ionos-cloud/sdk-go/v6 v6.1.3 // indirect + github.com/jaegertracing/jaeger v1.41.0 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/jpillora/backoff v1.0.0 // indirect @@ -121,12 +120,13 @@ require ( github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-colorable v0.1.12 // indirect - github.com/mattn/go-isatty v0.0.14 // indirect + github.com/mattn/go-isatty v0.0.16 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/miekg/dns v1.1.50 // indirect github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/hashstructure/v2 v2.0.2 // indirect + github.com/cnf/structhash v0.0.0-20201127153200-e1b16c1ebc08 //indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mitchellh/reflectwalk v1.0.2 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect @@ -135,6 +135,7 @@ require ( github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f // indirect github.com/oklog/ulid v1.3.1 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter v0.74.0 // indirect github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.74.0 // indirect github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent v0.74.0 // indirect github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.74.0 // indirect @@ -143,7 +144,6 @@ require ( github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.0.2 // indirect github.com/ovh/go-ovh v1.3.0 // indirect - github.com/pelletier/go-toml v1.9.4 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect @@ -157,7 +157,6 @@ require ( github.com/prometheus/procfs v0.8.0 // indirect github.com/prometheus/prometheus v0.42.1-0.20230210113933-af1d9e01c7e4 // indirect github.com/prometheus/statsd_exporter v0.22.7 // indirect - github.com/rogpeppe/go-internal v1.8.0 // indirect github.com/rs/cors v1.8.3 // indirect github.com/scaleway/scaleway-sdk-go v1.0.0-beta.12 // indirect github.com/shirou/gopsutil/v3 v3.23.2 // indirect @@ -208,7 +207,7 @@ require ( google.golang.org/grpc v1.53.0 // indirect google.golang.org/protobuf v1.29.1 // indirect gopkg.in/inf.v0 v0.9.1 // indirect - gopkg.in/ini.v1 v1.66.6 // indirect + gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/otelcollector/opentelemetry-collector-builder/go.sum b/otelcollector/opentelemetry-collector-builder/go.sum index 0fb771e99..78f017b17 100644 --- a/otelcollector/opentelemetry-collector-builder/go.sum +++ b/otelcollector/opentelemetry-collector-builder/go.sum @@ -3,6 +3,7 @@ cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= @@ -13,33 +14,517 @@ cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKV cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= +cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= +cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= +cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= +cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= +cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= +cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= +cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= +cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= +cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= +cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= +cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= +cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= +cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= +cloud.google.com/go v0.100.1/go.mod h1:fs4QogzfH5n2pBXBP9vRiU+eCny7lD2vmFZy79Iuw1U= +cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= +cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= +cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= +cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= +cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM= +cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I= cloud.google.com/go v0.110.0 h1:Zc8gqp3+a9/Eyph2KDmcGaPtbKRIoqq4YTlL4NMD0Ys= +cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= +cloud.google.com/go/accessapproval v1.4.0/go.mod h1:zybIuC3KpDOvotz59lFe5qxRZx6C75OtwbisN56xYB4= +cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw= +cloud.google.com/go/accessapproval v1.6.0/go.mod h1:R0EiYnwV5fsRFiKZkPHr6mwyk2wxUJ30nL4j2pcFY2E= +cloud.google.com/go/accesscontextmanager v1.3.0/go.mod h1:TgCBehyr5gNMz7ZaH9xubp+CE8dkrszb4oK9CWyvD4o= +cloud.google.com/go/accesscontextmanager v1.4.0/go.mod h1:/Kjh7BBu/Gh83sv+K60vN9QE5NJcd80sU33vIe2IFPE= +cloud.google.com/go/accesscontextmanager v1.6.0/go.mod h1:8XCvZWfYw3K/ji0iVnp+6pu7huxoQTLmxAbVjbloTtM= +cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= +cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= +cloud.google.com/go/aiplatform v1.27.0/go.mod h1:Bvxqtl40l0WImSb04d0hXFU7gDOiq9jQmorivIiWcKg= +cloud.google.com/go/aiplatform v1.35.0/go.mod h1:7MFT/vCaOyZT/4IIFfxH4ErVg/4ku6lKv3w0+tFTgXQ= +cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= +cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= +cloud.google.com/go/analytics v0.17.0/go.mod h1:WXFa3WSym4IZ+JiKmavYdJwGG/CvpqiqczmL59bTD9M= +cloud.google.com/go/apigateway v1.3.0/go.mod h1:89Z8Bhpmxu6AmUxuVRg/ECRGReEdiP3vQtk4Z1J9rJk= +cloud.google.com/go/apigateway v1.4.0/go.mod h1:pHVY9MKGaH9PQ3pJ4YLzoj6U5FUDeDFBllIz7WmzJoc= +cloud.google.com/go/apigateway v1.5.0/go.mod h1:GpnZR3Q4rR7LVu5951qfXPJCHquZt02jf7xQx7kpqN8= +cloud.google.com/go/apigeeconnect v1.3.0/go.mod h1:G/AwXFAKo0gIXkPTVfZDd2qA1TxBXJ3MgMRBQkIi9jc= +cloud.google.com/go/apigeeconnect v1.4.0/go.mod h1:kV4NwOKqjvt2JYR0AoIWo2QGfoRtn/pkS3QlHp0Ni04= +cloud.google.com/go/apigeeconnect v1.5.0/go.mod h1:KFaCqvBRU6idyhSNyn3vlHXc8VMDJdRmwDF6JyFRqZ8= +cloud.google.com/go/apigeeregistry v0.4.0/go.mod h1:EUG4PGcsZvxOXAdyEghIdXwAEi/4MEaoqLMLDMIwKXY= +cloud.google.com/go/apigeeregistry v0.5.0/go.mod h1:YR5+s0BVNZfVOUkMa5pAR2xGd0A473vA5M7j247o1wM= +cloud.google.com/go/apikeys v0.4.0/go.mod h1:XATS/yqZbaBK0HOssf+ALHp8jAlNHUgyfprvNcBIszU= +cloud.google.com/go/apikeys v0.5.0/go.mod h1:5aQfwY4D+ewMMWScd3hm2en3hCj+BROlyrt3ytS7KLI= +cloud.google.com/go/appengine v1.4.0/go.mod h1:CS2NhuBuDXM9f+qscZ6V86m1MIIqPj3WC/UoEuR1Sno= +cloud.google.com/go/appengine v1.5.0/go.mod h1:TfasSozdkFI0zeoxW3PTBLiNqRmzraodCWatWI9Dmak= +cloud.google.com/go/appengine v1.6.0/go.mod h1:hg6i0J/BD2cKmDJbaFSYHFyZkgBEfQrDg/X0V5fJn84= +cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= +cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= +cloud.google.com/go/area120 v0.7.0/go.mod h1:a3+8EUD1SX5RUcCs3MY5YasiO1z6yLiNLRiFrykbynY= +cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= +cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= +cloud.google.com/go/artifactregistry v1.8.0/go.mod h1:w3GQXkJX8hiKN0v+at4b0qotwijQbYUqF2GWkZzAhC0= +cloud.google.com/go/artifactregistry v1.9.0/go.mod h1:2K2RqvA2CYvAeARHRkLDhMDJ3OXy26h3XW+3/Jh2uYc= +cloud.google.com/go/artifactregistry v1.11.1/go.mod h1:lLYghw+Itq9SONbCa1YWBoWs1nOucMH0pwXN1rOBZFI= +cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= +cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= +cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= +cloud.google.com/go/asset v1.9.0/go.mod h1:83MOE6jEJBMqFKadM9NLRcs80Gdw76qGuHn8m3h8oHQ= +cloud.google.com/go/asset v1.10.0/go.mod h1:pLz7uokL80qKhzKr4xXGvBQXnzHn5evJAEAtZiIb0wY= +cloud.google.com/go/asset v1.11.1/go.mod h1:fSwLhbRvC9p9CXQHJ3BgFeQNM4c9x10lqlrdEUYXlJo= +cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= +cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= +cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= +cloud.google.com/go/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo= +cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= +cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E= +cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= +cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= +cloud.google.com/go/automl v1.7.0/go.mod h1:RL9MYCCsJEOmt0Wf3z9uzG0a7adTT1fe+aObgSpkCt8= +cloud.google.com/go/automl v1.8.0/go.mod h1:xWx7G/aPEe/NP+qzYXktoBSDfjO+vnKMGgsApGJJquM= +cloud.google.com/go/automl v1.12.0/go.mod h1:tWDcHDp86aMIuHmyvjuKeeHEGq76lD7ZqfGLN6B0NuU= +cloud.google.com/go/baremetalsolution v0.3.0/go.mod h1:XOrocE+pvK1xFfleEnShBlNAXf+j5blPPxrhjKgnIFc= +cloud.google.com/go/baremetalsolution v0.4.0/go.mod h1:BymplhAadOO/eBa7KewQ0Ppg4A4Wplbn+PsFKRLo0uI= +cloud.google.com/go/baremetalsolution v0.5.0/go.mod h1:dXGxEkmR9BMwxhzBhV0AioD0ULBmuLZI8CdwalUxuss= +cloud.google.com/go/batch v0.3.0/go.mod h1:TR18ZoAekj1GuirsUsR1ZTKN3FC/4UDnScjT8NXImFE= +cloud.google.com/go/batch v0.4.0/go.mod h1:WZkHnP43R/QCGQsZ+0JyG4i79ranE2u8xvjq/9+STPE= +cloud.google.com/go/batch v0.7.0/go.mod h1:vLZN95s6teRUqRQ4s3RLDsH8PvboqBK+rn1oevL159g= +cloud.google.com/go/beyondcorp v0.2.0/go.mod h1:TB7Bd+EEtcw9PCPQhCJtJGjk/7TC6ckmnSFS+xwTfm4= +cloud.google.com/go/beyondcorp v0.3.0/go.mod h1:E5U5lcrcXMsCuoDNyGrpyTm/hn7ne941Jz2vmksAxW8= +cloud.google.com/go/beyondcorp v0.4.0/go.mod h1:3ApA0mbhHx6YImmuubf5pyW8srKnCEPON32/5hj+RmM= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= +cloud.google.com/go/bigquery v1.43.0/go.mod h1:ZMQcXHsl+xmU1z36G2jNGZmKp9zNY5BUua5wDgmNCfw= +cloud.google.com/go/bigquery v1.44.0/go.mod h1:0Y33VqXTEsbamHJvJHdFmtqHvMIY28aK1+dFsvaChGc= +cloud.google.com/go/bigquery v1.47.0/go.mod h1:sA9XOgy0A8vQK9+MWhEQTY6Tix87M/ZurWFIxmF9I/E= +cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= +cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= +cloud.google.com/go/billing v1.6.0/go.mod h1:WoXzguj+BeHXPbKfNWkqVtDdzORazmCjraY+vrxcyvI= +cloud.google.com/go/billing v1.7.0/go.mod h1:q457N3Hbj9lYwwRbnlD7vUpyjq6u5U1RAOArInEiD5Y= +cloud.google.com/go/billing v1.12.0/go.mod h1:yKrZio/eu+okO/2McZEbch17O5CB5NpZhhXG6Z766ss= +cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= +cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= +cloud.google.com/go/binaryauthorization v1.3.0/go.mod h1:lRZbKgjDIIQvzYQS1p99A7/U1JqvqeZg0wiI5tp6tg0= +cloud.google.com/go/binaryauthorization v1.4.0/go.mod h1:tsSPQrBd77VLplV70GUhBf/Zm3FsKmgSqgm4UmiDItk= +cloud.google.com/go/binaryauthorization v1.5.0/go.mod h1:OSe4OU1nN/VswXKRBmciKpo9LulY41gch5c68htf3/Q= +cloud.google.com/go/certificatemanager v1.3.0/go.mod h1:n6twGDvcUBFu9uBgt4eYvvf3sQ6My8jADcOVwHmzadg= +cloud.google.com/go/certificatemanager v1.4.0/go.mod h1:vowpercVFyqs8ABSmrdV+GiFf2H/ch3KyudYQEMM590= +cloud.google.com/go/certificatemanager v1.6.0/go.mod h1:3Hh64rCKjRAX8dXgRAyOcY5vQ/fE1sh8o+Mdd6KPgY8= +cloud.google.com/go/channel v1.8.0/go.mod h1:W5SwCXDJsq/rg3tn3oG0LOxpAo6IMxNa09ngphpSlnk= +cloud.google.com/go/channel v1.9.0/go.mod h1:jcu05W0my9Vx4mt3/rEHpfxc9eKi9XwsdDL8yBMbKUk= +cloud.google.com/go/channel v1.11.0/go.mod h1:IdtI0uWGqhEeatSB62VOoJ8FSUhJ9/+iGkJVqp74CGE= +cloud.google.com/go/cloudbuild v1.3.0/go.mod h1:WequR4ULxlqvMsjDEEEFnOG5ZSRSgWOywXYDb1vPE6U= +cloud.google.com/go/cloudbuild v1.4.0/go.mod h1:5Qwa40LHiOXmz3386FrjrYM93rM/hdRr7b53sySrTqA= +cloud.google.com/go/cloudbuild v1.6.0/go.mod h1:UIbc/w9QCbH12xX+ezUsgblrWv+Cv4Tw83GiSMHOn9M= +cloud.google.com/go/clouddms v1.3.0/go.mod h1:oK6XsCDdW4Ib3jCCBugx+gVjevp2TMXFtgxvPSee3OM= +cloud.google.com/go/clouddms v1.4.0/go.mod h1:Eh7sUGCC+aKry14O1NRljhjyrr0NFC0G2cjwX0cByRk= +cloud.google.com/go/clouddms v1.5.0/go.mod h1:QSxQnhikCLUw13iAbffF2CZxAER3xDGNHjsTAkQJcQA= +cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= +cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= +cloud.google.com/go/cloudtasks v1.7.0/go.mod h1:ImsfdYWwlWNJbdgPIIGJWC+gemEGTBK/SunNQQNCAb4= +cloud.google.com/go/cloudtasks v1.8.0/go.mod h1:gQXUIwCSOI4yPVK7DgTVFiiP0ZW/eQkydWzwVMdHxrI= +cloud.google.com/go/cloudtasks v1.9.0/go.mod h1:w+EyLsVkLWHcOaqNEyvcKAsWp9p29dL6uL9Nst1cI7Y= +cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= +cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= +cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= +cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= +cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= +cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= +cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= +cloud.google.com/go/compute v1.12.0/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= +cloud.google.com/go/compute v1.12.1/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= +cloud.google.com/go/compute v1.13.0/go.mod h1:5aPTS0cUNMIc1CE546K+Th6weJUNQErARyZtRXDJ8GE= +cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo= +cloud.google.com/go/compute v1.15.1/go.mod h1:bjjoF/NtFUrkD/urWfdHaKuOPDR5nWIs63rR+SXhcpA= cloud.google.com/go/compute v1.18.0 h1:FEigFqoDbys2cvFkZ9Fjq4gnHBP55anJ0yQyau2f9oY= cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= +cloud.google.com/go/compute/metadata v0.1.0/go.mod h1:Z1VN+bulIf6bt4P/C37K4DyZYZEXYonfTBHHFPO/4UU= +cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= +cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= +cloud.google.com/go/contactcenterinsights v1.3.0/go.mod h1:Eu2oemoePuEFc/xKFPjbTuPSj0fYJcPls9TFlPNnHHY= +cloud.google.com/go/contactcenterinsights v1.4.0/go.mod h1:L2YzkGbPsv+vMQMCADxJoT9YiTTnSEd6fEvCeHTYVck= +cloud.google.com/go/contactcenterinsights v1.6.0/go.mod h1:IIDlT6CLcDoyv79kDv8iWxMSTZhLxSCofVV5W6YFM/w= +cloud.google.com/go/container v1.6.0/go.mod h1:Xazp7GjJSeUYo688S+6J5V+n/t+G5sKBTFkKNudGRxg= +cloud.google.com/go/container v1.7.0/go.mod h1:Dp5AHtmothHGX3DwwIHPgq45Y8KmNsgN3amoYfxVkLo= +cloud.google.com/go/container v1.13.1/go.mod h1:6wgbMPeQRw9rSnKBCAJXnds3Pzj03C4JHamr8asWKy4= +cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= +cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= +cloud.google.com/go/containeranalysis v0.7.0/go.mod h1:9aUL+/vZ55P2CXfuZjS4UjQ9AgXoSw8Ts6lemfmxBxI= +cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= +cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= +cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= +cloud.google.com/go/datacatalog v1.7.0/go.mod h1:9mEl4AuDYWw81UGc41HonIHH7/sn52H0/tc8f8ZbZIE= +cloud.google.com/go/datacatalog v1.8.0/go.mod h1:KYuoVOv9BM8EYz/4eMFxrr4DUKhGIOXxZoKYF5wdISM= +cloud.google.com/go/datacatalog v1.8.1/go.mod h1:RJ58z4rMp3gvETA465Vg+ag8BGgBdnRPEMMSTr5Uv+M= +cloud.google.com/go/datacatalog v1.12.0/go.mod h1:CWae8rFkfp6LzLumKOnmVh4+Zle4A3NXLzVJ1d1mRm0= +cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= +cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= +cloud.google.com/go/dataflow v0.8.0/go.mod h1:Rcf5YgTKPtQyYz8bLYhFoIV/vP39eL7fWNcSOyFfLJE= +cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= +cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= +cloud.google.com/go/dataform v0.5.0/go.mod h1:GFUYRe8IBa2hcomWplodVmUx/iTL0FrsauObOM3Ipr0= +cloud.google.com/go/dataform v0.6.0/go.mod h1:QPflImQy33e29VuapFdf19oPbE4aYTJxr31OAPV+ulA= +cloud.google.com/go/datafusion v1.4.0/go.mod h1:1Zb6VN+W6ALo85cXnM1IKiPw+yQMKMhB9TsTSRDo/38= +cloud.google.com/go/datafusion v1.5.0/go.mod h1:Kz+l1FGHB0J+4XF2fud96WMmRiq/wj8N9u007vyXZ2w= +cloud.google.com/go/datafusion v1.6.0/go.mod h1:WBsMF8F1RhSXvVM8rCV3AeyWVxcC2xY6vith3iw3S+8= +cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= +cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= +cloud.google.com/go/datalabeling v0.7.0/go.mod h1:WPQb1y08RJbmpM3ww0CSUAGweL0SxByuW2E+FU+wXcM= +cloud.google.com/go/dataplex v1.3.0/go.mod h1:hQuRtDg+fCiFgC8j0zV222HvzFQdRd+SVX8gdmFcZzA= +cloud.google.com/go/dataplex v1.4.0/go.mod h1:X51GfLXEMVJ6UN47ESVqvlsRplbLhcsAt0kZCCKsU0A= +cloud.google.com/go/dataplex v1.5.2/go.mod h1:cVMgQHsmfRoI5KFYq4JtIBEUbYwc3c7tXmIDhRmNNVQ= +cloud.google.com/go/dataproc v1.7.0/go.mod h1:CKAlMjII9H90RXaMpSxQ8EU6dQx6iAYNPcYPOkSbi8s= +cloud.google.com/go/dataproc v1.8.0/go.mod h1:5OW+zNAH0pMpw14JVrPONsxMQYMBqJuzORhIBfBn9uI= +cloud.google.com/go/dataproc v1.12.0/go.mod h1:zrF3aX0uV3ikkMz6z4uBbIKyhRITnxvr4i3IjKsKrw4= +cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= +cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= +cloud.google.com/go/dataqna v0.7.0/go.mod h1:Lx9OcIIeqCrw1a6KdO3/5KMP1wAmTc0slZWwP12Qq3c= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/datastore v1.10.0/go.mod h1:PC5UzAmDEkAmkfaknstTYbNpgE49HAgW2J1gcgUfmdM= +cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= +cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= +cloud.google.com/go/datastream v1.4.0/go.mod h1:h9dpzScPhDTs5noEMQVWP8Wx8AFBRyS0s8KWPx/9r0g= +cloud.google.com/go/datastream v1.5.0/go.mod h1:6TZMMNPwjUqZHBKPQ1wwXpb0d5VDVPl2/XoS5yi88q4= +cloud.google.com/go/datastream v1.6.0/go.mod h1:6LQSuswqLa7S4rPAOZFVjHIG3wJIjZcZrw8JDEDJuIs= +cloud.google.com/go/deploy v1.4.0/go.mod h1:5Xghikd4VrmMLNaF6FiRFDlHb59VM59YoDQnOUdsH/c= +cloud.google.com/go/deploy v1.5.0/go.mod h1:ffgdD0B89tToyW/U/D2eL0jN2+IEV/3EMuXHA0l4r+s= +cloud.google.com/go/deploy v1.6.0/go.mod h1:f9PTHehG/DjCom3QH0cntOVRm93uGBDt2vKzAPwpXQI= +cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= +cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= +cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= +cloud.google.com/go/dialogflow v1.18.0/go.mod h1:trO7Zu5YdyEuR+BhSNOqJezyFQ3aUzz0njv7sMx/iek= +cloud.google.com/go/dialogflow v1.19.0/go.mod h1:JVmlG1TwykZDtxtTXujec4tQ+D8SBFMoosgy+6Gn0s0= +cloud.google.com/go/dialogflow v1.29.0/go.mod h1:b+2bzMe+k1s9V+F2jbJwpHPzrnIyHihAdRFMtn2WXuM= +cloud.google.com/go/dialogflow v1.31.0/go.mod h1:cuoUccuL1Z+HADhyIA7dci3N5zUssgpBJmCzI6fNRB4= +cloud.google.com/go/dlp v1.6.0/go.mod h1:9eyB2xIhpU0sVwUixfBubDoRwP+GjeUoxxeueZmqvmM= +cloud.google.com/go/dlp v1.7.0/go.mod h1:68ak9vCiMBjbasxeVD17hVPxDEck+ExiHavX8kiHG+Q= +cloud.google.com/go/dlp v1.9.0/go.mod h1:qdgmqgTyReTz5/YNSSuueR8pl7hO0o9bQ39ZhtgkWp4= +cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= +cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= +cloud.google.com/go/documentai v1.9.0/go.mod h1:FS5485S8R00U10GhgBC0aNGrJxBP8ZVpEeJ7PQDZd6k= +cloud.google.com/go/documentai v1.10.0/go.mod h1:vod47hKQIPeCfN2QS/jULIvQTugbmdc0ZvxxfQY1bg4= +cloud.google.com/go/documentai v1.16.0/go.mod h1:o0o0DLTEZ+YnJZ+J4wNfTxmDVyrkzFvttBXXtYRMHkM= +cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= +cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= +cloud.google.com/go/domains v0.8.0/go.mod h1:M9i3MMDzGFXsydri9/vW+EWz9sWb4I6WyHqdlAk0idE= +cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= +cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= +cloud.google.com/go/edgecontainer v0.3.0/go.mod h1:FLDpP4nykgwwIfcLt6zInhprzw0lEi2P1fjO6Ie0qbc= +cloud.google.com/go/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU= +cloud.google.com/go/essentialcontacts v1.3.0/go.mod h1:r+OnHa5jfj90qIfZDO/VztSFqbQan7HV75p8sA+mdGI= +cloud.google.com/go/essentialcontacts v1.4.0/go.mod h1:8tRldvHYsmnBCHdFpvU+GL75oWiBKl80BiqlFh9tp+8= +cloud.google.com/go/essentialcontacts v1.5.0/go.mod h1:ay29Z4zODTuwliK7SnX8E86aUF2CTzdNtvv42niCX0M= +cloud.google.com/go/eventarc v1.7.0/go.mod h1:6ctpF3zTnaQCxUjHUdcfgcA1A2T309+omHZth7gDfmc= +cloud.google.com/go/eventarc v1.8.0/go.mod h1:imbzxkyAU4ubfsaKYdQg04WS1NvncblHEup4kvF+4gw= +cloud.google.com/go/eventarc v1.10.0/go.mod h1:u3R35tmZ9HvswGRBnF48IlYgYeBcPUCjkr4BTdem2Kw= +cloud.google.com/go/filestore v1.3.0/go.mod h1:+qbvHGvXU1HaKX2nD0WEPo92TP/8AQuCVEBXNY9z0+w= +cloud.google.com/go/filestore v1.4.0/go.mod h1:PaG5oDfo9r224f8OYXURtAsY+Fbyq/bLYoINEK8XQAI= +cloud.google.com/go/filestore v1.5.0/go.mod h1:FqBXDWBp4YLHqRnVGveOkHDf8svj9r5+mUDLupOWEDs= +cloud.google.com/go/firestore v1.6.1/go.mod h1:asNXNOzBdyVQmEU+ggO8UPodTkEVFW5Qx+rwHnAz+EY= +cloud.google.com/go/firestore v1.8.0/go.mod h1:r3KB8cAdRIe8znzoPWLw8S6gpDVd9treohhn8b09424= +cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE= +cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= +cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= +cloud.google.com/go/functions v1.8.0/go.mod h1:RTZ4/HsQjIqIYP9a9YPbU+QFoQsAlYgrwOXJWHn1POY= +cloud.google.com/go/functions v1.9.0/go.mod h1:Y+Dz8yGguzO3PpIjhLTbnqV1CWmgQ5UwtlpzoyquQ08= +cloud.google.com/go/functions v1.10.0/go.mod h1:0D3hEOe3DbEvCXtYOZHQZmD+SzYsi1YbI7dGvHfldXw= +cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= +cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= +cloud.google.com/go/gaming v1.7.0/go.mod h1:LrB8U7MHdGgFG851iHAfqUdLcKBdQ55hzXy9xBJz0+w= +cloud.google.com/go/gaming v1.8.0/go.mod h1:xAqjS8b7jAVW0KFYeRUxngo9My3f33kFmua++Pi+ggM= +cloud.google.com/go/gaming v1.9.0/go.mod h1:Fc7kEmCObylSWLO334NcO+O9QMDyz+TKC4v1D7X+Bc0= +cloud.google.com/go/gkebackup v0.2.0/go.mod h1:XKvv/4LfG829/B8B7xRkk8zRrOEbKtEam6yNfuQNH60= +cloud.google.com/go/gkebackup v0.3.0/go.mod h1:n/E671i1aOQvUxT541aTkCwExO/bTer2HDlj4TsBRAo= +cloud.google.com/go/gkebackup v0.4.0/go.mod h1:byAyBGUwYGEEww7xsbnUTBHIYcOPy/PgUWUtOeRm9Vg= +cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= +cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= +cloud.google.com/go/gkeconnect v0.7.0/go.mod h1:SNfmVqPkaEi3bF/B3CNZOAYPYdg7sU+obZ+QTky2Myw= +cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= +cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= +cloud.google.com/go/gkehub v0.11.0/go.mod h1:JOWHlmN+GHyIbuWQPl47/C2RFhnFKH38jH9Ascu3n0E= +cloud.google.com/go/gkemulticloud v0.3.0/go.mod h1:7orzy7O0S+5kq95e4Hpn7RysVA7dPs8W/GgfUtsPbrA= +cloud.google.com/go/gkemulticloud v0.4.0/go.mod h1:E9gxVBnseLWCk24ch+P9+B2CoDFJZTyIgLKSalC7tuI= +cloud.google.com/go/gkemulticloud v0.5.0/go.mod h1:W0JDkiyi3Tqh0TJr//y19wyb1yf8llHVto2Htf2Ja3Y= +cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= +cloud.google.com/go/gsuiteaddons v1.3.0/go.mod h1:EUNK/J1lZEZO8yPtykKxLXI6JSVN2rg9bN8SXOa0bgM= +cloud.google.com/go/gsuiteaddons v1.4.0/go.mod h1:rZK5I8hht7u7HxFQcFei0+AtfS9uSushomRlg+3ua1o= +cloud.google.com/go/gsuiteaddons v1.5.0/go.mod h1:TFCClYLd64Eaa12sFVmUyG62tk4mdIsI7pAnSXRkcFo= +cloud.google.com/go/iam v0.1.0/go.mod h1:vcUNEa0pEm0qRVpmWepWaFMIAI8/hjB9mO8rNCJtF6c= +cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= +cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= +cloud.google.com/go/iam v0.6.0/go.mod h1:+1AH33ueBne5MzYccyMHtEKqLE4/kJOibtffMHDMFMc= +cloud.google.com/go/iam v0.7.0/go.mod h1:H5Br8wRaDGNc8XP3keLc4unfUUZeyH3Sfl9XpQEYOeg= +cloud.google.com/go/iam v0.8.0/go.mod h1:lga0/y3iH6CX7sYqypWJ33hf7kkfXJag67naqGESjkE= +cloud.google.com/go/iam v0.11.0/go.mod h1:9PiLDanza5D+oWFZiH1uG+RnRCfEGKoyl6yo4cgWZGY= +cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY= +cloud.google.com/go/iap v1.4.0/go.mod h1:RGFwRJdihTINIe4wZ2iCP0zF/qu18ZwyKxrhMhygBEc= +cloud.google.com/go/iap v1.5.0/go.mod h1:UH/CGgKd4KyohZL5Pt0jSKE4m3FR51qg6FKQ/z/Ix9A= +cloud.google.com/go/iap v1.6.0/go.mod h1:NSuvI9C/j7UdjGjIde7t7HBz+QTwBcapPE07+sSRcLk= +cloud.google.com/go/ids v1.1.0/go.mod h1:WIuwCaYVOzHIj2OhN9HAwvW+DBdmUAdcWlFxRl+KubM= +cloud.google.com/go/ids v1.2.0/go.mod h1:5WXvp4n25S0rA/mQWAg1YEEBBq6/s+7ml1RDCW1IrcY= +cloud.google.com/go/ids v1.3.0/go.mod h1:JBdTYwANikFKaDP6LtW5JAi4gubs57SVNQjemdt6xV4= +cloud.google.com/go/iot v1.3.0/go.mod h1:r7RGh2B61+B8oz0AGE+J72AhA0G7tdXItODWsaA2oLs= +cloud.google.com/go/iot v1.4.0/go.mod h1:dIDxPOn0UvNDUMD8Ger7FIaTuvMkj+aGk94RPP0iV+g= +cloud.google.com/go/iot v1.5.0/go.mod h1:mpz5259PDl3XJthEmh9+ap0affn/MqNSP4My77Qql9o= +cloud.google.com/go/kms v1.4.0/go.mod h1:fajBHndQ+6ubNw6Ss2sSd+SWvjL26RNo/dr7uxsnnOA= +cloud.google.com/go/kms v1.5.0/go.mod h1:QJS2YY0eJGBg3mnDfuaCyLauWwBJiHRboYxJ++1xJNg= +cloud.google.com/go/kms v1.6.0/go.mod h1:Jjy850yySiasBUDi6KFUwUv2n1+o7QZFyuUJg6OgjA0= +cloud.google.com/go/kms v1.8.0/go.mod h1:4xFEhYFqvW+4VMELtZyxomGSYtSQKzM178ylFW4jMAg= +cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= +cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= +cloud.google.com/go/language v1.7.0/go.mod h1:DJ6dYN/W+SQOjF8e1hLQXMF21AkH2w9wiPzPCJa2MIE= +cloud.google.com/go/language v1.8.0/go.mod h1:qYPVHf7SPoNNiCL2Dr0FfEFNil1qi3pQEyygwpgVKB8= +cloud.google.com/go/language v1.9.0/go.mod h1:Ns15WooPM5Ad/5no/0n81yUetis74g3zrbeJBE+ptUY= +cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= +cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= +cloud.google.com/go/lifesciences v0.8.0/go.mod h1:lFxiEOMqII6XggGbOnKiyZ7IBwoIqA84ClvoezaA/bo= +cloud.google.com/go/logging v1.6.1/go.mod h1:5ZO0mHHbvm8gEmeEUHrmDlTDSu5imF6MUP9OfilNXBw= +cloud.google.com/go/logging v1.7.0/go.mod h1:3xjP2CjkM3ZkO73aj4ASA5wRPGGCRrPIAeNqVNkzY8M= +cloud.google.com/go/longrunning v0.1.1/go.mod h1:UUFxuDWkv22EuY93jjmDMFT5GPQKeFVJBIF6QlTqdsE= +cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc= +cloud.google.com/go/longrunning v0.4.1 h1:v+yFJOfKC3yZdY6ZUI933pIYdhyhV8S3NpWrXWmg7jM= +cloud.google.com/go/longrunning v0.4.1/go.mod h1:4iWDqhBZ70CvZ6BfETbvam3T8FMvLK+eFj0E6AaRQTo= +cloud.google.com/go/managedidentities v1.3.0/go.mod h1:UzlW3cBOiPrzucO5qWkNkh0w33KFtBJU281hacNvsdE= +cloud.google.com/go/managedidentities v1.4.0/go.mod h1:NWSBYbEMgqmbZsLIyKvxrYbtqOsxY1ZrGM+9RgDqInM= +cloud.google.com/go/managedidentities v1.5.0/go.mod h1:+dWcZ0JlUmpuxpIDfyP5pP5y0bLdRwOS4Lp7gMni/LA= +cloud.google.com/go/maps v0.1.0/go.mod h1:BQM97WGyfw9FWEmQMpZ5T6cpovXXSd1cGmFma94eubI= +cloud.google.com/go/maps v0.6.0/go.mod h1:o6DAMMfb+aINHz/p/jbcY+mYeXBoZoxTfdSQ8VAJaCw= +cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= +cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= +cloud.google.com/go/mediatranslation v0.7.0/go.mod h1:LCnB/gZr90ONOIQLgSXagp8XUW1ODs2UmUMvcgMfI2I= +cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= +cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= +cloud.google.com/go/memcache v1.6.0/go.mod h1:XS5xB0eQZdHtTuTF9Hf8eJkKtR3pVRCcvJwtm68T3rA= +cloud.google.com/go/memcache v1.7.0/go.mod h1:ywMKfjWhNtkQTxrWxCkCFkoPjLHPW6A7WOTVI8xy3LY= +cloud.google.com/go/memcache v1.9.0/go.mod h1:8oEyzXCu+zo9RzlEaEjHl4KkgjlNDaXbCQeQWlzNFJM= +cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= +cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= +cloud.google.com/go/metastore v1.7.0/go.mod h1:s45D0B4IlsINu87/AsWiEVYbLaIMeUSoxlKKDqBGFS8= +cloud.google.com/go/metastore v1.8.0/go.mod h1:zHiMc4ZUpBiM7twCIFQmJ9JMEkDSyZS9U12uf7wHqSI= +cloud.google.com/go/metastore v1.10.0/go.mod h1:fPEnH3g4JJAk+gMRnrAnoqyv2lpUCqJPWOodSaf45Eo= +cloud.google.com/go/monitoring v1.7.0/go.mod h1:HpYse6kkGo//7p6sT0wsIC6IBDET0RhIsnmlA53dvEk= +cloud.google.com/go/monitoring v1.8.0/go.mod h1:E7PtoMJ1kQXWxPjB6mv2fhC5/15jInuulFdYYtlcvT4= +cloud.google.com/go/monitoring v1.12.0/go.mod h1:yx8Jj2fZNEkL/GYZyTLS4ZtZEZN8WtDEiEqG4kLK50w= +cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= +cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= +cloud.google.com/go/networkconnectivity v1.6.0/go.mod h1:OJOoEXW+0LAxHh89nXd64uGG+FbQoeH8DtxCHVOMlaM= +cloud.google.com/go/networkconnectivity v1.7.0/go.mod h1:RMuSbkdbPwNMQjB5HBWD5MpTBnNm39iAVpC3TmsExt8= +cloud.google.com/go/networkconnectivity v1.10.0/go.mod h1:UP4O4sWXJG13AqrTdQCD9TnLGEbtNRqjuaaA7bNjF5E= +cloud.google.com/go/networkmanagement v1.4.0/go.mod h1:Q9mdLLRn60AsOrPc8rs8iNV6OHXaGcDdsIQe1ohekq8= +cloud.google.com/go/networkmanagement v1.5.0/go.mod h1:ZnOeZ/evzUdUsnvRt792H0uYEnHQEMaz+REhhzJRcf4= +cloud.google.com/go/networkmanagement v1.6.0/go.mod h1:5pKPqyXjB/sgtvB5xqOemumoQNB7y95Q7S+4rjSOPYY= +cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= +cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= +cloud.google.com/go/networksecurity v0.7.0/go.mod h1:mAnzoxx/8TBSyXEeESMy9OOYwo1v+gZ5eMRnsT5bC8k= +cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= +cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= +cloud.google.com/go/notebooks v1.4.0/go.mod h1:4QPMngcwmgb6uw7Po99B2xv5ufVoIQ7nOGDyL4P8AgA= +cloud.google.com/go/notebooks v1.5.0/go.mod h1:q8mwhnP9aR8Hpfnrc5iN5IBhrXUy8S2vuYs+kBJ/gu0= +cloud.google.com/go/notebooks v1.7.0/go.mod h1:PVlaDGfJgj1fl1S3dUwhFMXFgfYGhYQt2164xOMONmE= +cloud.google.com/go/optimization v1.1.0/go.mod h1:5po+wfvX5AQlPznyVEZjGJTMr4+CAkJf2XSTQOOl9l4= +cloud.google.com/go/optimization v1.2.0/go.mod h1:Lr7SOHdRDENsh+WXVmQhQTrzdu9ybg0NecjHidBq6xs= +cloud.google.com/go/optimization v1.3.1/go.mod h1:IvUSefKiwd1a5p0RgHDbWCIbDFgKuEdB+fPPuP0IDLI= +cloud.google.com/go/orchestration v1.3.0/go.mod h1:Sj5tq/JpWiB//X/q3Ngwdl5K7B7Y0KZ7bfv0wL6fqVA= +cloud.google.com/go/orchestration v1.4.0/go.mod h1:6W5NLFWs2TlniBphAViZEVhrXRSMgUGDfW7vrWKvsBk= +cloud.google.com/go/orchestration v1.6.0/go.mod h1:M62Bevp7pkxStDfFfTuCOaXgaaqRAga1yKyoMtEoWPQ= +cloud.google.com/go/orgpolicy v1.4.0/go.mod h1:xrSLIV4RePWmP9P3tBl8S93lTmlAxjm06NSm2UTmKvE= +cloud.google.com/go/orgpolicy v1.5.0/go.mod h1:hZEc5q3wzwXJaKrsx5+Ewg0u1LxJ51nNFlext7Tanwc= +cloud.google.com/go/orgpolicy v1.10.0/go.mod h1:w1fo8b7rRqlXlIJbVhOMPrwVljyuW5mqssvBtU18ONc= +cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= +cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= +cloud.google.com/go/osconfig v1.9.0/go.mod h1:Yx+IeIZJ3bdWmzbQU4fxNl8xsZ4amB+dygAwFPlvnNo= +cloud.google.com/go/osconfig v1.10.0/go.mod h1:uMhCzqC5I8zfD9zDEAfvgVhDS8oIjySWh+l4WK6GnWw= +cloud.google.com/go/osconfig v1.11.0/go.mod h1:aDICxrur2ogRd9zY5ytBLV89KEgT2MKB2L/n6x1ooPw= +cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= +cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= +cloud.google.com/go/oslogin v1.6.0/go.mod h1:zOJ1O3+dTU8WPlGEkFSh7qeHPPSoxrcMbbK1Nm2iX70= +cloud.google.com/go/oslogin v1.7.0/go.mod h1:e04SN0xO1UNJ1M5GP0vzVBFicIe4O53FOfcixIqTyXo= +cloud.google.com/go/oslogin v1.9.0/go.mod h1:HNavntnH8nzrn8JCTT5fj18FuJLFJc4NaZJtBnQtKFs= +cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= +cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= +cloud.google.com/go/phishingprotection v0.7.0/go.mod h1:8qJI4QKHoda/sb/7/YmMQ2omRLSLYSu9bU0EKCNI+Lk= +cloud.google.com/go/policytroubleshooter v1.3.0/go.mod h1:qy0+VwANja+kKrjlQuOzmlvscn4RNsAc0e15GGqfMxg= +cloud.google.com/go/policytroubleshooter v1.4.0/go.mod h1:DZT4BcRw3QoO8ota9xw/LKtPa8lKeCByYeKTIf/vxdE= +cloud.google.com/go/policytroubleshooter v1.5.0/go.mod h1:Rz1WfV+1oIpPdN2VvvuboLVRsB1Hclg3CKQ53j9l8vw= +cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= +cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= +cloud.google.com/go/privatecatalog v0.7.0/go.mod h1:2s5ssIFO69F5csTXcwBP7NPFTZvps26xGzvQ2PQaBYg= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/pubsub v1.26.0/go.mod h1:QgBH3U/jdJy/ftjPhTkyXNj543Tin1pRYcdcPRnFIRI= +cloud.google.com/go/pubsub v1.27.1/go.mod h1:hQN39ymbV9geqBnfQq6Xf63yNhUAhv9CZhzp5O6qsW0= +cloud.google.com/go/pubsub v1.28.0/go.mod h1:vuXFpwaVoIPQMGXqRyUQigu/AX1S3IWugR9xznmcXX8= +cloud.google.com/go/pubsublite v1.5.0/go.mod h1:xapqNQ1CuLfGi23Yda/9l4bBCKz/wC3KIJ5gKcxveZg= +cloud.google.com/go/pubsublite v1.6.0/go.mod h1:1eFCS0U11xlOuMFV/0iBqw3zP12kddMeCbj/F3FSj9k= +cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= +cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= +cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= +cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= +cloud.google.com/go/recaptchaenterprise/v2 v2.4.0/go.mod h1:Am3LHfOuBstrLrNCBrlI5sbwx9LBg3te2N6hGvHn2mE= +cloud.google.com/go/recaptchaenterprise/v2 v2.5.0/go.mod h1:O8LzcHXN3rz0j+LBC91jrwI3R+1ZSZEWrfL7XHgNo9U= +cloud.google.com/go/recaptchaenterprise/v2 v2.6.0/go.mod h1:RPauz9jeLtB3JVzg6nCbe12qNoaa8pXc4d/YukAmcnA= +cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= +cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= +cloud.google.com/go/recommendationengine v0.7.0/go.mod h1:1reUcE3GIu6MeBz/h5xZJqNLuuVjNg1lmWMPyjatzac= +cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= +cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= +cloud.google.com/go/recommender v1.7.0/go.mod h1:XLHs/W+T8olwlGOgfQenXBTbIseGclClff6lhFVe9Bs= +cloud.google.com/go/recommender v1.8.0/go.mod h1:PkjXrTT05BFKwxaUxQmtIlrtj0kph108r02ZZQ5FE70= +cloud.google.com/go/recommender v1.9.0/go.mod h1:PnSsnZY7q+VL1uax2JWkt/UegHssxjUVVCrX52CuEmQ= +cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= +cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= +cloud.google.com/go/redis v1.9.0/go.mod h1:HMYQuajvb2D0LvMgZmLDZW8V5aOC/WxstZHiy4g8OiA= +cloud.google.com/go/redis v1.10.0/go.mod h1:ThJf3mMBQtW18JzGgh41/Wld6vnDDc/F/F35UolRZPM= +cloud.google.com/go/redis v1.11.0/go.mod h1:/X6eicana+BWcUda5PpwZC48o37SiFVTFSs0fWAJ7uQ= +cloud.google.com/go/resourcemanager v1.3.0/go.mod h1:bAtrTjZQFJkiWTPDb1WBjzvc6/kifjj4QBYuKCCoqKA= +cloud.google.com/go/resourcemanager v1.4.0/go.mod h1:MwxuzkumyTX7/a3n37gmsT3py7LIXwrShilPh3P1tR0= +cloud.google.com/go/resourcemanager v1.5.0/go.mod h1:eQoXNAiAvCf5PXxWxXjhKQoTMaUSNrEfg+6qdf/wots= +cloud.google.com/go/resourcesettings v1.3.0/go.mod h1:lzew8VfESA5DQ8gdlHwMrqZs1S9V87v3oCnKCWoOuQU= +cloud.google.com/go/resourcesettings v1.4.0/go.mod h1:ldiH9IJpcrlC3VSuCGvjR5of/ezRrOxFtpJoJo5SmXg= +cloud.google.com/go/resourcesettings v1.5.0/go.mod h1:+xJF7QSG6undsQDfsCJyqWXyBwUoJLhetkRMDRnIoXA= +cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= +cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= +cloud.google.com/go/retail v1.10.0/go.mod h1:2gDk9HsL4HMS4oZwz6daui2/jmKvqShXKQuB2RZ+cCc= +cloud.google.com/go/retail v1.11.0/go.mod h1:MBLk1NaWPmh6iVFSz9MeKG/Psyd7TAgm6y/9L2B4x9Y= +cloud.google.com/go/retail v1.12.0/go.mod h1:UMkelN/0Z8XvKymXFbD4EhFJlYKRx1FGhQkVPU5kF14= +cloud.google.com/go/run v0.2.0/go.mod h1:CNtKsTA1sDcnqqIFR3Pb5Tq0usWxJJvsWOCPldRU3Do= +cloud.google.com/go/run v0.3.0/go.mod h1:TuyY1+taHxTjrD0ZFk2iAR+xyOXEA0ztb7U3UNA0zBo= +cloud.google.com/go/run v0.8.0/go.mod h1:VniEnuBwqjigv0A7ONfQUaEItaiCRVujlMqerPPiktM= +cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= +cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= +cloud.google.com/go/scheduler v1.6.0/go.mod h1:SgeKVM7MIwPn3BqtcBntpLyrIJftQISRrYB5ZtT+KOk= +cloud.google.com/go/scheduler v1.7.0/go.mod h1:jyCiBqWW956uBjjPMMuX09n3x37mtyPJegEWKxRsn44= +cloud.google.com/go/scheduler v1.8.0/go.mod h1:TCET+Y5Gp1YgHT8py4nlg2Sew8nUHMqcpousDgXJVQc= +cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= +cloud.google.com/go/secretmanager v1.8.0/go.mod h1:hnVgi/bN5MYHd3Gt0SPuTPPp5ENina1/LxM+2W9U9J4= +cloud.google.com/go/secretmanager v1.9.0/go.mod h1:b71qH2l1yHmWQHt9LC80akm86mX8AL6X1MA01dW8ht4= +cloud.google.com/go/secretmanager v1.10.0/go.mod h1:MfnrdvKMPNra9aZtQFvBcvRU54hbPD8/HayQdlUgJpU= +cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= +cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= +cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= +cloud.google.com/go/security v1.9.0/go.mod h1:6Ta1bO8LXI89nZnmnsZGp9lVoVWXqsVbIq/t9dzI+2Q= +cloud.google.com/go/security v1.10.0/go.mod h1:QtOMZByJVlibUT2h9afNDWRZ1G96gVywH8T5GUSb9IA= +cloud.google.com/go/security v1.12.0/go.mod h1:rV6EhrpbNHrrxqlvW0BWAIawFWq3X90SduMJdFwtLB8= +cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= +cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= +cloud.google.com/go/securitycenter v1.15.0/go.mod h1:PeKJ0t8MoFmmXLXWm41JidyzI3PJjd8sXWaVqg43WWk= +cloud.google.com/go/securitycenter v1.16.0/go.mod h1:Q9GMaLQFUD+5ZTabrbujNWLtSLZIZF7SAR0wWECrjdk= +cloud.google.com/go/securitycenter v1.18.1/go.mod h1:0/25gAzCM/9OL9vVx4ChPeM/+DlfGQJDwBy/UC8AKK0= +cloud.google.com/go/servicecontrol v1.4.0/go.mod h1:o0hUSJ1TXJAmi/7fLJAedOovnujSEvjKCAFNXPQ1RaU= +cloud.google.com/go/servicecontrol v1.5.0/go.mod h1:qM0CnXHhyqKVuiZnGKrIurvVImCs8gmqWsDoqe9sU1s= +cloud.google.com/go/servicecontrol v1.10.0/go.mod h1:pQvyvSRh7YzUF2efw7H87V92mxU8FnFDawMClGCNuAA= +cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= +cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= +cloud.google.com/go/servicedirectory v1.6.0/go.mod h1:pUlbnWsLH9c13yGkxCmfumWEPjsRs1RlmJ4pqiNjVL4= +cloud.google.com/go/servicedirectory v1.7.0/go.mod h1:5p/U5oyvgYGYejufvxhgwjL8UVXjkuw7q5XcG10wx1U= +cloud.google.com/go/servicedirectory v1.8.0/go.mod h1:srXodfhY1GFIPvltunswqXpVxFPpZjf8nkKQT7XcXaY= +cloud.google.com/go/servicemanagement v1.4.0/go.mod h1:d8t8MDbezI7Z2R1O/wu8oTggo3BI2GKYbdG4y/SJTco= +cloud.google.com/go/servicemanagement v1.5.0/go.mod h1:XGaCRe57kfqu4+lRxaFEAuqmjzF0r+gWHjWqKqBvKFo= +cloud.google.com/go/servicemanagement v1.6.0/go.mod h1:aWns7EeeCOtGEX4OvZUWCCJONRZeFKiptqKf1D0l/Jc= +cloud.google.com/go/serviceusage v1.3.0/go.mod h1:Hya1cozXM4SeSKTAgGXgj97GlqUvF5JaoXacR1JTP/E= +cloud.google.com/go/serviceusage v1.4.0/go.mod h1:SB4yxXSaYVuUBYUml6qklyONXNLt83U0Rb+CXyhjEeU= +cloud.google.com/go/serviceusage v1.5.0/go.mod h1:w8U1JvqUqwJNPEOTQjrMHkw3IaIFLoLsPLvsE3xueec= +cloud.google.com/go/shell v1.3.0/go.mod h1:VZ9HmRjZBsjLGXusm7K5Q5lzzByZmJHf1d0IWHEN5X4= +cloud.google.com/go/shell v1.4.0/go.mod h1:HDxPzZf3GkDdhExzD/gs8Grqk+dmYcEjGShZgYa9URw= +cloud.google.com/go/shell v1.6.0/go.mod h1:oHO8QACS90luWgxP3N9iZVuEiSF84zNyLytb+qE2f9A= +cloud.google.com/go/spanner v1.41.0/go.mod h1:MLYDBJR/dY4Wt7ZaMIQ7rXOTLjYrmxLE/5ve9vFfWos= +cloud.google.com/go/spanner v1.44.0/go.mod h1:G8XIgYdOK+Fbcpbs7p2fiprDw4CaZX63whnSMLVBxjk= +cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= +cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= +cloud.google.com/go/speech v1.8.0/go.mod h1:9bYIl1/tjsAnMgKGHKmBZzXKEkGgtU+MpdDPTE9f7y0= +cloud.google.com/go/speech v1.9.0/go.mod h1:xQ0jTcmnRFFM2RfX/U+rk6FQNUF6DQlydUSyoooSpco= +cloud.google.com/go/speech v1.14.1/go.mod h1:gEosVRPJ9waG7zqqnsHpYTOoAS4KouMRLDFMekpJ0J0= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= +cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= +cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= +cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= +cloud.google.com/go/storage v1.28.1/go.mod h1:Qnisd4CqDdo6BGs2AD5LLnEsmSQ80wQ5ogcBBKhU86Y= +cloud.google.com/go/storagetransfer v1.5.0/go.mod h1:dxNzUopWy7RQevYFHewchb29POFv3/AaBgnhqzqiK0w= +cloud.google.com/go/storagetransfer v1.6.0/go.mod h1:y77xm4CQV/ZhFZH75PLEXY0ROiS7Gh6pSKrM8dJyg6I= +cloud.google.com/go/storagetransfer v1.7.0/go.mod h1:8Giuj1QNb1kfLAiWM1bN6dHzfdlDAVC9rv9abHot2W4= +cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= +cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= +cloud.google.com/go/talent v1.3.0/go.mod h1:CmcxwJ/PKfRgd1pBjQgU6W3YBwiewmUzQYH5HHmSCmM= +cloud.google.com/go/talent v1.4.0/go.mod h1:ezFtAgVuRf8jRsvyE6EwmbTK5LKciD4KVnHuDEFmOOA= +cloud.google.com/go/talent v1.5.0/go.mod h1:G+ODMj9bsasAEJkQSzO2uHQWXHHXUomArjWQQYkqK6c= +cloud.google.com/go/texttospeech v1.4.0/go.mod h1:FX8HQHA6sEpJ7rCMSfXuzBcysDAuWusNNNvN9FELDd8= +cloud.google.com/go/texttospeech v1.5.0/go.mod h1:oKPLhR4n4ZdQqWKURdwxMy0uiTS1xU161C8W57Wkea4= +cloud.google.com/go/texttospeech v1.6.0/go.mod h1:YmwmFT8pj1aBblQOI3TfKmwibnsfvhIBzPXcW4EBovc= +cloud.google.com/go/tpu v1.3.0/go.mod h1:aJIManG0o20tfDQlRIej44FcwGGl/cD0oiRyMKG19IQ= +cloud.google.com/go/tpu v1.4.0/go.mod h1:mjZaX8p0VBgllCzF6wcU2ovUXN9TONFLd7iz227X2Xg= +cloud.google.com/go/tpu v1.5.0/go.mod h1:8zVo1rYDFuW2l4yZVY0R0fb/v44xLh3llq7RuV61fPM= +cloud.google.com/go/trace v1.3.0/go.mod h1:FFUE83d9Ca57C+K8rDl/Ih8LwOzWIV1krKgxg6N0G28= +cloud.google.com/go/trace v1.4.0/go.mod h1:UG0v8UBqzusp+z63o7FK74SdFE+AXpCLdFb1rshXG+Y= +cloud.google.com/go/trace v1.8.0/go.mod h1:zH7vcsbAhklH8hWFig58HvxcxyQbaIqMarMg9hn5ECA= +cloud.google.com/go/translate v1.3.0/go.mod h1:gzMUwRjvOqj5i69y/LYLd8RrNQk+hOmIXTi9+nb3Djs= +cloud.google.com/go/translate v1.4.0/go.mod h1:06Dn/ppvLD6WvA5Rhdp029IX2Mi3Mn7fpMRLPvXT5Wg= +cloud.google.com/go/translate v1.5.0/go.mod h1:29YDSYveqqpA1CQFD7NQuP49xymq17RXNaUDdc0mNu0= +cloud.google.com/go/video v1.8.0/go.mod h1:sTzKFc0bUSByE8Yoh8X0mn8bMymItVGPfTuUBUyRgxk= +cloud.google.com/go/video v1.9.0/go.mod h1:0RhNKFRF5v92f8dQt0yhaHrEuH95m068JYOvLZYnJSw= +cloud.google.com/go/video v1.12.0/go.mod h1:MLQew95eTuaNDEGriQdcYn0dTwf9oWiA4uYebxM5kdg= +cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= +cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= +cloud.google.com/go/videointelligence v1.8.0/go.mod h1:dIcCn4gVDdS7yte/w+koiXn5dWVplOZkE+xwG9FgK+M= +cloud.google.com/go/videointelligence v1.9.0/go.mod h1:29lVRMPDYHikk3v8EdPSaL8Ku+eMzDljjuvRs105XoU= +cloud.google.com/go/videointelligence v1.10.0/go.mod h1:LHZngX1liVtUhZvi2uNS0VQuOzNi2TkY1OakiuoUOjU= +cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= +cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= +cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= +cloud.google.com/go/vision/v2 v2.4.0/go.mod h1:VtI579ll9RpVTrdKdkMzckdnwMyX2JILb+MhPqRbPsY= +cloud.google.com/go/vision/v2 v2.5.0/go.mod h1:MmaezXOOE+IWa+cS7OhRRLK2cNv1ZL98zhqFFZaaH2E= +cloud.google.com/go/vision/v2 v2.6.0/go.mod h1:158Hes0MvOS9Z/bDMSFpjwsUrZ5fPrdwuyyvKSGAGMY= +cloud.google.com/go/vmmigration v1.2.0/go.mod h1:IRf0o7myyWFSmVR1ItrBSFLFD/rJkfDCUTO4vLlJvsE= +cloud.google.com/go/vmmigration v1.3.0/go.mod h1:oGJ6ZgGPQOFdjHuocGcLqX4lc98YQ7Ygq8YQwHh9A7g= +cloud.google.com/go/vmmigration v1.5.0/go.mod h1:E4YQ8q7/4W9gobHjQg4JJSgXXSgY21nA5r8swQV+Xxc= +cloud.google.com/go/vmwareengine v0.1.0/go.mod h1:RsdNEf/8UDvKllXhMz5J40XxDrNJNN4sagiox+OI208= +cloud.google.com/go/vmwareengine v0.2.2/go.mod h1:sKdctNJxb3KLZkE/6Oui94iw/xs9PRNC2wnNLXsHvH8= +cloud.google.com/go/vpcaccess v1.4.0/go.mod h1:aQHVbTWDYUR1EbTApSVvMq1EnT57ppDmQzZ3imqIk4w= +cloud.google.com/go/vpcaccess v1.5.0/go.mod h1:drmg4HLk9NkZpGfCmZ3Tz0Bwnm2+DKqViEpeEpOq0m8= +cloud.google.com/go/vpcaccess v1.6.0/go.mod h1:wX2ILaNhe7TlVa4vC5xce1bCnqE3AeH27RV31lnmZes= +cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= +cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= +cloud.google.com/go/webrisk v1.6.0/go.mod h1:65sW9V9rOosnc9ZY7A7jsy1zoHS5W9IAXv6dGqhMQMc= +cloud.google.com/go/webrisk v1.7.0/go.mod h1:mVMHgEYH0r337nmt1JyLthzMr6YxwN1aAIEc2fTcq7A= +cloud.google.com/go/webrisk v1.8.0/go.mod h1:oJPDuamzHXgUc+b8SiHRcVInZQuybnvEW72PqTc7sSg= +cloud.google.com/go/websecurityscanner v1.3.0/go.mod h1:uImdKm2wyeXQevQJXeh8Uun/Ym1VqworNDlBXQevGMo= +cloud.google.com/go/websecurityscanner v1.4.0/go.mod h1:ebit/Fp0a+FWu5j4JOmJEV8S8CzdTkAS77oDsiSqYWQ= +cloud.google.com/go/websecurityscanner v1.5.0/go.mod h1:Y6xdCPy81yi0SQnDY1xdNTNpfY1oAgXUlcfN3B3eSng= +cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= +cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= +cloud.google.com/go/workflows v1.8.0/go.mod h1:ysGhmEajwZxGn1OhGOGKsTXc5PyxOc0vfKf5Af+to4M= +cloud.google.com/go/workflows v1.9.0/go.mod h1:ZGkj1aFIOd9c8Gerkjjq7OW7I5+l6cSvT3ujaO/WwSA= +cloud.google.com/go/workflows v1.10.0/go.mod h1:fZ8LmRmZQWacon9UCX1r/g/DfAXx5VcPALq2CxzdePw= +code.cloudfoundry.org/bytefmt v0.0.0-20190710193110-1eb035ffe2b6/go.mod h1:wN/zk7mhREp/oviagqUXY3EwuHhWyOvAdsn5Y4CzOrc= +contrib.go.opencensus.io/exporter/prometheus v0.4.1/go.mod h1:t9wvfitlUjGXG2IXAZsuFq26mDGid/JwCEXp+gTG/9U= contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg= contrib.go.opencensus.io/exporter/prometheus v0.4.2/go.mod h1:dvEHbiKmgvbr5pjaF9fpw1KeYcjrnC1J8B+JKjsZyRQ= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8= +git.sr.ht/~sbinet/gg v0.3.1/go.mod h1:KGYtlADtqsqANL9ueOFkWymvzUvLMQllU5Ixo+8v3pc= github.com/Azure/azure-sdk-for-go v65.0.0+incompatible h1:HzKLt3kIwMm4KeJYTdx9EbjRYTySD/t8i1Ee/W5EGXw= github.com/Azure/azure-sdk-for-go v65.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +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/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest/autorest v0.11.28 h1:ndAExarwr5Y+GaHE6VCaY1kyS/HwwGGyuimVhWsHOEM= @@ -50,6 +535,7 @@ github.com/Azure/go-autorest/autorest/adal v0.9.22/go.mod h1:XuAbAEUv2Tta//+voMI github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8KY+LPI6wiWrP/myHw= github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= +github.com/Azure/go-autorest/autorest/mocks v0.4.2 h1:PGN4EDXnuQbojHbU0UWoNvmu9AGVwYHG9/fkDYhtAfw= github.com/Azure/go-autorest/autorest/mocks v0.4.2/go.mod h1:Vy7OitM9Kei0i1Oj+LvyAWMXJHeKH1MVlzFugfVrmyU= github.com/Azure/go-autorest/autorest/to v0.4.0 h1:oXVqrxakqqV1UZdSazDOPOLvOIz+XA683u8EctwboHk= github.com/Azure/go-autorest/autorest/to v0.4.0/go.mod h1:fE8iZBn7LQR7zH/9XU2NcPR4o9jEImooCeWJcYV/zLE= @@ -61,12 +547,31 @@ github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUM github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/HdrHistogram/hdrhistogram-go v1.0.1/go.mod h1:BWJ+nMSHY3L41Zj7CA3uXnloDp7xxV0YvstAE7nKTaM= +github.com/HdrHistogram/hdrhistogram-go v1.1.0/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= +github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= +github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk= +github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Microsoft/go-winio v0.5.1 h1:aPJp2QD7OOrhO5tQXqQoGSJc+DjDtWTGLOmNyAm6FgY= github.com/Microsoft/go-winio v0.5.1/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= +github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= +github.com/Shopify/sarama v1.32.0/go.mod h1:+EmJJKZWVT/faR9RcOxJerP+LId4iWdQPBGLy1Y1Njs= +github.com/Shopify/sarama v1.33.0/go.mod h1:lYO7LwEBkE0iAeTl94UfPSrDaavFzSFlmn+5isARATQ= +github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= +github.com/Shopify/toxiproxy/v2 v2.3.0/go.mod h1:KvQTtB6RjCJY4zqNJn7C7JDFgsG5uoHYDirfUfpIm0c= +github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= +github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= +github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm/4RlzPXRlREEwqTHAN3T56Bv2ITsFT3gY= +github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk= +github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= +github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM= +github.com/alecthomas/kingpin/v2 v2.3.1/go.mod h1:oYL5vtsvEHZGHxU7DMp32Dvx+qL+ptGn6lWaot2vCNE= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -74,126 +579,234 @@ github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRF github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 h1:s6gZFSlWYmbqAuRjVTiNNhvNRfY2Wxp9nhfyel4rklc= github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= +github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/antonmedv/expr v1.9.0/go.mod h1:5qsM3oLGDND7sDmQGDXHkYfkjYMUX14qsgqmHhwGEk8= +github.com/apache/arrow/go/v10 v10.0.1/go.mod h1:YvhnlEePVnBS4+0z3fhPfUy7W1Ikj0Ih0vcRo/gZ1M0= +github.com/apache/thrift v0.16.0/go.mod h1:PHK3hniurgQaNMZYaCLEqXKsYK8upmhPbmdP2FXSqgU= +github.com/apache/thrift v0.17.0/go.mod h1:OLxhMRJxomX+1I/KUw03qoV3mMz16BwaKI+d4fPBx7Q= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-metrics v0.3.10 h1:FR+drcQStOe+32sYyJYyZ7FIdgoGGBnwLl+flodp8Uo= +github.com/armon/go-metrics v0.3.9/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= +github.com/armon/go-metrics v0.4.0 h1:yCQqn7dwca4ITXb+CbubHmedzaQYHhNhrEXLYUeEe8Q= +github.com/armon/go-metrics v0.4.0/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= +github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d h1:Byv0BzEl3/e6D5CLfI0j/7hiIEtvGVFPCZ7Ei2oq8iQ= github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= github.com/aws/aws-sdk-go v1.38.35/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= +github.com/aws/aws-sdk-go v1.38.68/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= +github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= +github.com/aws/aws-sdk-go v1.44.156/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= +github.com/aws/aws-sdk-go v1.44.187/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= +github.com/aws/aws-sdk-go v1.44.216/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/aws/aws-sdk-go v1.44.220 h1:yAj99qAt0Htjle9Up3DglgHfOP77lmFPrElA4jKnrBo= github.com/aws/aws-sdk-go v1.44.220/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= +github.com/aws/aws-sdk-go-v2 v1.7.0/go.mod h1:tb9wi5s61kTDA5qCkcDbt3KRVV74GGslQkl/DRdX/P4= +github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= github.com/aws/aws-sdk-go-v2 v1.9.2/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= github.com/aws/aws-sdk-go-v2/config v1.8.3/go.mod h1:4AEiLtAb8kLs7vgw2ZV3p2VZ1+hBavOc84hqxVNpCyw= github.com/aws/aws-sdk-go-v2/credentials v1.4.3/go.mod h1:FNNC6nQZQUuyhq5aE5c7ata8o9e4ECGmS4lAXC7o1mQ= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.6.0/go.mod h1:gqlclDEZp4aqJOancXK6TN24aKhT0W0Ae9MHk3wzTMM= github.com/aws/aws-sdk-go-v2/internal/ini v1.2.4/go.mod h1:ZcBrrI3zBKlhGFNYWvju0I3TR93I7YIgAfy82Fh4lcQ= github.com/aws/aws-sdk-go-v2/service/appconfig v1.4.2/go.mod h1:FZ3HkCe+b10uFZZkFdvf98LHW21k49W8o8J366lqVKY= +github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.5.0/go.mod h1:acH3+MQoiMzozT/ivU+DbRg7Ooo2298RdRaWcOv+4vM= +github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1/go.mod h1:CM+19rL1+4dFWnOQKwDc7H1KwXTz+h61oUSHyhV0b3o= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.3.2/go.mod h1:72HRZDLMtmVQiLG2tLfQcaWLCssELvGl+Zf2WVxMmR8= github.com/aws/aws-sdk-go-v2/service/sso v1.4.2/go.mod h1:NBvT9R1MEF+Ud6ApJKM0G+IkPchKS7p7c2YPKwHmBOk= github.com/aws/aws-sdk-go-v2/service/sts v1.7.2/go.mod h1:8EzeIqfWt2wWT4rJVu3f21TfrhJ8AEMzVybRNSb/b4g= +github.com/aws/smithy-go v1.5.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= +github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= +github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= 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/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932/go.mod h1:NOuUCSz6Q9T7+igc/hlvDOUdtWKryOrtFyIVABv/p7k= +github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= +github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= +github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= +github.com/bsm/sarama-cluster v2.1.13+incompatible/go.mod h1:r7ao+4tTNXvWm+VRpRJchr2kQhqxgmAp2iEX5W96gMM= +github.com/casbin/casbin/v2 v2.31.6/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg= +github.com/casbin/casbin/v2 v2.37.0/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg= +github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= +github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= +github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= +github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/logex v1.2.0/go.mod h1:9+9sk7u7pGNWYMkh0hdiL++6OeibzJccyQU4p4MedaY= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/readline v1.5.0/go.mod h1:x22KAscuvRqlLoK9CsoYsmxoXZMMFVyOl86cAH8qUic= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/chzyer/test v0.0.0-20210722231415-061457976a23/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= +github.com/clbanning/mxj v1.8.4/go.mod h1:BVjHeAH+rl9rs6f+QIpeRl0tfu10SXn1pUSa5PVGJng= +github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20220314180256-7f1daf1720fc/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b h1:ACGZRIr7HsgBKHsueQ1yM4WaVaXh21ynwqsF8M8tXhA= github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/go-systemd/v22 v22.4.0 h1:y9YHcjnjynCd/DVbg5j9L/33jQM3MxJlbj/zWskzfGU= github.com/coreos/go-systemd/v22 v22.4.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/crossdock/crossdock-go v0.0.0-20160816171116-049aabb0122b/go.mod h1:v9FBN7gdVTpiD/+LZ7Po0UKvROyT87uLVxTHVky/dlQ= +github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dennwc/varint v1.0.0 h1:kGNFFSSw8ToIy3obO/kKr8U9GZYUAxQEVuix4zfDWzE= github.com/dennwc/varint v1.0.0/go.mod h1:hnItb35rvZvJrbTALZtY/iQfDs48JKRG1RPpgziApxA= +github.com/dgraph-io/badger/v3 v3.2103.2/go.mod h1:RHo4/GmYcKKh5Lxu63wLEMHJ70Pac2JqZRYGhlyAo2M= +github.com/dgraph-io/badger/v3 v3.2103.3/go.mod h1:4MPiseMeDQ3FNCYwRbbcBOGJLf5jsE0PPFzRiKjtcdw= +github.com/dgraph-io/badger/v3 v3.2103.4/go.mod h1:4MPiseMeDQ3FNCYwRbbcBOGJLf5jsE0PPFzRiKjtcdw= +github.com/dgraph-io/badger/v3 v3.2103.5/go.mod h1:4MPiseMeDQ3FNCYwRbbcBOGJLf5jsE0PPFzRiKjtcdw= +github.com/dgraph-io/ristretto v0.1.0/go.mod h1:fux0lOrBhrVCJd3lcTHsIJhq1T2rokOu6v9Vcb3Q9ug= +github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= +github.com/dgryski/go-sip13 v0.0.0-20200911182023-62edffca9245/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/digitalocean/godo v1.95.0 h1:S48/byPKui7RHZc1wYEPfRvkcEvToADNb5I3guu95xg= github.com/digitalocean/godo v1.95.0/go.mod h1:NRpFznZFvhHjBoqZAaOD3khVzsJ3EibzKqFL4R60dmA= +github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= +github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v20.10.23+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker v23.0.1+incompatible h1:vjgvJZxprTTE1A37nm+CLNAdwu6xZekyoiVlUZEINcY= github.com/docker/docker v23.0.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= +github.com/eapache/go-resiliency v1.2.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= +github.com/eapache/go-resiliency v1.3.0/go.mod h1:5yPzW0MIvSe0JDsv0v+DvcjEv2FyD6iZYSs1ZI+iQho= +github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= +github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= +github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/edsrzf/mmap-go v1.1.0 h1:6EUwBLQ/Mcr1EYLE4Tn1VdW1A4ckqCQWZBw8Hr0kjpQ= github.com/edsrzf/mmap-go v1.1.0/go.mod h1:19H/e8pUPLicwkyNgOykDXkJ9F0MHE+Z52B8EIth78Q= +github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= +github.com/emicklei/go-restful/v3 v3.8.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/emicklei/go-restful/v3 v3.9.0 h1:XwGDlfxEnQZzuopoqxwSEllNcCOM9DhhFyhFIIGKwxE= github.com/emicklei/go-restful/v3 v3.9.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= +github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/go-control-plane v0.10.3 h1:xdCVXxEe0Y3FQith+0cj2irwZudqGYvecuLB1HtdexY= github.com/envoyproxy/go-control-plane v0.10.3/go.mod h1:fJJn/j26vwOu972OllsvAgJJM//w9BV6Fxbg2LuVd34= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo= github.com/envoyproxy/protoc-gen-validate v0.9.1 h1:PS7VIOgmSVhWUEeZwTe7z7zouA22Cr590PzXKbZHOVY= github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w= +github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= +github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= +github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= +github.com/fatih/color v1.12.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= +github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBdXk= github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= +github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= +github.com/franela/goblin v0.0.0-20210519012713-85d372ac71e2/go.mod h1:VzmDKDJVZI3aJmnRI9VjAn9nJ8qPPsN1fqzr9dqInIo= +github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= +github.com/frankban/quicktest v1.4.0/go.mod h1:36zfPVQyHxymz4cH7wlDmVwDrJuljRB60qkgn7rorfQ= github.com/frankban/quicktest v1.14.0/go.mod h1:NeW+ay9A/U67EYXNFA1nPE8e/tnQv/09mUdL/ijj8og= +github.com/frankban/quicktest v1.14.2/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= +github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= +github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg= +github.com/gdamore/tcell v1.3.0/go.mod h1:Hjvr+Ofd+gLglo7RYKxxnzCBmev3BzsS67MebKS4zMM= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g= +github.com/go-fonts/latin-modern v0.2.0/go.mod h1:rQVLdDMK+mK1xscDwsqM5J8U2jrRa3T0ecnM9pNujks= +github.com/go-fonts/liberation v0.1.1/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= +github.com/go-fonts/liberation v0.2.0/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= +github.com/go-fonts/stix v0.1.0/go.mod h1:w/c1f0ldAUlJmLBvlbkvVXLAD+tAMqobIIQpmnUIzUY= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.11.0/go.mod h1:73/6Ixaufkvb5Osvkls8C79vuQ49Ba1rUEUYNSf+FUw= +github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07/go.mod h1:CO1AlKB2CSIqUrmQPqA0gdRIlnLEY0gK5JGjh37zN5U= +github.com/go-latex/latex v0.0.0-20210823091927-c0d11ff05a81/go.mod h1:SX0U8uGpxhq9o2S/CELCSUxEWWAuoCUcVCQWv7G2OCk= github.com/go-ldap/ldap v3.0.2+incompatible/go.mod h1:qfd9rJvER9Q0/D/Sqn1DfHRoBp40uXYvFoEVrNEPqRc= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= +github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= +github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= @@ -213,31 +826,48 @@ github.com/go-openapi/errors v0.20.3/go.mod h1:Z3FlZ4I8jEGxjUK+bugx3on2mIAk4txuA github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= github.com/go-openapi/jsonreference v0.19.6/go.mod h1:diGHMEHg2IqXZGKxqyvWdfWU/aim5Dprw5bqpKkTvns= github.com/go-openapi/jsonreference v0.20.0 h1:MYlu0sBgChmCfJxxUKZ8g1cPWFOB37YSZqewK7OKeyA= github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXymS4zJbYVCZmcgkasdo= github.com/go-openapi/loads v0.21.1/go.mod h1:/DtAMXXneXFjbQMGEtbamCZb+4x7eGwkvZCvBmwUG+g= github.com/go-openapi/loads v0.21.2 h1:r2a/xFIYeZ4Qd2TnGpWDIQNcP80dIaZgf704za8enro= github.com/go-openapi/loads v0.21.2/go.mod h1:Jq58Os6SSGz0rzh62ptiu8Z31I+OTHqmULx5e/gJbNw= +github.com/go-openapi/runtime v0.23.3/go.mod h1:AKurw9fNre+h3ELZfk6ILsfvPN+bvvlaU/M9q/r9hpk= +github.com/go-openapi/runtime v0.25.0/go.mod h1:Ux6fikcHXyyob6LNWxtE96hWwjBPYF0DXgVFuMTneOs= github.com/go-openapi/spec v0.20.4/go.mod h1:faYFR1CvsJZ0mNsmsphTMSoRrNV3TEDoAM7FOEWeq8I= +github.com/go-openapi/spec v0.20.5/go.mod h1:QbfOSIVt3/sac+a1wzmKbbcLXm5NdZnyBZYtCijp43o= github.com/go-openapi/spec v0.20.6/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6VaaBKcWA= github.com/go-openapi/spec v0.20.7 h1:1Rlu/ZrOCCob0n+JKKJAWhNWMPW8bOZRg8FJaY+0SKI= github.com/go-openapi/spec v0.20.7/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6VaaBKcWA= github.com/go-openapi/strfmt v0.21.0/go.mod h1:ZRQ409bWMj+SOgXofQAGTIo2Ebu72Gs+WaRADcS5iNg= github.com/go-openapi/strfmt v0.21.1/go.mod h1:I/XVKeLc5+MM5oPNN7P6urMOpuLXEcNrCX/rPGuWb0k= +github.com/go-openapi/strfmt v0.21.2/go.mod h1:I/XVKeLc5+MM5oPNN7P6urMOpuLXEcNrCX/rPGuWb0k= github.com/go-openapi/strfmt v0.21.3 h1:xwhj5X6CjXEZZHMWy1zKJxvW9AfHC9pkyUjLvHtKG7o= github.com/go-openapi/strfmt v0.21.3/go.mod h1:k+RzNO0Da+k3FrrynSNN8F7n/peCmQQqbbXjtDfvmGg= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-openapi/swag v0.21.1/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= +github.com/go-openapi/swag v0.22.1/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-openapi/validate v0.21.0/go.mod h1:rjnrwK57VJ7A8xqfpAOEKRH8yQSGUriMu5/zuPSQ1hg= github.com/go-openapi/validate v0.22.0 h1:b0QecH6VslW/TxtpKgzpO1SNG7GU2FsaqKdP1E2T50Y= github.com/go-openapi/validate v0.22.0/go.mod h1:rjnrwK57VJ7A8xqfpAOEKRH8yQSGUriMu5/zuPSQ1hg= +github.com/go-pdf/fpdf v0.5.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= +github.com/go-pdf/fpdf v0.6.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= +github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= +github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= +github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= github.com/go-resty/resty/v2 v2.1.1-0.20191201195748-d7b97669fe48 h1:JVrqSeQfdhYRFk24TvhTZWU0q8lfCojxZQFi3Ou7+uY= github.com/go-resty/resty/v2 v2.1.1-0.20191201195748-d7b97669fe48/go.mod h1:dZGr0i9PLlaaTD4H/hoZIDjQ+r6xq8mgbRzHZf7f2J8= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/go-test/deep v1.0.2-0.20181118220953-042da051cf31/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= +github.com/go-zookeeper/zk v1.0.2/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw= github.com/go-zookeeper/zk v1.0.3 h1:7M2kwOsc//9VeeFiPtf+uSJlVpU66x9Ba5+8XK7/TDg= github.com/go-zookeeper/zk v1.0.3/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw= github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0= @@ -264,13 +894,19 @@ github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWe github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ= github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0= github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= +github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/goccy/go-yaml v1.9.5/go.mod h1:U/jl18uSupI5rdI2jmuCswEA2htH9eXfferR3KfscvA= +github.com/gocql/gocql v0.0.0-20211222173705-d73e6b1002a7/go.mod h1:3gM2c4D3AnkISwBxGnMMsS8Oy4y2lhbPRsH4xnJrHG8= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/gofrs/uuid v4.3.1+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang-jwt/jwt/v4 v4.2.0 h1:besgBTC8w8HjP6NzQdxwKH9Z5oQMZ24ThTrHp3cZ8eU= github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -285,6 +921,8 @@ github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -300,14 +938,21 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +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/flatbuffers v1.12.1/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= +github.com/google/flatbuffers v2.0.8+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/gnostic v0.5.7-v3refs h1:FhTMOKj2VhjpouxvWJAV1TL304uMlb9zcDqkl6cEI54= github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -329,10 +974,14 @@ github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.1.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/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= @@ -340,31 +989,78 @@ github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20230111200839-76d1ae5aea2b/go.mod h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= +github.com/googleapis/enterprise-certificate-proxy v0.2.1/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k= github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= +github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= +github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= +github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= +github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= +github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= +github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= github.com/googleapis/gax-go/v2 v2.7.0 h1:IcsPKeInNvYi7eqSaDjiZqDDKu5rsmunY0Y1YupQSSQ= github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= +github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= +github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gophercloud/gophercloud v1.1.1 h1:MuGyqbSxiuVBqkPZ3+Nhbytk1xZxhmfCB2Rg1cJWFWM= github.com/gophercloud/gophercloud v1.1.1/go.mod h1:aAVqcocTSXh2vYFZ1JTvx4EQmfgzxRcNupUfxZbBNDM= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= +github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= +github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= +github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= 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/grafana/regexp v0.0.0-20221122212121-6b5c0a4cb7fd h1:PpuIBO5P3e9hpqBD0O/HjhShYuM6XE0i/lbE6J94kww= github.com/grafana/regexp v0.0.0-20221122212121-6b5c0a4cb7fd/go.mod h1:M5qHK+eWfAv8VR/265dIuEpL3fNfeC21tXXp9itM24A= +github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.1/go.mod h1:G+WkljZi4mflcqVxYSgvt8MNctRQHjEH8ubKtt1Ka3w= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3/go.mod h1:o//XUCC/F+yRGJoPO/VU0GSB0f8Nhgmxx0VIRUvaC0w= +github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw= +github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed/go.mod h1:tMWxXQ9wFIaZeTI9F+hmhFiGpFmhOHzyShyFUhRm0H4= +github.com/hashicorp/consul/api v1.8.1/go.mod h1:sDjTOq0yUyv5G4h+BqSea7Fn6BU+XbolEz1952UB+mk= +github.com/hashicorp/consul/api v1.10.1/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= +github.com/hashicorp/consul/api v1.12.0/go.mod h1:6pVBMo0ebnYdt2S3H87XhekM/HHrUoTD2XXb/VrZVy0= github.com/hashicorp/consul/api v1.13.0/go.mod h1:ZlVrynguJKcYr54zGaDbaL3fOvKC9m72FhPvA8T35KQ= +github.com/hashicorp/consul/api v1.15.3/go.mod h1:/g/qgcoBcEXALCNZgRRisyTW0nY86++L0KbeAMXYCeY= +github.com/hashicorp/consul/api v1.18.0/go.mod h1:owRRGJ9M5xReDC5nfT8FTJrNAPbT4NM6p/k+d03q2v4= +github.com/hashicorp/consul/api v1.19.1/go.mod h1:jAt316eYgWGNLJtxkMQrcqRpuDE/kFJdqkEFwRXFv8U= github.com/hashicorp/consul/api v1.20.0 h1:9IHTjNVSZ7MIwjlW3N3a7iGiykCMDpxZu8jsxFJh0yc= github.com/hashicorp/consul/api v1.20.0/go.mod h1:nR64eD44KQ59Of/ECwt2vUmIK2DKsDzAwTmwmLl8Wpo= +github.com/hashicorp/consul/sdk v0.7.0/go.mod h1:fY08Y9z5SvJqevyZNy6WWPXiG3KwBPAvlcdx16zZ0fM= github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= +github.com/hashicorp/consul/sdk v0.11.0/go.mod h1:yPkX5Q6CsxTFMjQQDJwzeNmUUF5NUGGbrDsv9wTb8cw= +github.com/hashicorp/consul/sdk v0.13.0/go.mod h1:0hs/l5fOVhJy/VdcoaNqUSi2AUs95eF5WKtv+EYIQqE= +github.com/hashicorp/consul/sdk v0.13.1 h1:EygWVWWMczTzXGpO93awkHFzfUka6hLYJ0qhETd+6lY= +github.com/hashicorp/consul/sdk v0.13.1/go.mod h1:SW/mM4LbKfqmMvcFu8v+eiQQ7oitXEFeiBe9StxERb0= github.com/hashicorp/cronexpr v1.1.1 h1:NJZDd87hGXjoZBdvyCF9mX4DCq5Wy7+A/w+A7q0wn6c= github.com/hashicorp/cronexpr v1.1.1/go.mod h1:P4wA0KBl9C5q2hABiMO7cp6jcIg96CDh1Efb3g1PWA4= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= @@ -377,17 +1073,31 @@ github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9 github.com/hashicorp/go-hclog v0.8.0/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-hclog v1.3.1 h1:vDwF1DFNZhntP4DAjuTpOw3uEgMUpXh1pB5fW9DqHpo= +github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-hclog v0.16.2/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-hclog v1.2.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-hclog v1.2.1/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= +github.com/hashicorp/go-hclog v1.2.2/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= github.com/hashicorp/go-hclog v1.3.1/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= +github.com/hashicorp/go-hclog v1.4.0 h1:ctuWFGrhFha8BnnzxqeRGidlEcQkDyL5u8J8t5eA11I= +github.com/hashicorp/go-hclog v1.4.0/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-immutable-radix v1.3.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-msgpack v0.5.5 h1:i9R9JSrqIz0QVLz3sz+i3YJdT7TTSLcfLLzJi9aZTuI= +github.com/hashicorp/go-msgpack v0.5.5/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-plugin v1.0.1/go.mod h1:++UyYGoz3o5w9ZzAdZxtQKrWWP+iqPBn3cQptSMzBuY= +github.com/hashicorp/go-plugin v1.4.3/go.mod h1:5fGEH17QVwTTcR0zV7yhDPLLmFX9YSZ38b18Udy6vYQ= +github.com/hashicorp/go-plugin v1.4.4/go.mod h1:viDMjcLJuDui6pXb8U4HVfb8AamCWhHGUjr2IrTF67s= +github.com/hashicorp/go-plugin v1.4.5/go.mod h1:viDMjcLJuDui6pXb8U4HVfb8AamCWhHGUjr2IrTF67s= +github.com/hashicorp/go-plugin v1.4.6/go.mod h1:viDMjcLJuDui6pXb8U4HVfb8AamCWhHGUjr2IrTF67s= +github.com/hashicorp/go-plugin v1.4.8/go.mod h1:viDMjcLJuDui6pXb8U4HVfb8AamCWhHGUjr2IrTF67s= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-retryablehttp v0.5.4/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-retryablehttp v0.7.1 h1:sUiuQAnLlbvmExtFQs72iFW/HXeUn8Z1aJLQ4LJJbTQ= @@ -396,44 +1106,90 @@ github.com/hashicorp/go-rootcerts v1.0.1/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR3 github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc= github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8= +github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= +github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/golang-lru v0.6.0 h1:uL2shRDx7RTrOrTCUZEGP/wJUFiUI8QT6E7z5o8jga4= github.com/hashicorp/golang-lru v0.6.0/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= +github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY= github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= +github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= +github.com/hashicorp/memberlist v0.3.1/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= +github.com/hashicorp/memberlist v0.5.0 h1:EtYPN8DpAURiapus508I4n9CzHs2W+8NZGbmmR/prTM= github.com/hashicorp/memberlist v0.5.0/go.mod h1:yvyXLpo0QaGE59Y7hDTsTzDD25JYBZ4mHgHUZ8lrOI0= github.com/hashicorp/nomad/api v0.0.0-20230124213148-69fd1a0e4bf7 h1:XOdd3JHyeQnBRxotBo9ibxBFiYGuYhQU25s/YeV2cTU= github.com/hashicorp/nomad/api v0.0.0-20230124213148-69fd1a0e4bf7/go.mod h1:xYYd4dybIhRhhzDemKx7Ddt8CvCosgrEek8YM7/cF0A= +github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= +github.com/hashicorp/serf v0.9.7/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= +github.com/hashicorp/serf v0.9.8/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= github.com/hashicorp/serf v0.10.1 h1:Z1H2J60yRKvfDYAOZLd2MU0ND4AH/WDz7xYHDWQsIPY= github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4= github.com/hashicorp/vault/api v1.0.4/go.mod h1:gDcqh3WGcR1cpF5AJz/B1UFheUEneMoIospckxBxk6Q= github.com/hashicorp/vault/sdk v0.1.13/go.mod h1:B+hVj7TpuQY1Y/GPbCpffmgd+tSEwvhkWnjtSYCaS2M= github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= +github.com/hashicorp/yamux v0.0.0-20190923154419-df201c70410d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= github.com/hetznercloud/hcloud-go v1.39.0 h1:RUlzI458nGnPR6dlcZlrsGXYC1hQlFbKdm8tVtEQQB0= github.com/hetznercloud/hcloud-go v1.39.0/go.mod h1:mepQwR6va27S3UQthaEPGS86jtzSY9xWL1e9dyxXpgA= +github.com/hjson/hjson-go/v4 v4.0.0 h1:wlm6IYYqHjOdXH1gHev4VoXCaW20HdQAGCxdOEEg2cs= github.com/hjson/hjson-go/v4 v4.0.0/go.mod h1:KaYt3bTw3zhBjYqnXkYywcYctk0A2nxeEFTse3rH13E= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= +github.com/hudl/fargo v1.4.0/go.mod h1:9Ai6uvFy5fQNq6VPKtg+Ceq1+eTY4nKUlR2JElEOcDo= github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20220319035150-800ac71e25c2/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w= +github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc= github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/ionos-cloud/sdk-go/v6 v6.1.3 h1:vb6yqdpiqaytvreM0bsn2pXw+1YDvEk2RKSmBAQvgDQ= github.com/ionos-cloud/sdk-go/v6 v6.1.3/go.mod h1:Ox3W0iiEz0GHnfY9e5LmAxwklsxguuNFEUSu0gVRTME= +github.com/jaegertracing/jaeger v1.34.1/go.mod h1:md+YcRcDgMCAgB9qyXl0PdstYiq8fjA8KG5cNuyV2kA= +github.com/jaegertracing/jaeger v1.35.2/go.mod h1:e7FBVZ14ptsRjwiHEnLyxvOa4bSnZA0BDFE1OcvNiHs= +github.com/jaegertracing/jaeger v1.36.0/go.mod h1:67uyR2zQgEk7EfguOR3eZOGvGDRzY5Yos6n2aaXxq1Y= +github.com/jaegertracing/jaeger v1.38.0/go.mod h1:4MBTMxfCp3d4buDLxRlHnESQvTFCkN16OUIeE9BEdl4= +github.com/jaegertracing/jaeger v1.38.1/go.mod h1:T5RFOZgRQBXR9rpQq8HsiIg39gu0DAYGQbDzpKw9gU8= +github.com/jaegertracing/jaeger v1.39.0/go.mod h1:IEhg51euQ8U9p4kBV7Y7xudmMi8gt6v673y5rlBBT1E= +github.com/jaegertracing/jaeger v1.39.1-0.20221110195127-14c11365a856/go.mod h1:4UMLDc2yEm0f2Djlej2F7B/BMXRpSyVQX8CkuvtQ4nk= +github.com/jaegertracing/jaeger v1.41.0 h1:vVNky8dP46M2RjGaZ7qRENqylW+tBFay3h57N16Ip7M= +github.com/jaegertracing/jaeger v1.41.0/go.mod h1:SIkAT75iVmA9U+mESGYuMH6UQv6V9Qy4qxo0lwfCQAc= +github.com/jcmturner/aescts/v2 v2.0.0/go.mod h1:AiaICIRyfYg35RUkr8yESTqvSy7csK90qZ5xfvvsoNs= +github.com/jcmturner/dnsutils/v2 v2.0.0/go.mod h1:b0TnjGOvI/n42bZa+hmXL+kFJZsFT7G4t3HTlQ184QM= +github.com/jcmturner/gofork v1.0.0/go.mod h1:MK8+TM0La+2rjBD4jE12Kj1pCCxK7d2LK/UM3ncEo0o= +github.com/jcmturner/gofork v1.7.6/go.mod h1:1622LH6i/EZqLloHfE7IeZ0uEJwMSUyQ/nDd82IeqRo= +github.com/jcmturner/goidentity/v6 v6.0.1/go.mod h1:X1YW3bgtvwAXju7V3LCIMpY0Gbxyjn/mY9zx4tFonSg= +github.com/jcmturner/gokrb5/v8 v8.4.2/go.mod h1:sb+Xq/fTY5yktf/VxLsE3wlfPqQjp0aWNYyvBVK62bc= +github.com/jcmturner/gokrb5/v8 v8.4.3/go.mod h1:dqRwJGXznQrzw6cWmyo6kH+E7jksEQG/CyVWsJEsJO0= +github.com/jcmturner/rpc/v2 v2.0.3/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJki3ELg/Hc= +github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= +github.com/jhump/protoreflect v1.6.0/go.mod h1:eaTn3RZAmMBcV0fifFvlm6VHNz3wSkYyXYWUh7ymB74= 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/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= 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= @@ -451,14 +1207,36 @@ github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfV github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4= github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= 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/asmfmt v1.3.2/go.mod h1:AG8TuvYojzulgDAMCnYn50l/5QV3Bs/tp6j0HLHbNSE= +github.com/klauspost/compress v1.11.12/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= +github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.14.1/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.14.4/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.15.0/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.15.4/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= +github.com/klauspost/compress v1.15.6/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= +github.com/klauspost/compress v1.15.10/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/klauspost/compress v1.15.12/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/klauspost/compress v1.15.13/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/klauspost/compress v1.16.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/klauspost/compress v1.16.3 h1:XuJt9zzcnaz6a16/OU53ZjWp/v7/42WcR5t2a0PcNQY= github.com/klauspost/compress v1.16.3/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/knadh/koanf v1.4.1/go.mod h1:1cfH5223ZeZUOs8FU2UdTmaNfHpqgtjV0+NHjRO43gs= +github.com/knadh/koanf v1.4.2/go.mod h1:4NCo0q4pmU398vF9vq2jStF9MWQZ8JEDcDMHlDCr4h0= +github.com/knadh/koanf v1.4.3/go.mod h1:5FAkuykKXZvLqhAbP4peWgM5CTcZmn7L1d27k/a+kfg= +github.com/knadh/koanf v1.4.4/go.mod h1:Hgyjp4y8v44hpZtPzs7JZfRAW5AhN7KfZcwv1RYggDs= github.com/knadh/koanf v1.5.0 h1:q2TSd/3Pyc/5yP9ldIrSdIz26MCcyNQzW0pEAugLPNs= github.com/knadh/koanf v1.5.0/go.mod h1:Hgyjp4y8v44hpZtPzs7JZfRAW5AhN7KfZcwv1RYggDs= github.com/kolo/xmlrpc v0.0.0-20220921171641-a4b6fa1dd06b h1:udzkj9S/zlT5X367kqJis0QP7YMxobob6zhzq6Yre00= @@ -470,15 +1248,26 @@ github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/linode/linodego v1.12.0 h1:33mOIrZ+gVva14gyJMKPZ85mQGovAvZCEP1ftgmFBjA= github.com/linode/linodego v1.12.0/go.mod h1:NJlzvlNtdMRRkXb0oN6UWzUkj6t+IBsyveHgZ5Ppjyk= +github.com/lucasb-eyer/go-colorful v1.0.2/go.mod h1:0MS4r+7BZKSJ5mw4/S5MPN+qHFF1fYclkSPilDOKW0s= +github.com/lucasb-eyer/go-colorful v1.0.3/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= github.com/lyft/protoc-gen-star v0.6.0/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= +github.com/lyft/protoc-gen-star v0.6.1/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= @@ -489,6 +1278,7 @@ github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kN github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= @@ -497,17 +1287,29 @@ github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hd github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.8/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-sqlite3 v1.14.14/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/matttproud/golang_protobuf_extensions v1.0.2/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= +github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4= github.com/miekg/dns v1.1.50 h1:DQUfb9uc6smULcREF09Uc+/Gd46YWqJd5DbpPE9xkcA= github.com/miekg/dns v1.1.50/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME= +github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY= +github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3/go.mod h1:RagcQ7I8IeTMnF8JTXieKnO4Z6JCsikNEzj0DwauVzE= +github.com/minio/highwayhash v1.0.1/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= +github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= +github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db/go.mod h1:l0dey0ia/Uv7NcFFVbCLtqEBQbrT4OCwCSKTEv6enCw= github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= @@ -515,18 +1317,27 @@ github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= +github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= github.com/mitchellh/hashstructure/v2 v2.0.2 h1:vGKWl0YJqUNxE8d+h8f6NJLcCJrgbhC4NcD46KavDd4= github.com/mitchellh/hashstructure/v2 v2.0.2/go.mod h1:MG3aRVU/N29oo/V/IhBX8GR/zz4kQkprJgF2EVszyDE= +github.com/cnf/structhash v0.0.0-20201127153200-e1b16c1ebc08 h1:ox2F0PSMlrAAiAdknSRMDrAr8mfxPCfSZolH+/qQnyQ= +github.com/cnf/structhash v0.0.0-20201127153200-e1b16c1ebc08/go.mod h1:pCxVEbcm3AMg7ejXyorUXi6HQCzOIBf7zEDVPtw0/U4= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= +github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 h1:dcztxKSvZ4Id8iPpHERQBbIJfabdt4wUm5qy3wOL2Zc= +github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= 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= @@ -534,61 +1345,166 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= 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/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= +github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= +github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= +github.com/mostynb/go-grpc-compression v1.1.16/go.mod h1:xxa6UoYynYS2h+5HB/Hglu81iYAp87ARaNmhhwi0s1s= github.com/mostynb/go-grpc-compression v1.1.17 h1:N9t6taOJN3mNTTi0wDf4e3lp/G/ON1TP67Pn0vTUA9I= github.com/mostynb/go-grpc-compression v1.1.17/go.mod h1:FUSBr0QjKqQgoDG/e0yiqlR6aqyXC39+g/hFLDfSsEY= +github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= 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/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= +github.com/nats-io/jwt v1.2.2/go.mod h1:/xX356yQA6LuXI9xWW7mZNpxgF2mBmGecH+Fj34sP5Q= +github.com/nats-io/jwt/v2 v2.0.2/go.mod h1:VRP+deawSXyhNjXmxPCHskrR6Mq50BqpEI5SEcNiGlY= +github.com/nats-io/jwt/v2 v2.0.3/go.mod h1:VRP+deawSXyhNjXmxPCHskrR6Mq50BqpEI5SEcNiGlY= +github.com/nats-io/nats-server/v2 v2.2.6/go.mod h1:sEnFaxqe09cDmfMgACxZbziXnhQFhwk+aKkZjBBRYrI= +github.com/nats-io/nats-server/v2 v2.5.0/go.mod h1:Kj86UtrXAL6LwYRA6H4RqzkHhK0Vcv2ZnKD5WbQ1t3g= +github.com/nats-io/nats.go v1.11.0/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= +github.com/nats-io/nats.go v1.12.1/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= +github.com/nats-io/nkeys v0.2.0/go.mod h1:XdZpAbhgyyODYqjTawOnIOI7VlbKSarI9Gfy1tqEu/s= +github.com/nats-io/nkeys v0.3.0/go.mod h1:gvUNGjVcM2IPr5rCsRsC6Wb3Hr2CQAm08dsxtV6A5y4= +github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/npillmayer/nestext v0.1.3/go.mod h1:h2lrijH8jpicr25dFY+oAJLyzlya6jhnuG+zWp9L0Uk= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= +github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU= github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/olivere/elastic v6.2.37+incompatible/go.mod h1:J+q1zQJTgAz9woqsbVRqGeB5G1iqDKVBWLNSYW8yfJ8= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E= +github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= +github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= +github.com/onsi/ginkgo/v2 v2.1.4/go.mod h1:um6tUpWM/cxCK3/FK8BXqEiUMUwRgSM4JXG47RKZmLU= +github.com/onsi/ginkgo/v2 v2.1.6/go.mod h1:MEH45j8TBi6u9BMogfbp0stKC5cdGjumZj5Y7AG4VIk= +github.com/onsi/ginkgo/v2 v2.3.0/go.mod h1:Eew0uilEqZmIEZr8JrvYlvOM7Rr6xzTmMV8AyFNU9d0= +github.com/onsi/ginkgo/v2 v2.4.0 h1:+Ig9nvqgS5OBSACXNk15PLdp0U9XPYROt9CFzVdFGIs= +github.com/onsi/ginkgo/v2 v2.4.0/go.mod h1:iHkDK1fKGcBoEHT5W7YBq4RFWaQulw+caOMkAt4OrFo= +github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY= +github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= +github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= +github.com/onsi/gomega v1.20.1/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo= +github.com/onsi/gomega v1.21.1/go.mod h1:iYAIXgPSaDHak0LCMA+AWBpIKBr8WZicMxnE8luStNc= +github.com/onsi/gomega v1.22.1/go.mod h1:x6n7VNe4hw0vkyYUM4mjIXx3JbLiPaBPNgB7PRQ1tuM= +github.com/onsi/gomega v1.23.0 h1:/oxKu9c2HVap+F3PfKort2Hw5DEU+HGlW8n+tguWsys= +github.com/onsi/gomega v1.23.0/go.mod h1:Z/NWtiqwBrwUt4/2loMmHL63EDLnYHmVbuBpDr2vQAg= +github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/open-telemetry/opentelemetry-collector-contrib/exporter/fileexporter v0.74.0 h1:WTFx6kiRlr3qHTIsVeKeA6AjstEy2aNB6ZGKeF05XwE= github.com/open-telemetry/opentelemetry-collector-contrib/exporter/fileexporter v0.74.0/go.mod h1:2R1P84dGqCTt6+a0Wtox1VYIT304JXU32zloC275BxQ= github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusexporter v0.74.0 h1:sg7L0mW4oPu98lvbSk0ksO2E2pH1PVp72W0Izm7px7Q= github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusexporter v0.74.0/go.mod h1:DPrN5PlAvf0rQ2l72V+i94OA1D0oJSLE7kV69WVOQY0= +github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter v0.73.0/go.mod h1:L2kBFr/UBirzxrP7IztsyGjqSb1kKLgY1NKRegtIeaU= +github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter v0.74.0 h1:1DwD5J3voytfldOYEbi8TpO98KwT+tY1u1hXfqBcjHQ= +github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter v0.74.0/go.mod h1:RcR/iLnL0wbVJR0EGzB3JgEauIIPmN/LiydHgXWA9C0= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.74.0 h1:A+6ORAvf9b8cKq8wduxB0vVcFm3ZRjH/etYPWca8xvA= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.74.0/go.mod h1:cLVHnu/7vwt+zXI7RZuXYF0rR2I2GPgzsnha+jgirfE= github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.74.0 h1:EQ9+r7sOgnZmXcRc3UIoEpUaBDt2Fo7lWGh3ipfy+7c= github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.74.0/go.mod h1:H7RBK86WDrVyICR+/9y+4XhHTJWe65uXKdODBU/BmPE= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.73.0/go.mod h1:idhose/LqWb0zRcbdOB7+9OzSVMTynKYn8gkiwM/xmY= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.74.0 h1:SUlZZPqhPs0FUtq8ck07P2jUnxiNY6iGdqoKVSVSoOU= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.74.0/go.mod h1:P2DYdIn98UnyNQPai63v2LNOpC6Wq7Q5CSEIYTg9ZxU= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.52.0/go.mod h1:CIX1MWy+2JYdeYhqjK89vrRpCGbz6LTLinp+SM8kZyo= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.54.0/go.mod h1:CSe1wsnLhSAEgAEXLfi8wTyl0VwPVkq7925aV8xm0oM= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.57.2/go.mod h1:xPchY5YNOL9jr6phVkJEvkEakMYr8HMD4uGYEoKXIek= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.61.0/go.mod h1:gGprfSuPLNWQlYQTinPY4joqsjXAYO5RCEwkOeSCMrk= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.63.0/go.mod h1:Vo92E1v3sPewq/74L573iW9dCJl40na+Heum93YGbPQ= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.64.0/go.mod h1:ObdNIb1QMMQpLDrqEGf2IP9WjTD0+Y3PNOiDmnoJnlI= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.68.0/go.mod h1:Fgmw5VwswjZn4PrMmbj9KyYdMz+L7UjcQRs4juhtvS4= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.73.0/go.mod h1:WD0hPhMuyROSaxL7mtY5NBK3uK5x+UP5UCaLpnF0mHc= github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.74.0 h1:vU5ZebauzCuYNXFlQaWaYnOfjoOAnS+Sc8+oNWoHkbM= github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.74.0/go.mod h1:TEu3TnUv1TuyHtjllrUDQ/ImpyD+GrkDejZv4hxl3G8= github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent v0.74.0 h1:COFBWXiWnhRs9x1oYJbDg5cyiNAozp8sycriD9+1/7E= github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent v0.74.0/go.mod h1:cAKlYKU+/8mk6ETOnD+EAi5gpXZjDrGweAB9YTYrv/g= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.74.0 h1:DmOc+i5N1Ut23tJnHJUIcne5JWnYh6x2VL7YG4PP+tg= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.74.0/go.mod h1:es8A1y7SyZN9H4D9YGBod8+9akmD+4wFFc0mlSvpKNk= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.73.0/go.mod h1:ugLgD7+j4q9QzwvvacGcT+36mMrcM5FN4PdGwkZVdOA= github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.74.0 h1:9zWdiR9+bem0LvvWWoMZU6R3xTmu0WbcAPe8kI/jpyk= github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.74.0/go.mod h1:3RViz8fguswWAFR+8W2Kzmch3eecOVK935QVsBdpUk4= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.73.0/go.mod h1:5Dc2kBZe0b5zUFVi1qt3KGdrdyI8to7IO5cd6OE0y20= github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.74.0 h1:HQGFpz3olAA1AGH1AgVKV2dygf9QGyQF7cwTMFDdthI= github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.74.0/go.mod h1:Nw7FXUNb5aKbHxdJvXPOh382a9P0dTKfsrIv4ZIXjig= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.52.0/go.mod h1:tU7s/ki/QePSIZ7ExYGWLMb9erCAt66brQHBEHxr8HU= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.54.0/go.mod h1:uWFgO68sLEqWrQxL8rws1CkB8EUNQaedP3FWI1gMJOU= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.57.2/go.mod h1:4rFuWKMbzM9H39RbDvPtJfAp/fxsHydhJhKns6skmK0= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.61.0/go.mod h1:qxWGU2qCEulGmmGsiq7jy3hWgTDyHtRQGeU6XuYGL7Q= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.63.0/go.mod h1:w5rHiSvZJ110BJE/xLQxtlCGEELhfJ46dPR7XAHBXHE= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.64.0/go.mod h1:jJsonfsWxJ9iHaYe6e2f/TtN+yVmjOl8qDzzOtRfL4E= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.68.0/go.mod h1:eDoCwC+kt+en/nz9GhNveg+EDCVxsXecddv2lHX7O/8= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.73.0/go.mod h1:i1JP3T6TJRJNk/i1D2bHPF481FUvM4McFC+j0C1sj6I= github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.74.0 h1:KaNIB5+iuKpTxFcOKP7NEnxXcEi16dFQSkfeZBgUgQc= github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.74.0/go.mod h1:wglIjSJcaZjTZwC21Aiem0lYWPRpQ9ta7ntzT2roLSY= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheusremotewrite v0.73.0/go.mod h1:Mx1IT+/6c8pyBilGzwepTGgzuW6Dl0Pk2vKkVHOavpY= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheusremotewrite v0.74.0 h1:/ZhZsv9t8p7Gbn/T00rf3e9v1uYieRL4luJ5QG8fxPQ= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheusremotewrite v0.74.0/go.mod h1:1bDXfyMUXng8/6g7ZbFCClw54dBWE639rPDYm3zEE8s= github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor v0.74.0 h1:RRXvzgK5TCT8szonERO+BlVmTDahtRE0vu9B7C1J+s8= github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor v0.74.0/go.mod h1:LISh6PelAL9fA7bw8dmuXT2BG8p9Pto3jJ22/ktuxqs= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.74.0 h1:JP0wF/0RiXEDPWHvIaExy/vh5vKoBdeCZmnzhgx8j24= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.74.0/go.mod h1:fDI6mlvqp+apb2qbiiciiDrHE+yD3MJrkaBC3FsH54k= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM= github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opentracing-contrib/go-grpc v0.0.0-20191001143057-db30781987df/go.mod h1:DYR5Eij8rJl8h7gblRrOZ8g0kW1umSpKqYIBTgeDtLo= +github.com/opentracing-contrib/go-stdlib v1.0.0/go.mod h1:qtI1ogk+2JhVPIXVc6q+NHziSmy2W5GbdQZFUHADCBU= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= +github.com/openzipkin/zipkin-go v0.2.5/go.mod h1:KpXfKdgRDnnhsxw4pNIH9Md5lyFqKUa4YDFlwRYAMyE= github.com/ovh/go-ovh v1.3.0 h1:mvZaddk4E4kLcXhzb+cxBsMPYp2pHqiQpWYkInsuZPQ= github.com/ovh/go-ovh v1.3.0/go.mod h1:AxitLZ5HBRPyUd+Zl60Ajaag+rNTdVXWIkzfrVuTXWA= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= +github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/pelletier/go-toml/v2 v2.0.0-beta.8/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= +github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= +github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas= +github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= +github.com/performancecopilot/speed/v4 v4.0.0/go.mod h1:qxrSyuDGrTOWfV+uKRFhfxw6h/4HXRGUiZiufxo49BM= +github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= +github.com/phpdave11/gofpdf v1.4.2/go.mod h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2dXMnm1mY= +github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= +github.com/phpdave11/gofpdi v1.0.13/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= +github.com/pierrec/cmdflag v0.0.2/go.mod h1:a3zKGZ3cdQUfxjd0RGMLZr8xI3nvpJOB+m6o/1X5BmU= +github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pierrec/lz4/v3 v3.3.4/go.mod h1:280XNCGS8jAcG++AHdd6SeWnzyJ1w9oow2vbORyey8Q= github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= +github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= +github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw= github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= +github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U= github.com/prometheus/alertmanager v0.25.0 h1:vbXKUR6PYRiZPRIKfmXaG+dmCKG52RtPL4Btl8hQGvg= github.com/prometheus/alertmanager v0.25.0/go.mod h1:MEZ3rFVHqKZsw7IcNS/m4AWZeXThmJhumpiWR4eHU/w= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= @@ -600,6 +1516,7 @@ github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqr github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= github.com/prometheus/client_golang v1.13.0/go.mod h1:vTeo+zgvILHsnnj/39Ou/1fPN5nJFOEMgftOUOmlvYQ= +github.com/prometheus/client_golang v1.13.1/go.mod h1:vTeo+zgvILHsnnj/39Ou/1fPN5nJFOEMgftOUOmlvYQ= github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= @@ -612,10 +1529,16 @@ github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y8 github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= +github.com/prometheus/common v0.28.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.29.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.30.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.34.0/go.mod h1:gB3sOl7P0TvJabZpLY5uQMpUqRCPPCyRLCZYc7JZTNE= github.com/prometheus/common v0.35.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= +github.com/prometheus/common v0.38.0/go.mod h1:MBXfmBQZrK5XpbCkjofnXs96LD2QQ7fEq4C0xjC/yec= +github.com/prometheus/common v0.39.0/go.mod h1:6XBZ7lYdLCbkAVhwRsWTZn+IN5AB9F/NXd5w0BbEX0Y= +github.com/prometheus/common v0.41.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr1yjz4b7Zbc= github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM= github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr1yjz4b7Zbc= github.com/prometheus/common/assets v0.2.0 h1:0P5OrzoHrYBOSM1OigWL3mY8ZvV2N4zIE/5AahrSrfM= @@ -634,50 +1557,107 @@ github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5 github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= github.com/prometheus/prometheus v0.42.1-0.20230210113933-af1d9e01c7e4 h1:nwb2D5N3gNxMLxZ7ODODKD6ZbxCAaEzGKY3Ks8pXnX4= github.com/prometheus/prometheus v0.42.1-0.20230210113933-af1d9e01c7e4/go.mod h1:Pfqb/MLnnR2KK+0vchiaH39jXxvLMBk+3lnIGP4N7Vk= +github.com/prometheus/statsd_exporter v0.21.0/go.mod h1:rbT83sZq2V+p73lHhPZfMc3MLCHmSHelCh9hSGYNLTQ= github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0= github.com/prometheus/statsd_exporter v0.22.7/go.mod h1:N/TevpjkIh9ccs6nuzY3jQn9dFqnUakOjnEuMPJJJnI= +github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/rhnvrm/simples3 v0.6.1/go.mod h1:Y+3vYm2V7Y4VijFoJHHTrja6OgPrJ2cBti8dPGkC3sA= +github.com/rivo/tview v0.0.0-20200219210816-cd38d7432498/go.mod h1:6lkG1x+13OShEf0EaOCaTQYyB7d5nSbb181KtjlS+84= +github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.6.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= +github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w= +github.com/ruudk/golang-pdf417 v0.0.0-20201230142125-a7e3863a1245/go.mod h1:pQAZKsJ8yyVxGRWYNEm9oFB8ieLgKFnamEyDmSA0BRk= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= +github.com/sagikazarmark/crypt v0.5.0/go.mod h1:l+nzl7KWh51rpzp2h7t4MZWyiEWdhNpOAnclKvg+mdA= +github.com/sagikazarmark/crypt v0.6.0/go.mod h1:U8+INwJo3nBv1m6A/8OBXAq7Jnpspk5AxSgDyEQcea8= +github.com/sagikazarmark/crypt v0.8.0/go.mod h1:TmKwZAo97S4Fy4sfMH/HX/cQP5D+ijra2NyLpNNmttY= +github.com/sanity-io/litter v1.2.0/go.mod h1:JF6pZUFgu2Q0sBZ+HSV35P8TVPI1TTzEwyu9FXAw2W4= github.com/scaleway/scaleway-sdk-go v1.0.0-beta.12 h1:Aaz4T7dZp7cB2cv7D/tGtRdSMh48sRaDYr7Jh0HV4qQ= github.com/scaleway/scaleway-sdk-go v1.0.0-beta.12/go.mod h1:fCa7OJZ/9DRTnOKmxvT6pn+LPWUptQAmHF/SBJUGEcg= +github.com/schollz/progressbar/v2 v2.13.2/go.mod h1:6YZjqdthH6SCZKv2rqGryrxPtfmRB/DWZxSMfCXPyD8= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/shirou/gopsutil/v3 v3.22.4/go.mod h1:D01hZJ4pVHPpCTZ3m3T2+wDF2YAGfd+H4ifUguaQzHM= +github.com/shirou/gopsutil/v3 v3.22.5/go.mod h1:so9G9VzeHt/hsd0YwqprnjHnfARAUktauykSbr+y2gA= +github.com/shirou/gopsutil/v3 v3.22.6/go.mod h1:EdIubSnZhbAvBS1yJ7Xi+AShB/hxwLHOMz4MCYz7yMs= +github.com/shirou/gopsutil/v3 v3.22.8/go.mod h1:s648gW4IywYzUfE/KjXxUsqrqx/T2xO5VqOXxONeRfI= +github.com/shirou/gopsutil/v3 v3.22.9/go.mod h1:bBYl1kjgEJpWpxeHmLI+dVHWtyAwfcmSBLDsp2TNT8A= +github.com/shirou/gopsutil/v3 v3.22.10/go.mod h1:QNza6r4YQoydyCfo6rH0blGfKahgibh4dQmV5xdFkQk= github.com/shirou/gopsutil/v3 v3.23.2 h1:PAWSuiAszn7IhPMBtXsbSCafej7PqUOvY6YywlQUExU= github.com/shirou/gopsutil/v3 v3.23.2/go.mod h1:gv0aQw33GLo3pG8SiWKiQrbDzbRY1K80RyZJ7V4Th1M= +github.com/shoenig/test v0.6.0 h1:rU0ymLHmCRqz14gABce/DzYryKU+uaWqobCBvAY6DtU= +github.com/shoenig/test v0.6.0/go.mod h1:xYtyGBC5Q3kzCNyJg/SjgNpfAa2kvmgA0i5+lQso8x0= github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749 h1:bUGsEnyNbVPw06Bs80sCeARAlK8lhwqGyi6UT8ymuGk= github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/shurcooL/vfsgen v0.0.0-20200824052919-0d455de96546/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= +github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= +github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo= +github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= +github.com/spf13/cobra v1.5.0/go.mod h1:dWXEIy2H428czQCjInthrTRUg7yKbok+2Qi/yBIJoUM= github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA= github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= 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/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/spf13/viper v1.11.0/go.mod h1:djo0X/bA5+tYVoCn+C7cAYJGcVn/qYLFTG8gdUsX7Zk= +github.com/spf13/viper v1.12.0/go.mod h1:b6COn30jlNxbm/V2IqWiNWkJ+vZNiMNksliPCiuKtSI= +github.com/spf13/viper v1.13.0/go.mod h1:Icm2xNL3/8uyh/wFuB1jI7TiTNKp8632Nwegu+zgdYw= +github.com/spf13/viper v1.14.0/go.mod h1:WT//axPky3FdvXHzGw33dNdXXXfFQqmEalje+egj8As= github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= +github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/amqp v1.0.0/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/handy v0.0.0-20200128134331-0f66f006fb2e/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v0.0.0-20161117074351-18a02ba4a312/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -686,38 +1666,81 @@ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= +github.com/stretchr/testify v1.7.4/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.7.5/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stvp/go-udp-testing v0.0.0-20201019212854-469649b16807/go.mod h1:7jxmlfBCDBXRzr0eAQJ48XC1hBu1np4CS5+cHEYfwpc= +github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= +github.com/subosito/gotenv v1.3.0/go.mod h1:YzJjq/33h7nrwdY+iHMhEOEEbW0ovIz0tB6t6PwAXzs= +github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= +github.com/tidwall/gjson v1.10.2 h1:APbLGOM0rrEkd8WBw9C24nllro4ajFuJu0Sc9hRz8Bo= +github.com/tidwall/gjson v1.10.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= +github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs= +github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= +github.com/tidwall/tinylru v1.1.0 h1:XY6IUfzVTU9rpwdhKUF6nQdChgCdGjkMfLzbWyiau6I= +github.com/tidwall/tinylru v1.1.0/go.mod h1:3+bX+TJ2baOLMWTnlyNWHh4QMnFyARg2TLTQ6OFbzw8= +github.com/tidwall/wal v1.1.7 h1:emc1TRjIVsdKKSnpwGBAcsAGg0767SvUk8+ygx7Bb+4= +github.com/tidwall/wal v1.1.7/go.mod h1:r6lR1j27W9EPalgHiB7zLJDYu3mzW5BQP5KrzBpYY/E= +github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk= github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+KdJV0CM= github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7AmcWpGR8lSZfqI= +github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= github.com/tklauser/numcpus v0.6.0 h1:kebhY2Qt+3U6RNK7UqpYNA+tJ23IBEGKkB7JQBfDYms= github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +github.com/uber/jaeger-client-go v2.30.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= +github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= +github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= github.com/vultr/govultr/v2 v2.17.2 h1:gej/rwr91Puc/tgh+j33p/BLR16UrIPnSr+AIwYWZQs= github.com/vultr/govultr/v2 v2.17.2/go.mod h1:ZFOKGWmgjytfyjeyAdhQlSWwTjh2ig+X49cAp50dzXI= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= +github.com/xdg-go/scram v1.1.0/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= +github.com/xdg-go/scram v1.1.2/go.mod h1:RT/sEzTbU5y00aCK8UOx6R7YryM0iF1N2MOmC3kKLN4= github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM= github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= +github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM= +github.com/xhit/go-str2duration v1.2.0/go.mod h1:3cPSlfZlUHVlneIVfePFWcJZsuwf+P1v2SRTV4cUmp4= +github.com/xlab/treeprint v1.1.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= +github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0= +github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= +go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= +go.etcd.io/etcd/api/v3 v3.5.2/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A= go.etcd.io/etcd/api/v3 v3.5.4/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A= +go.etcd.io/etcd/api/v3 v3.5.5/go.mod h1:KFtNaxGDw4Yx/BA4iPPwevUTAuqcsPxzyX8PHydchN8= +go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/pkg/v3 v3.5.2/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/pkg/v3 v3.5.4/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/pkg/v3 v3.5.5/go.mod h1:ggrwbk069qxpKPq8/FKkQ3Xq9y39kbFR4LnKszpRXeQ= +go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= +go.etcd.io/etcd/client/v2 v2.305.2/go.mod h1:2D7ZejHVMIfog1221iLSYlQRzrtECw3kz4I4VAQm3qI= +go.etcd.io/etcd/client/v2 v2.305.4/go.mod h1:Ud+VUwIi9/uQHOMA+4ekToJ12lTxlv0zB/+DHwTGEbU= +go.etcd.io/etcd/client/v2 v2.305.5/go.mod h1:zQjKllfqfBVyVStbt4FaosoX2iYd8fV/GRy/PbowgP4= +go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0= go.etcd.io/etcd/client/v3 v3.5.4/go.mod h1:ZaRkVgBZC+L+dLCjTcF1hRXpgZXQPOvnA/Ak/gq3kiY= +go.etcd.io/etcd/client/v3 v3.5.5/go.mod h1:aApjR4WGlSumpnJ2kloS75h6aHUmAyaPLjHMxpc7E7c= go.mongodb.org/mongo-driver v1.7.3/go.mod h1:NqaYOwnXWr5Pm7AOpO5QFxKJ503nbMse/R79oO62zWg= go.mongodb.org/mongo-driver v1.7.5/go.mod h1:VXEWRZ6URJIkUq2SCAyapmhH0ZLRBP+FT4xhp5Zvxng= +go.mongodb.org/mongo-driver v1.8.3/go.mod h1:0sQWfOeY63QTntERDJJ/0SuKK0T1uVSgKCuAROlKEPY= go.mongodb.org/mongo-driver v1.10.0/go.mod h1:wsihk0Kdgv8Kqu1Anit4sfK+22vSFbUrAVEYRhCXrA8= go.mongodb.org/mongo-driver v1.11.0 h1:FZKhBSTydeuffHj9CBjXlR8vQLee1cQyTWYPA6/tqiE= go.mongodb.org/mongo-driver v1.11.0/go.mod h1:s7p5vEtfbeR1gYi6pnj3c3/urpbLv2T5Sfd6Rp2HBB8= @@ -726,75 +1749,200 @@ go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/collector v0.52.0/go.mod h1:a9GvaOhyc0nVOUzqvdv5mxyWghCSso/WRO2GgRl4I1g= +go.opentelemetry.io/collector v0.54.0/go.mod h1:FgNzyfb4sAGb5cqusB5znETJ8Pz4OQUBGbOeGIZ2rlQ= +go.opentelemetry.io/collector v0.57.2/go.mod h1:9TwWyMRhbFNzaaGLtm/6poWNDJw+etvQMS6Fy+8/8Xs= +go.opentelemetry.io/collector v0.61.0/go.mod h1:515eomlUIwLEXTBwLAEEtl2HPreJy5xtv//LYMk/SZE= +go.opentelemetry.io/collector v0.63.0/go.mod h1:/wnGBrLyrQ804Eh7jZAPh4xJVa9xwbDbGfKQXLil3yM= +go.opentelemetry.io/collector v0.64.0/go.mod h1:yZzWgFxIgd17G/mQO9UbFT5gj8dCyY/Oqw1bDEEGR5E= +go.opentelemetry.io/collector v0.64.1/go.mod h1:RxdEKzwxTEhBAgzC4wzyJEwSFgjWU73CHnLjKUKQDyo= +go.opentelemetry.io/collector v0.68.0/go.mod h1:cxJgs+tqF/KAxlfT+Ev9gAahcSc3j9zdpN+sGSfeCGQ= +go.opentelemetry.io/collector v0.73.0/go.mod h1:DtfQzKUyi/4ZAoUOC2e0acSdqP4BswnrMcRjnV0Nkxc= go.opentelemetry.io/collector v0.74.0 h1:0s2DKWczGj/pLTsXGb1P+Je7dyuGx9Is4/Dri1+cS7g= go.opentelemetry.io/collector v0.74.0/go.mod h1:7NjZAvkhQ6E+NLN4EAH2hw3Nssi+F14t7mV7lMNXCto= +go.opentelemetry.io/collector/component v0.68.0/go.mod h1:3826mXASuiwSwKoCKkRLSiIndvViflYiwg4QxV/Dw7g= +go.opentelemetry.io/collector/component v0.73.0/go.mod h1:6ZmxciGN5aqIDjrR3DDqlR4d3w95+yM2C/uHKNznBR8= go.opentelemetry.io/collector/component v0.74.0 h1:W32ILPgbA5LO+m9Se61hbbtiLM6FYusNM36K5/CCOi0= go.opentelemetry.io/collector/component v0.74.0/go.mod h1:zHbWqbdmnHeIZAuO3s1Fo/kWPC2oKuolIhlPmL4bzyo= +go.opentelemetry.io/collector/confmap v0.68.0/go.mod h1:gvG/g1eSLVHGKbRmn91g7ukfLuBx36hbuMf/ecpSzlE= +go.opentelemetry.io/collector/confmap v0.73.0/go.mod h1:zEYi9hTAYmCHvN3XWxlN8LvHBrhs2FyQ99k7Ox60L1A= go.opentelemetry.io/collector/confmap v0.74.0 h1:tl4fSHC/MXZiEvsZhDhd03TgzvArOe69Qn020sZsTfQ= go.opentelemetry.io/collector/confmap v0.74.0/go.mod h1:NvUhMS2v8rniLvDAnvGjYOt0qBohk6TIibb1NuyVB1Q= go.opentelemetry.io/collector/connector/forwardconnector v0.74.0 h1:lAkWGkRQD5HonCd+2r3WONb2Av8Xk/4ch3J4fUuzSB4= go.opentelemetry.io/collector/connector/forwardconnector v0.74.0/go.mod h1:sn1Yuz6d2Capt9GqrS/GfBNNa2KFeVsI5AhV0lpxCPA= +go.opentelemetry.io/collector/consumer v0.68.0/go.mod h1:t6eNCk7ii4nPN+yMC+Wc+7FWRAnzDU7z06/RqQ9E8R0= +go.opentelemetry.io/collector/consumer v0.73.0/go.mod h1:g49ej965fnT6kEyfefS/cGvqfurC4x0njqU2UFOPIVE= go.opentelemetry.io/collector/consumer v0.74.0 h1:+kjT/ixG+4SVSHg7u9mQe0+LNDc6PuG8Wn2hoL/yGYk= go.opentelemetry.io/collector/consumer v0.74.0/go.mod h1:MuGqt8/OKVAOjrh5WHr1TR2qwHizy64ZP2uNSr+XpvI= +go.opentelemetry.io/collector/exporter v0.73.0/go.mod h1:ttIoT/8hKZwKxQjMKoG9crGeCBgMfeAz9E+2rcF/l5Y= go.opentelemetry.io/collector/exporter v0.74.0 h1:VZxDuVz9kJM/Yten3xA/abJwLJNkxLThiao6E1ULW7c= go.opentelemetry.io/collector/exporter v0.74.0/go.mod h1:kw5YoorpKqEpZZ/a5ODSoYFK1mszzcKBNORd32S8Z7c= go.opentelemetry.io/collector/exporter/loggingexporter v0.73.0 h1:Va2j/kuczRK6B/5T8TVPs701H4EB30idZp3KBkYcfdY= go.opentelemetry.io/collector/exporter/loggingexporter v0.73.0/go.mod h1:Qo0d8LQvn2PZEEc+XVYkM8/iPWLhTx30S7q05iWWQss= go.opentelemetry.io/collector/exporter/otlpexporter v0.73.0 h1:Z7ZZvSG40pkXb1c/aFrtdIDG+v2aWYAHubrhl6hPXm8= go.opentelemetry.io/collector/exporter/otlpexporter v0.73.0/go.mod h1:TdlPRm0+mbr86VR6eMG1lUgf9Z+tR+6zl7Htm3X8dW8= -go.opentelemetry.io/collector/exporter/otlphttpexporter v0.74.0/go.mod h1:f+EVFgK6f9TibQjeEvmUPK9vSMAakmJlAspxEQS94RU= -go.opentelemetry.io/collector/extension/ballastextension v0.74.0/go.mod h1:1Xk+QccstpjInZAn6F1HPgsVHyccT8rTLULDtBFDccM= +go.opentelemetry.io/collector/extension/zpagesextension v0.64.0/go.mod h1:lNcphxX2RM9w8hsMtHxJN27wYlHUM3kbquWLXrChOrc= +go.opentelemetry.io/collector/extension/zpagesextension v0.64.1/go.mod h1:XenhQAUbOHgqNq5YQ/vQIcDHRcPUaDgZQxDC2qoI4Bc= +go.opentelemetry.io/collector/extension/zpagesextension v0.68.0/go.mod h1:5RMJKUEx+/4q63epHSNibnu6LYFH0xZOGylqN/CqNfA= +go.opentelemetry.io/collector/extension/zpagesextension v0.73.0/go.mod h1:jDM9U5zbzwUs0ynmIpiwM3GDv/rATB/i+trhNrPxJP8= go.opentelemetry.io/collector/extension/zpagesextension v0.74.0 h1:hB82OUfwZ1lXd7i/mtwqtizabFhKN/lZpqUhnO//2iM= go.opentelemetry.io/collector/extension/zpagesextension v0.74.0/go.mod h1:0QwkmYH6QxquvqkBWMa09R7rHyfPllw1rGBCuhzbxHc= +go.opentelemetry.io/collector/featuregate v0.68.0/go.mod h1:tewuFKJYalWBU0bmNKg++MC1ipINXUr6szYzOw2p1GI= +go.opentelemetry.io/collector/featuregate v0.73.0/go.mod h1:oIrO4ysPfThwkYKoNlgpHjDU/TgS9kIv2OI74pDUkp4= go.opentelemetry.io/collector/featuregate v0.74.0 h1:hzkzhi6pvjqEK5+CkVBJX69wpEEYqgtTFMHGlZFsQyE= go.opentelemetry.io/collector/featuregate v0.74.0/go.mod h1:pmVMr98Ps6QKyEHiVPN7o3Qd8K//M2NapfOv5BMWvA0= +go.opentelemetry.io/collector/model v0.49.0/go.mod h1:nOYQv9KoFPs6ihJwOi24qB209EOhS9HkwhGj54YiEAw= +go.opentelemetry.io/collector/pdata v0.49.0/go.mod h1:YwmKuiFhNgtmhRdpi8Q8FAWPa0AwJTCSlssSsAtuRcY= +go.opentelemetry.io/collector/pdata v0.52.0/go.mod h1:GJUTfTv8mlYpHRjcmHXVbvJr48EW/q/P/HuBvpXAE58= +go.opentelemetry.io/collector/pdata v0.54.0/go.mod h1:1nSelv/YqGwdHHaIKNW9ZOHSMqicDX7W4/7TjNCm6N8= +go.opentelemetry.io/collector/pdata v0.56.0/go.mod h1:mYcCREWiIJyHss0dbU+GSiz2tmGZ6u09vtfkKTciog4= +go.opentelemetry.io/collector/pdata v0.57.2/go.mod h1:RU9I8lwBUxucwOsSYzHEcHi15M9QaX78hgQ2PRdSxV0= +go.opentelemetry.io/collector/pdata v0.61.0/go.mod h1:0hqgNMRneVXaLNelv3q0XKJbyBW9aMDwyC15pKd30+E= +go.opentelemetry.io/collector/pdata v0.63.0/go.mod h1:IzvXUGQml2mrnvdb8zIlEW3qQs9oFLdD2hLwJdZ+pek= +go.opentelemetry.io/collector/pdata v0.64.0/go.mod h1:IzvXUGQml2mrnvdb8zIlEW3qQs9oFLdD2hLwJdZ+pek= +go.opentelemetry.io/collector/pdata v0.64.1/go.mod h1:IzvXUGQml2mrnvdb8zIlEW3qQs9oFLdD2hLwJdZ+pek= +go.opentelemetry.io/collector/pdata v1.0.0-rc2/go.mod h1:3gknzI1BqPVbEprOIbtaPQgPAYvjRf8kdkpGMJjv14E= +go.opentelemetry.io/collector/pdata v1.0.0-rc7/go.mod h1:YSlrEri/QKzmeaN8rio2iPYsxPUJo4WkL6fQc4Ph7fk= go.opentelemetry.io/collector/pdata v1.0.0-rc8 h1:vBikWdZFsRiT5dVsLQhnE99w3edM7eem3Q9dSqMlStE= go.opentelemetry.io/collector/pdata v1.0.0-rc8/go.mod h1:BVCBhWgclYCh7Oi6BkMiQfRa6MXv1uRTlKXuL5oBby8= -go.opentelemetry.io/collector/processor/batchprocessor v0.73.0 h1:zJw0WlqC1OuADxD2hoDQMbZ1MwDdQosoRVHyKX/2F5A= +go.opentelemetry.io/collector/processor/batchprocessor v0.64.0/go.mod h1:ZZtDQ1M9szgmwa0aT/R8JteB2zadwogylE9p3Sr64qU= +go.opentelemetry.io/collector/processor/batchprocessor v0.64.1/go.mod h1:qVl0+aYokPfiq5y+JVAvlII2rrUFBDEqqiDbTSnax78= go.opentelemetry.io/collector/processor/batchprocessor v0.73.0/go.mod h1:nvDyRxOqGg5NVM5A1KwqtRGFVFf61V83pGAK/46Ya9g= -go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.74.0/go.mod h1:qfDIbIbshcLaCb7QgunPGkdUqmebYU4+9J9pe+C1TOE= +go.opentelemetry.io/collector/processor/batchprocessor v0.74.0 h1:X7WiqcxMsObHxOaK5MZctqW2QIiu3z9VFrB0CdECYro= +go.opentelemetry.io/collector/processor/batchprocessor v0.74.0/go.mod h1:+qP4jMcI6Kih20KZZDpf0QsJNSjTmqvQ2UQfIdjMavw= +go.opentelemetry.io/collector/receiver v0.73.0/go.mod h1:VP0eJZn2sh9qfZ3Bre8m2rndo69r0D+h/V9KzSUk76M= go.opentelemetry.io/collector/receiver v0.74.0 h1:jlgBFa0iByvn8VuX27UxtqiPiZE8ejmU5lb1nSptWD8= go.opentelemetry.io/collector/receiver v0.74.0/go.mod h1:SQkyATvoZCJefNkI2jnrR63SOdrmDLYCnQqXJ7ACqn0= -go.opentelemetry.io/collector/receiver/otlpreceiver v0.74.0/go.mod h1:9X9/RYFxJIaK0JLlRZ0PpmQSSlYpY+r4KsTOj2jWj14= +go.opentelemetry.io/collector/receiver/otlpreceiver v0.64.1/go.mod h1:4rwNi9SeCKBP9XGLWNRFKPsWUV5NK4iqMvdj2WRMksQ= +go.opentelemetry.io/collector/receiver/otlpreceiver v0.68.0/go.mod h1:gWzZ44PCS/RoPlpvWoEIYZDYz3FpCLFdZ6uXTOIV4Dw= +go.opentelemetry.io/collector/semconv v0.52.0/go.mod h1:SxK0rUnUP7YeDakexzbE/vhimTOHwE6m/4aKKd9e27Q= +go.opentelemetry.io/collector/semconv v0.54.0/go.mod h1:HAGkPKNMhc4kEHevEqVIEtUuvsRQMIbUWBb8yBrqEwk= +go.opentelemetry.io/collector/semconv v0.56.0/go.mod h1:EH1wbDvTyqKpKBBpoMIe0KQk2plCcFS66Mo17WtR7CQ= +go.opentelemetry.io/collector/semconv v0.57.2/go.mod h1:84YnUjmm+nhGu4YTDLnHCbxnL74ooWpismPG79tFD7w= +go.opentelemetry.io/collector/semconv v0.61.0/go.mod h1:aRkHuJ/OshtDFYluKEtnG5nkKTsy1HZuvZVHmakx+Vo= +go.opentelemetry.io/collector/semconv v0.63.0/go.mod h1:5o9yhOa+ABt7g2E5JABDxGZ1PQPbtfxrKNbYn+LOTXU= +go.opentelemetry.io/collector/semconv v0.64.0/go.mod h1:5o9yhOa+ABt7g2E5JABDxGZ1PQPbtfxrKNbYn+LOTXU= +go.opentelemetry.io/collector/semconv v0.64.1/go.mod h1:5o9yhOa+ABt7g2E5JABDxGZ1PQPbtfxrKNbYn+LOTXU= +go.opentelemetry.io/collector/semconv v0.68.0/go.mod h1:5o9yhOa+ABt7g2E5JABDxGZ1PQPbtfxrKNbYn+LOTXU= +go.opentelemetry.io/collector/semconv v0.73.0/go.mod h1:xt8oDOiwa1jy24tGUo8+SzpphI7ZredS2WM/0m8rtTA= go.opentelemetry.io/collector/semconv v0.74.0 h1:tPpbz87CPu/pM2/fSEKBJWXTvWvUJvEChbQkzdhWQHE= go.opentelemetry.io/collector/semconv v0.74.0/go.mod h1:xt8oDOiwa1jy24tGUo8+SzpphI7ZredS2WM/0m8rtTA= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.32.0/go.mod h1:J0dBVrt7dPS/lKJyQoW0xzQiUr4r2Ik1VwPjAUWnofI= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.33.0/go.mod h1:y/SlJpJQPd2UzfBCj0E9Flk9FDCtTyqUmaCB41qFrWI= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.36.0/go.mod h1:h8TWwRAhQpOd0aM5nYsRD8+flnkj+526GEIVlarH7eY= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.36.4/go.mod h1:05eWWy6ZWzmpeImD3UowLTB3VjDMU1yxQ+ENuVWDM3c= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.37.0/go.mod h1:HSmzQvagH8pS2/xrK7ScWsk0vAMtRTGbMFgInXCi8Tc= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.40.0 h1:5jD3teb4Qh7mx/nfzq4jO2WFFpvXD0vYWFDrdvNWmXk= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.40.0/go.mod h1:UMklln0+MRhZC4e3PwmN3pCtq4DyIadWw4yikh6bNrw= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.32.0/go.mod h1:5eCOqeGphOyz6TsY3ZDNjE33SM/TFAK3RGuCL2naTgY= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.33.0/go.mod h1:U5rUt7Rw6zuORsWNfpMRy8XMNKLrmIlv/4HgLVW/d5M= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.36.0/go.mod h1:14Oo79mRwusSI02L0EfG3Gp1uF3+1wSL+D4zDysxyqs= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.36.4/go.mod h1:l2MdsbKTocpPS5nQZscqTR9jd8u96VYZdcpF8Sye7mA= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.37.0/go.mod h1:+ARmXlUlc51J7sZeCBkBJNdHGySrdOzgzxp6VWRWM1U= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.39.0/go.mod h1:9rgTcOKdIhDOC0IcAu8a+R+FChqSUBihKpM1lVNi6T0= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.40.0 h1:lE9EJyw3/JhrjWH/hEy9FptnalDQgj7vpbgC2KCCCxE= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.40.0/go.mod h1:pcQ3MM3SWvrA71U4GDqv9UFDJ3HQsW7y5ZO3tDTlUdI= +go.opentelemetry.io/contrib/propagators/b3 v1.10.0/go.mod h1:oxvamQ/mTDFQVugml/uFS59+aEUnFLhmd1wsG+n5MOE= +go.opentelemetry.io/contrib/propagators/b3 v1.11.1/go.mod h1:ECIveyMXgnl4gorxFcA7RYjJY/Ql9n20ubhbfDc3QfA= +go.opentelemetry.io/contrib/propagators/b3 v1.12.0/go.mod h1:0JDB4elfPUWGsCH/qhaMkDzP1l8nB0ANVx8zXuAYEwg= +go.opentelemetry.io/contrib/propagators/b3 v1.14.0/go.mod h1:A76N3hFhcmXo+tkmn6SE1x0AQv1JwFyiJXMclWzy/YQ= go.opentelemetry.io/contrib/propagators/b3 v1.15.0 h1:bMaonPyFcAvZ4EVzkUNkfnUHP5Zi63CIDlA3dRsEg8Q= go.opentelemetry.io/contrib/propagators/b3 v1.15.0/go.mod h1:VjU0g2v6HSQ+NwfifambSLAeBgevjIcqmceaKWEzl0c= +go.opentelemetry.io/contrib/zpages v0.32.0/go.mod h1:Jx75I61RDcZU3d/1WrP6UdINlzGGLAwFNdQ3bCTb+qw= +go.opentelemetry.io/contrib/zpages v0.33.0/go.mod h1:ddmD63NkBVE29GucaBBCR8/b/TRlY+PkpIbF3m2JF7Y= +go.opentelemetry.io/contrib/zpages v0.36.0/go.mod h1:OgQXRCmMnguvh/24MX9zsSvVju1Xt6sX6CSaShA/ido= +go.opentelemetry.io/contrib/zpages v0.36.4/go.mod h1:h1gnOu0cOfDGEncNgLsjQ5H/9eAzt9LXsa1WvH7I5KU= +go.opentelemetry.io/contrib/zpages v0.37.0/go.mod h1:eENgsW/BBmryW838vx6FVH63sPBIVnUds1oCTSuwCpA= go.opentelemetry.io/contrib/zpages v0.40.0 h1:BDLYzPHju8GRJH2V+0CtF4WF/sDnylZnspShMMnhyhw= go.opentelemetry.io/contrib/zpages v0.40.0/go.mod h1:hKOEjOa1AA8kbqQRWR5gSj4WrjWjHQMFv5jeRGDgVRM= +go.opentelemetry.io/otel v1.7.0/go.mod h1:5BdUoMIz5WEs0vt0CUEMtSSaTSHBBVwrhnz7+nrD5xk= +go.opentelemetry.io/otel v1.8.0/go.mod h1:2pkj+iMj0o03Y+cW6/m8Y4WkRdYN3AvCXCnzRMp9yvM= +go.opentelemetry.io/otel v1.9.0/go.mod h1:np4EoPGzoPs3O67xUVNoPPcmSvsfOxNlNA4F4AC+0Eo= +go.opentelemetry.io/otel v1.10.0/go.mod h1:NbvWjCthWHKBEUMpf0/v8ZRZlni86PpGFEMA9pnQSnQ= +go.opentelemetry.io/otel v1.11.1/go.mod h1:1nNhXBbWSD0nsL38H6btgnFN2k4i0sNLHNNMZMSbUGE= +go.opentelemetry.io/otel v1.11.2/go.mod h1:7p4EUV+AqgdlNV9gL97IgUZiVR3yrFXYo53f9BM3tRI= +go.opentelemetry.io/otel v1.13.0/go.mod h1:FH3RtdZCzRkJYFTCsAKDy9l/XYjMdNv6QrkFFB8DvVg= go.opentelemetry.io/otel v1.14.0 h1:/79Huy8wbf5DnIPhemGB+zEPVwnN6fuQybr/SRXa6hM= go.opentelemetry.io/otel v1.14.0/go.mod h1:o4buv+dJzx8rohcUeRmWUZhqupFvzWis188WlggnNeU= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.11.2/go.mod h1:rqbht/LlhVBgn5+k3M5QK96K5Xb0DvXpMJ5SFQpY6uw= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.11.2/go.mod h1:5Qn6qvgkMsLDX+sYK64rHb1FPhpn0UtxF+ouX1uhyJE= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.11.2/go.mod h1:jWZUM2MWhWCJ9J9xVbRx7tzK1mXKpAlze4CeulycwVY= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.11.2/go.mod h1:GZWSQQky8AgdJj50r1KJm8oiQiIPaAX7uZCFQX9GzC8= +go.opentelemetry.io/otel/exporters/prometheus v0.30.0/go.mod h1:qN5feW+0/d661KDtJuATEmHtw5bKBK7NSvNEP927zSs= +go.opentelemetry.io/otel/exporters/prometheus v0.31.0/go.mod h1:QarXIB8L79IwIPoNgG3A6zNvBgVmcppeFogV1d8612s= +go.opentelemetry.io/otel/exporters/prometheus v0.32.1/go.mod h1:t1ZclNSxaC2ztzbHxGU71mg3pkkaHyHcMUIK2Yvft0E= +go.opentelemetry.io/otel/exporters/prometheus v0.33.0/go.mod h1:ZSmYfKdYWEdSDBB4njLBIwTf4AU2JNsH3n2quVQDebI= +go.opentelemetry.io/otel/exporters/prometheus v0.34.0/go.mod h1:6gUoJyfhoWqF0tOLaY0ZmKgkQRcvEQx6p5rVlKHp3s4= go.opentelemetry.io/otel/exporters/prometheus v0.37.0 h1:NQc0epfL0xItsmGgSXgfbH2C1fq2VLXkZoDFsfRNHpc= go.opentelemetry.io/otel/exporters/prometheus v0.37.0/go.mod h1:hB8qWjsStK36t50/R0V2ULFb4u95X/Q6zupXLgvjTh8= +go.opentelemetry.io/otel/metric v0.30.0/go.mod h1:/ShZ7+TS4dHzDFmfi1kSXMhMVubNoP0oIaBp70J6UXU= +go.opentelemetry.io/otel/metric v0.31.0/go.mod h1:ohmwj9KTSIeBnDBm/ZwH2PSZxZzoOaG2xZeekTRzL5A= +go.opentelemetry.io/otel/metric v0.32.0/go.mod h1:PVDNTt297p8ehm949jsIzd+Z2bIZJYQQG/uuHTeWFHY= +go.opentelemetry.io/otel/metric v0.32.1/go.mod h1:iLPP7FaKMAD5BIxJ2VX7f2KTuz//0QK2hEUyti5psqQ= +go.opentelemetry.io/otel/metric v0.33.0/go.mod h1:QlTYc+EnYNq/M2mNk1qDDMRLpqCOj2f/r5c7Fd5FYaI= +go.opentelemetry.io/otel/metric v0.34.0/go.mod h1:ZFuI4yQGNCupurTXCwkeD/zHBt+C2bR7bw5JqUm/AP8= +go.opentelemetry.io/otel/metric v0.36.0/go.mod h1:wKVw57sd2HdSZAzyfOM9gTqqE8v7CbqWsYL6AyrH9qk= go.opentelemetry.io/otel/metric v0.37.0 h1:pHDQuLQOZwYD+Km0eb657A25NaRzy0a+eLyKfDXedEs= go.opentelemetry.io/otel/metric v0.37.0/go.mod h1:DmdaHfGt54iV6UKxsV9slj2bBRJcKC1B1uvDLIioc1s= +go.opentelemetry.io/otel/sdk v1.7.0/go.mod h1:uTEOTwaqIVuTGiJN7ii13Ibp75wJmYUDe374q6cZwUU= +go.opentelemetry.io/otel/sdk v1.8.0/go.mod h1:uPSfc+yfDH2StDM/Rm35WE8gXSNdvCg023J6HeGNO0c= +go.opentelemetry.io/otel/sdk v1.10.0/go.mod h1:vO06iKzD5baltJz1zarxMCNHFpUlUiOy4s65ECtn6kE= +go.opentelemetry.io/otel/sdk v1.11.1/go.mod h1:/l3FE4SupHJ12TduVjUkZtlfFqDCQJlOlithYrdktys= +go.opentelemetry.io/otel/sdk v1.11.2/go.mod h1:wZ1WxImwpq+lVRo4vsmSOxdd+xwoUJ6rqyLc3SyX9aU= go.opentelemetry.io/otel/sdk v1.14.0 h1:PDCppFRDq8A1jL9v6KMI6dYesaq+DFcDZvjsoGvxGzY= go.opentelemetry.io/otel/sdk v1.14.0/go.mod h1:bwIC5TjrNG6QDCHNWvW4HLHtUQ4I+VQDsnjhvyZCALM= +go.opentelemetry.io/otel/sdk/metric v0.30.0/go.mod h1:8AKFRi5HyvTR0RRty3paN1aMC9HMT+NzcEhw/BLkLX8= +go.opentelemetry.io/otel/sdk/metric v0.31.0/go.mod h1:fl0SmNnX9mN9xgU6OLYLMBMrNAsaZQi7qBwprwO3abk= +go.opentelemetry.io/otel/sdk/metric v0.32.1/go.mod h1:Nn+Nt/7cKzm5ISmvLzNO5RLf0Xuv8/Qo8fkpr0JDOzs= +go.opentelemetry.io/otel/sdk/metric v0.33.0/go.mod h1:xdypMeA21JBOvjjzDUtD0kzIcHO/SPez+a8HOzJPGp0= +go.opentelemetry.io/otel/sdk/metric v0.34.0/go.mod h1:l4r16BIqiqPy5rd14kkxllPy/fOI4tWo1jkpD9Z3ffQ= go.opentelemetry.io/otel/sdk/metric v0.37.0 h1:haYBBtZZxiI3ROwSmkZnI+d0+AVzBWeviuYQDeBWosU= go.opentelemetry.io/otel/sdk/metric v0.37.0/go.mod h1:mO2WV1AZKKwhwHTV3AKOoIEb9LbUaENZDuGUQd+j4A0= +go.opentelemetry.io/otel/trace v1.7.0/go.mod h1:fzLSB9nqR2eXzxPXb2JW9IKE+ScyXA48yyE4TNvoHqU= +go.opentelemetry.io/otel/trace v1.8.0/go.mod h1:0Bt3PXY8w+3pheS3hQUt+wow8b1ojPaTBoTCh2zIFI4= +go.opentelemetry.io/otel/trace v1.9.0/go.mod h1:2737Q0MuG8q1uILYm2YYVkAyLtOofiTNGg6VODnOiPo= +go.opentelemetry.io/otel/trace v1.10.0/go.mod h1:Sij3YYczqAdz+EhmGhE6TpTxUO5/F/AzrK+kxfGqySM= +go.opentelemetry.io/otel/trace v1.11.1/go.mod h1:f/Q9G7vzk5u91PhbmKbg1Qn0rzH1LJ4vbPHFGkTPtOk= +go.opentelemetry.io/otel/trace v1.11.2/go.mod h1:4N+yC7QEz7TTsG9BSRLNAa63eg5E06ObSbKPmxQ/pKA= +go.opentelemetry.io/otel/trace v1.13.0/go.mod h1:muCvmmO9KKpvuXSf3KKAXXB2ygNYHQ+ZfI5X08d3tds= go.opentelemetry.io/otel/trace v1.14.0 h1:wp2Mmvj41tDsyAJXiWDWpfNsOiIyd38fy85pyKcFq/M= go.opentelemetry.io/otel/trace v1.14.0/go.mod h1:8avnQLK+CG77yNLUae4ea2JDQ6iT+gozhnZjy/rw9G8= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= +go.uber.org/automaxprocs v1.5.1/go.mod h1:BF4eumQw0P9GtnuxxovUd06vwm1o18oMzFtK66vU6XU= +go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/goleak v1.2.0/go.mod h1:XJYK+MuIchqpmGmUSAzotztawfKvYLUIgg7guXrwVUo= go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A= go.uber.org/goleak v1.2.1/go.mod h1:qlT2yGI9QafXHhZZLxlSuNsMw3FFLxBr+tBRlmO1xH4= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= +go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= +go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ= go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= +go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= +go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= +go.uber.org/zap v1.22.0/go.mod h1:H4siCOZOrAolnUPJEkfaSjDqyP+BDS0DdDWzwcgt3+U= +go.uber.org/zap v1.23.0/go.mod h1:D+nX8jyLsMHMYrln8A0rJjFt/T/9/bGgIhAqxv5URuY= go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -803,27 +1951,58 @@ golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210915214749-c084706c2272/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20221012134737-56aed061732a/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= +golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191002040644-a1355ae1e2c3/go.mod h1:NOZ3BPKG0ec/BKJQgnvsSFpcKLM5xXVWnvZS97DWHgE= golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/exp v0.0.0-20220827204233-334a2380cb91/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20230108222341-4b8118a2686a/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/exp v0.0.0-20230124195608-d38c7dcee874 h1:kWC3b7j6Fu09SnEBr7P4PuQyM0R6sqyH9R+EjIvT1nQ= golang.org/x/exp v0.0.0-20230124195608-d38c7dcee874/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20190910094157-69e4b8554b2a/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20200119044424-58c23975cae1/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20200618115811-c13761719519/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20201208152932-35266b937fa6/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20210216034530-4410531fe030/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20210607152325-775e3b0c77b9/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20211028202545-6944b10bf410/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20220302094943-723b81ca9867/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= 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-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -834,6 +2013,7 @@ golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHl golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= @@ -843,13 +2023,23 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= 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/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= +golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.9.0 h1:KENHtAZL2y3NLMYZeHY9DW8HW8V+kQyJsY/V9JlKvCs= golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/net v0.0.0-20180530234432-1e491301e022/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 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-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -862,6 +2052,8 @@ golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190921015927-1a5e07d1ff72/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -873,24 +2065,58 @@ golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM= +golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= +golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210917221730-978cfadd31cf/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220725212005-46097bf591d3/go.mod h1:AaygXjzTFtRAg2ttMY5RMuhpJ3cNnI0XpyFJD1iQRSM= +golang.org/x/net v0.0.0-20220805013720-a33c5aa5df48/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20220921155015-db77216a4ee9/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20220926192436-02166a98028e/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20221012135044-0b7e1fb9d458/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= +golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= +golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= +golang.org/x/net v0.3.1-0.20221206200815-1e63c2f08a10/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= +golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= +golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -898,9 +2124,31 @@ golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20221006150949-b44042a4b9c1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.3.0/go.mod h1:rQrIauxkUhJ6CuwEXwymO2/eh4xz2ZWF1nBkcxS+tGk= +golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= +golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= golang.org/x/oauth2 v0.6.0 h1:Lh8GPgSKBfWSwFvtuWOfeI3aAAnbXTSutYxJiOJFgIw= golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -915,15 +2163,22 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220513210516-0976fa681c29/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190130150945-aca44879d564/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-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -936,7 +2191,9 @@ golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190626150813-e07cf5db2756/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -944,6 +2201,7 @@ golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -964,37 +2222,84 @@ golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210304124612-50617c2ba197/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220708085239-5a0f0661e09d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220808155132-1c4a2a72c664/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= +golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= +golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1003,19 +2308,32 @@ golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3 golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220609170525-579cf78fd858/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 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-20190206041539-40960b6deb8e/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-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= @@ -1030,10 +2348,12 @@ golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBn golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -1054,6 +2374,7 @@ golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjs golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= @@ -1061,19 +2382,50 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= +golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= +golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= +golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ= +golang.org/x/tools v0.5.0/go.mod h1:N+Kgy78s5I24c24dU8OfWNEotWjutIs8SnJvn5IDq+k= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.7.0 h1:W4OVu8VVOaIO0yzWMNdepAulS7YfoS3Zabrm8DOXXU4= golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= 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= +golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= +gonum.org/v1/gonum v0.9.3/go.mod h1:TZumC3NeyVQskjXqmyWt4S3bINhy7B4eYwW69EbyX+0= +gonum.org/v1/gonum v0.11.0/go.mod h1:fSG4YDCxxUZQJ7rKsQrj0gMOg00Il0Z96/qMA4bVQhA= gonum.org/v1/gonum v0.12.0 h1:xKuo6hzt+gMav00meVPUlXwSdoEJP46BR+wdxQEFK2o= gonum.org/v1/gonum v0.12.0/go.mod h1:73TDxJfAAHeA8Mk9mf8NlIppyhQNo5GLTcYeqgo2lvY= +gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= +gonum.org/v1/plot v0.9.0/go.mod h1:3Pcqqmp6RHvJI72kgb8fThyUnav364FOsdDo2aGW5lY= +gonum.org/v1/plot v0.10.1/go.mod h1:VZW5OlhkL1mysU9vaqNHnsy86inf6Ot+jB3r+BczCEo= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= @@ -1090,6 +2442,48 @@ google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0M google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= +google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= +google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= +google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= +google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= +google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= +google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= +google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= +google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= +google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= +google.golang.org/api v0.59.0/go.mod h1:sT2boj7M9YJxZzgeZqXogmhfmRWDtPzT31xkieUbuZU= +google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= +google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= +google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= +google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= +google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= +google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= +google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= +google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= +google.golang.org/api v0.81.0/go.mod h1:FA6Mb/bZxj706H2j+j2d6mHEEaHBmbbWnkfvmorOCko= +google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= +google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g= +google.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaETEI= +google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.99.0/go.mod h1:1YOf74vkVndF7pG6hIHuINsM7eWwpVTAfNMNiL91A08= +google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= +google.golang.org/api v0.102.0/go.mod h1:3VFl6/fzoA+qNuS1N1/VfXY4LjoXN/wzeIp7TweWwGo= +google.golang.org/api v0.103.0/go.mod h1:hGtW6nK1AC+d9si/UBhw8Xli+QMOf6xyNAyJw4qU9w0= +google.golang.org/api v0.106.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.107.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= +google.golang.org/api v0.111.0/go.mod h1:qtFHvU9mhgTJegR31csQ+rwxyUTHOKFqCKWp1J0fdw0= google.golang.org/api v0.112.0 h1:iDmzvZ4C086R3+en4nSyIf07HlQKMOX1Xx2dmia/+KQ= google.golang.org/api v0.112.0/go.mod h1:737UfWHNsOq4F3REUTmb+GN9pugkgNLCayLTfoIKpPc= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= @@ -1100,6 +2494,7 @@ google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCID google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190404172233-64821d5d2107/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -1122,6 +2517,7 @@ google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= @@ -1131,18 +2527,117 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= +google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= +google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210917145530-b395a37504d4/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211008145708-270636b82663/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211028162531-8db9c33dc351/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= google.golang.org/genproto v0.0.0-20220329172620-7be39ac1afc7/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= +google.golang.org/genproto v0.0.0-20220728213248-dd149ef739b9/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= +google.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= +google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829144015-23454907ede3/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220913154956-18f8339a66a5/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= +google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= +google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221024153911-1573dae28c9c/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c/go.mod h1:CGI5F/G+E5bKwmfYo09AXuVN4dD894kIKUFmVbP2/Fo= +google.golang.org/genproto v0.0.0-20221109142239-94d6d90a7d66/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221114212237-e4508ebdbee1/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221117204609-8f9c96812029/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221201164419-0e50fba7f41c/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221201204527-e3fa12d562f3/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221202195650-67e5cbc046fd/go.mod h1:cTsE614GARnxrLsqKREzmNYJACSWWpAWdNMwnD7c2BE= +google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230112194545-e10362b5ecf9/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230113154510-dbe35b8444a5/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230123190316-2c411cf9d197/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230124163310-31e0e69b6fc2/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230125152338-dcaf20b6aeaa/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230127162408-596548ed4efa/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA= +google.golang.org/genproto v0.0.0-20230222225845-10f96fb3dbec/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= +google.golang.org/genproto v0.0.0-20230223222841-637eb2293923/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= google.golang.org/genproto v0.0.0-20230303212802-e74f57abe488 h1:QQF+HdiI4iocoxUjjpLgvTYDHKm99C/VtTBFnfiCJos= google.golang.org/genproto v0.0.0-20230303212802-e74f57abe488/go.mod h1:TvhZT5f700eVlTNwND1xoEZQeWTB2RY/65kplwl/bFA= +google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.22.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= @@ -1151,15 +2646,36 @@ google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKa google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= +google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzIUK6k= google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= +google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= +google.golang.org/grpc v1.52.1/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= google.golang.org/grpc v1.53.0 h1:LAv2ds7cmFV/XTS3XG1NneeENYrXGmorPxsBbptIjNc= google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= 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= @@ -1183,15 +2699,24 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/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/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/ini.v1 v1.57.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.66.6 h1:LATuAqN/shcYAOkv3wl2L4rkaKqkcgTBQjOyYDvcPKI= +gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.66.6/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= +gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= +gopkg.in/telebot.v3 v3.1.2/go.mod h1:GJKwwWqp9nSkIVN51eRKU78aB5f5OnQuWdwiIZfPbko= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -1205,8 +2730,12 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0/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= +gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= +gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0= +gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1214,21 +2743,69 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= +k8s.io/api v0.26.1/go.mod h1:xd/GBNgR0f707+ATNyPmQ1oyKSgndzXij81FzWGsejg= k8s.io/api v0.26.2 h1:dM3cinp3PGB6asOySalOZxEG4CZ0IAdJsrYZXE/ovGQ= k8s.io/api v0.26.2/go.mod h1:1kjMQsFE+QHPfskEcVNgL3+Hp88B80uj0QtSOlj8itU= +k8s.io/apimachinery v0.26.1/go.mod h1:tnPmbONNJ7ByJNz9+n9kMjNP8ON+1qoAIIC70lztu74= k8s.io/apimachinery v0.26.2 h1:da1u3D5wfR5u2RpLhE/ZtZS2P7QvDgLZTi9wrNZl/tQ= k8s.io/apimachinery v0.26.2/go.mod h1:ats7nN1LExKHvJ9TmwootT00Yz05MuYqPXEXaVeOy5I= +k8s.io/client-go v0.26.1/go.mod h1:IWNSglg+rQ3OcvDkhY6+QLeasV4OYHDjdqeWkDQZwGE= k8s.io/client-go v0.26.2 h1:s1WkVujHX3kTp4Zn4yGNFK+dlDXy1bAAkIl+cFAiuYI= k8s.io/client-go v0.26.2/go.mod h1:u5EjOuSyBa09yqqyY7m3abZeovO/7D/WehVVlZ2qcqU= +k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= +k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= +k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= +k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= +k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/klog/v2 v2.80.1 h1:atnLQ121W371wYYFawwYx1aEY2eUfs4l3J72wtgAwV4= k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280/go.mod h1:+Axhij7bCpeqhklhUTe3xmOn6bWxolyZEeyaFpjGtl4= k8s.io/kube-openapi v0.0.0-20221207184640-f3cff1453715 h1:tBEbstoM+K0FiBV5KGAKQ0kuvf54v/hwpldiJt69w1s= k8s.io/kube-openapi v0.0.0-20221207184640-f3cff1453715/go.mod h1:+Axhij7bCpeqhklhUTe3xmOn6bWxolyZEeyaFpjGtl4= +k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20221107191617-1a15be271d1d/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= k8s.io/utils v0.0.0-20221128185143-99ec85e7a448 h1:KTgPnR10d5zhztWptI952TNtt/4u5h3IzDXkdIMuo2Y= k8s.io/utils v0.0.0-20221128185143-99ec85e7a448/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= +lukechampine.com/uint128 v1.2.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= +modernc.org/cc/v3 v3.36.0/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= +modernc.org/cc/v3 v3.36.2/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= +modernc.org/cc/v3 v3.36.3/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= +modernc.org/ccgo/v3 v3.0.0-20220428102840-41399a37e894/go.mod h1:eI31LL8EwEBKPpNpA4bU1/i+sKOwOrQy8D87zWUcRZc= +modernc.org/ccgo/v3 v3.0.0-20220430103911-bc99d88307be/go.mod h1:bwdAnOoaIt8Ax9YdWGjxWsdkPcZyRPHqrOvJxaKAKGw= +modernc.org/ccgo/v3 v3.16.4/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= +modernc.org/ccgo/v3 v3.16.6/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= +modernc.org/ccgo/v3 v3.16.8/go.mod h1:zNjwkizS+fIFDrDjIAgBSCLkWbJuHF+ar3QRn+Z9aws= +modernc.org/ccgo/v3 v3.16.9/go.mod h1:zNMzC9A9xeNUepy6KuZBbugn3c0Mc9TeiJO4lgvkJDo= +modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ= +modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM= +modernc.org/libc v0.0.0-20220428101251-2d5f3daf273b/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA= +modernc.org/libc v1.16.0/go.mod h1:N4LD6DBE9cf+Dzf9buBlzVJndKr/iJHG97vGLHYnb5A= +modernc.org/libc v1.16.1/go.mod h1:JjJE0eu4yeK7tab2n4S1w8tlWd9MxXLRzheaRnAKymU= +modernc.org/libc v1.16.17/go.mod h1:hYIV5VZczAmGZAnG15Vdngn5HSF5cSkbvfz2B7GRuVU= +modernc.org/libc v1.16.19/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA= +modernc.org/libc v1.17.0/go.mod h1:XsgLldpP4aWlPlsjqKRdHPqCxCjISdHfM/yeWC5GyW0= +modernc.org/libc v1.17.1/go.mod h1:FZ23b+8LjxZs7XtFMbSzL/EhPxNbfZbErxEHc7cbD9s= +modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/memory v1.1.1/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw= +modernc.org/memory v1.2.0/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw= +modernc.org/memory v1.2.1/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/sqlite v1.18.1/go.mod h1:6ho+Gow7oX5V+OiOQ6Tr4xeqbx13UZ6t+Fw9IRUG4d4= +modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw= +modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw= +modernc.org/tcl v1.13.1/go.mod h1:XOLfOwzhkljL4itZkK6T72ckMgvj0BDsnKNdZVUOecw= +modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= +modernc.org/z v1.5.1/go.mod h1:eWFB510QWW5Th9YGZT81s+LwvaAs3Q2yr4sP0rmLkv8= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= 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/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= diff --git a/otelcollector/opentelemetry-operator b/otelcollector/opentelemetry-operator new file mode 160000 index 000000000..cb2f1f568 --- /dev/null +++ b/otelcollector/opentelemetry-operator @@ -0,0 +1 @@ +Subproject commit cb2f1f56854e2d5b69acf4db001e65dd5d06373f diff --git a/otelcollector/prom-config-validator-builder/components.go b/otelcollector/prom-config-validator-builder/components.go index 27be07c5e..a631b7897 100644 --- a/otelcollector/prom-config-validator-builder/components.go +++ b/otelcollector/prom-config-validator-builder/components.go @@ -22,6 +22,7 @@ import ( "go.opentelemetry.io/collector/extension" "go.opentelemetry.io/collector/extension/zpagesextension" "go.opentelemetry.io/collector/receiver" + "github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension" ) func components() (otelcol.Factories, error) { @@ -31,6 +32,7 @@ func components() (otelcol.Factories, error) { factories.Extensions, err = extension.MakeFactoryMap( pprofextension.NewFactory(), zpagesextension.NewFactory(), + healthcheckextension.NewFactory(), ) if err != nil { return otelcol.Factories{}, err diff --git a/otelcollector/prom-config-validator-builder/go.mod b/otelcollector/prom-config-validator-builder/go.mod index e85312758..316328d14 100644 --- a/otelcollector/prom-config-validator-builder/go.mod +++ b/otelcollector/prom-config-validator-builder/go.mod @@ -8,21 +8,18 @@ require ( github.com/gracewehner/prometheusreceiver v0.0.0-00010101000000-000000000000 github.com/open-telemetry/opentelemetry-collector-contrib/exporter/fileexporter v0.74.0 github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusexporter v0.74.0 + github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.74.0 github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.74.0 github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor v0.74.0 go.opentelemetry.io/collector v0.74.0 go.opentelemetry.io/collector/confmap v0.74.0 go.opentelemetry.io/collector/connector/forwardconnector v0.74.0 go.opentelemetry.io/collector/exporter v0.74.0 - go.opentelemetry.io/collector/exporter/loggingexporter v0.73.0 - go.opentelemetry.io/collector/exporter/otlpexporter v0.73.0 - go.opentelemetry.io/collector/exporter/otlphttpexporter v0.74.0 - go.opentelemetry.io/collector/extension/ballastextension v0.74.0 + go.opentelemetry.io/collector/exporter/loggingexporter v0.74.0 + go.opentelemetry.io/collector/exporter/otlpexporter v0.74.0 go.opentelemetry.io/collector/extension/zpagesextension v0.74.0 - go.opentelemetry.io/collector/processor/batchprocessor v0.73.0 - go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.74.0 + go.opentelemetry.io/collector/processor/batchprocessor v0.74.0 go.opentelemetry.io/collector/receiver v0.74.0 - go.opentelemetry.io/collector/receiver/otlpreceiver v0.74.0 gopkg.in/yaml.v2 v2.4.0 ) @@ -98,7 +95,7 @@ require ( github.com/hashicorp/cronexpr v1.1.1 // indirect github.com/hashicorp/errwrap v1.0.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect - github.com/hashicorp/go-hclog v1.3.1 // indirect + github.com/hashicorp/go-hclog v1.4.0 // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-retryablehttp v0.7.1 // indirect @@ -110,6 +107,7 @@ require ( github.com/imdario/mergo v0.3.12 // indirect github.com/inconshreveable/mousetrap v1.0.1 // indirect github.com/ionos-cloud/sdk-go/v6 v6.1.3 // indirect + github.com/jaegertracing/jaeger v1.41.0 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/jpillora/backoff v1.0.0 // indirect @@ -128,6 +126,7 @@ require ( github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/hashstructure/v2 v2.0.2 // indirect + github.com/cnf/structhash v0.0.0-20201127153200-e1b16c1ebc08 //indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mitchellh/reflectwalk v1.0.2 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect @@ -144,7 +143,6 @@ require ( github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.0.2 // indirect github.com/ovh/go-ovh v1.3.0 // indirect - github.com/pelletier/go-toml v1.9.4 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect @@ -158,7 +156,6 @@ require ( github.com/prometheus/procfs v0.8.0 // indirect github.com/prometheus/prometheus v0.42.1-0.20230210113933-af1d9e01c7e4 // indirect github.com/prometheus/statsd_exporter v0.22.7 // indirect - github.com/rogpeppe/go-internal v1.8.0 // indirect github.com/rs/cors v1.8.3 // indirect github.com/scaleway/scaleway-sdk-go v1.0.0-beta.12 // indirect github.com/shirou/gopsutil/v3 v3.23.2 // indirect @@ -209,7 +206,7 @@ require ( google.golang.org/grpc v1.53.0 // indirect google.golang.org/protobuf v1.29.1 // indirect gopkg.in/inf.v0 v0.9.1 // indirect - gopkg.in/ini.v1 v1.66.6 // indirect + gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect k8s.io/api v0.26.2 // indirect diff --git a/otelcollector/prom-config-validator-builder/go.sum b/otelcollector/prom-config-validator-builder/go.sum index bbc713d18..fcbcba28e 100644 --- a/otelcollector/prom-config-validator-builder/go.sum +++ b/otelcollector/prom-config-validator-builder/go.sum @@ -13,7 +13,6 @@ cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKV cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go v0.107.0 h1:qkj22L7bgkl6vIeZDlOY2po43Mx/TIa2Wsa7VR+PEww= cloud.google.com/go v0.110.0 h1:Zc8gqp3+a9/Eyph2KDmcGaPtbKRIoqq4YTlL4NMD0Ys= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= @@ -27,6 +26,7 @@ cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGB cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/longrunning v0.4.1 h1:v+yFJOfKC3yZdY6ZUI933pIYdhyhV8S3NpWrXWmg7jM= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= @@ -41,6 +41,7 @@ contrib.go.opencensus.io/exporter/prometheus v0.4.2/go.mod h1:dvEHbiKmgvbr5pjaF9 dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Azure/azure-sdk-for-go v65.0.0+incompatible h1:HzKLt3kIwMm4KeJYTdx9EbjRYTySD/t8i1Ee/W5EGXw= github.com/Azure/azure-sdk-for-go v65.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest/autorest v0.11.28 h1:ndAExarwr5Y+GaHE6VCaY1kyS/HwwGGyuimVhWsHOEM= @@ -51,6 +52,7 @@ github.com/Azure/go-autorest/autorest/adal v0.9.22/go.mod h1:XuAbAEUv2Tta//+voMI github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8KY+LPI6wiWrP/myHw= github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= +github.com/Azure/go-autorest/autorest/mocks v0.4.2 h1:PGN4EDXnuQbojHbU0UWoNvmu9AGVwYHG9/fkDYhtAfw= github.com/Azure/go-autorest/autorest/mocks v0.4.2/go.mod h1:Vy7OitM9Kei0i1Oj+LvyAWMXJHeKH1MVlzFugfVrmyU= github.com/Azure/go-autorest/autorest/to v0.4.0 h1:oXVqrxakqqV1UZdSazDOPOLvOIz+XA683u8EctwboHk= github.com/Azure/go-autorest/autorest/to v0.4.0/go.mod h1:fE8iZBn7LQR7zH/9XU2NcPR4o9jEImooCeWJcYV/zLE= @@ -142,6 +144,7 @@ github.com/dennwc/varint v1.0.0 h1:kGNFFSSw8ToIy3obO/kKr8U9GZYUAxQEVuix4zfDWzE= github.com/dennwc/varint v1.0.0/go.mod h1:hnItb35rvZvJrbTALZtY/iQfDs48JKRG1RPpgziApxA= github.com/digitalocean/godo v1.95.0 h1:S48/byPKui7RHZc1wYEPfRvkcEvToADNb5I3guu95xg= github.com/digitalocean/godo v1.95.0/go.mod h1:NRpFznZFvhHjBoqZAaOD3khVzsJ3EibzKqFL4R60dmA= +github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/docker v23.0.1+incompatible h1:vjgvJZxprTTE1A37nm+CLNAdwu6xZekyoiVlUZEINcY= @@ -169,6 +172,7 @@ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7 github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo= github.com/envoyproxy/protoc-gen-validate v0.9.1 h1:PS7VIOgmSVhWUEeZwTe7z7zouA22Cr590PzXKbZHOVY= github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w= +github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= @@ -302,7 +306,6 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= @@ -311,6 +314,7 @@ github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= github.com/google/gnostic v0.5.7-v3refs h1:FhTMOKj2VhjpouxvWJAV1TL304uMlb9zcDqkl6cEI54= github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -368,6 +372,7 @@ github.com/hashicorp/consul/api v1.13.0/go.mod h1:ZlVrynguJKcYr54zGaDbaL3fOvKC9m github.com/hashicorp/consul/api v1.20.0 h1:9IHTjNVSZ7MIwjlW3N3a7iGiykCMDpxZu8jsxFJh0yc= github.com/hashicorp/consul/api v1.20.0/go.mod h1:nR64eD44KQ59Of/ECwt2vUmIK2DKsDzAwTmwmLl8Wpo= github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= +github.com/hashicorp/consul/sdk v0.13.1 h1:EygWVWWMczTzXGpO93awkHFzfUka6hLYJ0qhETd+6lY= github.com/hashicorp/cronexpr v1.1.1 h1:NJZDd87hGXjoZBdvyCF9mX4DCq5Wy7+A/w+A7q0wn6c= github.com/hashicorp/cronexpr v1.1.1/go.mod h1:P4wA0KBl9C5q2hABiMO7cp6jcIg96CDh1Efb3g1PWA4= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= @@ -380,11 +385,12 @@ github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9 github.com/hashicorp/go-hclog v0.8.0/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-hclog v1.3.1 h1:vDwF1DFNZhntP4DAjuTpOw3uEgMUpXh1pB5fW9DqHpo= -github.com/hashicorp/go-hclog v1.3.1/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= +github.com/hashicorp/go-hclog v1.4.0 h1:ctuWFGrhFha8BnnzxqeRGidlEcQkDyL5u8J8t5eA11I= +github.com/hashicorp/go-hclog v1.4.0/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-msgpack v0.5.3 h1:zKjpN5BK/P5lMYrLmBHdBULWbJ0XpYR+7NGzqkZzoD4= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= @@ -399,11 +405,14 @@ github.com/hashicorp/go-rootcerts v1.0.1/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR3 github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc= github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8= github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.6.0 h1:uL2shRDx7RTrOrTCUZEGP/wJUFiUI8QT6E7z5o8jga4= @@ -413,6 +422,7 @@ github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= +github.com/hashicorp/memberlist v0.5.0 h1:EtYPN8DpAURiapus508I4n9CzHs2W+8NZGbmmR/prTM= github.com/hashicorp/memberlist v0.5.0/go.mod h1:yvyXLpo0QaGE59Y7hDTsTzDD25JYBZ4mHgHUZ8lrOI0= github.com/hashicorp/nomad/api v0.0.0-20230124213148-69fd1a0e4bf7 h1:XOdd3JHyeQnBRxotBo9ibxBFiYGuYhQU25s/YeV2cTU= github.com/hashicorp/nomad/api v0.0.0-20230124213148-69fd1a0e4bf7/go.mod h1:xYYd4dybIhRhhzDemKx7Ddt8CvCosgrEek8YM7/cF0A= @@ -436,8 +446,11 @@ github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7P github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/ionos-cloud/sdk-go/v6 v6.1.3 h1:vb6yqdpiqaytvreM0bsn2pXw+1YDvEk2RKSmBAQvgDQ= github.com/ionos-cloud/sdk-go/v6 v6.1.3/go.mod h1:Ox3W0iiEz0GHnfY9e5LmAxwklsxguuNFEUSu0gVRTME= +github.com/jaegertracing/jaeger v1.41.0 h1:vVNky8dP46M2RjGaZ7qRENqylW+tBFay3h57N16Ip7M= +github.com/jaegertracing/jaeger v1.41.0/go.mod h1:SIkAT75iVmA9U+mESGYuMH6UQv6V9Qy4qxo0lwfCQAc= 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/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= @@ -463,8 +476,6 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= -github.com/klauspost/compress v1.16.0 h1:iULayQNOReoYUe+1qtKOqw9CwJv3aNQu8ivo7lw1HU4= -github.com/klauspost/compress v1.16.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/klauspost/compress v1.16.3 h1:XuJt9zzcnaz6a16/OU53ZjWp/v7/42WcR5t2a0PcNQY= github.com/klauspost/compress v1.16.3/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/knadh/koanf v1.5.0 h1:q2TSd/3Pyc/5yP9ldIrSdIz26MCcyNQzW0pEAugLPNs= @@ -478,8 +489,8 @@ github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= @@ -525,9 +536,12 @@ github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= github.com/mitchellh/hashstructure/v2 v2.0.2 h1:vGKWl0YJqUNxE8d+h8f6NJLcCJrgbhC4NcD46KavDd4= github.com/mitchellh/hashstructure/v2 v2.0.2/go.mod h1:MG3aRVU/N29oo/V/IhBX8GR/zz4kQkprJgF2EVszyDE= +github.com/cnf/structhash v0.0.0-20201127153200-e1b16c1ebc08 h1:ox2F0PSMlrAAiAdknSRMDrAr8mfxPCfSZolH+/qQnyQ= +github.com/cnf/structhash v0.0.0-20201127153200-e1b16c1ebc08/go.mod h1:pCxVEbcm3AMg7ejXyorUXi6HQCzOIBf7zEDVPtw0/U4= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= @@ -537,6 +551,7 @@ github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RR github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 h1:dcztxKSvZ4Id8iPpHERQBbIJfabdt4wUm5qy3wOL2Zc= 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= @@ -545,6 +560,7 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb 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/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= +github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= github.com/mostynb/go-grpc-compression v1.1.17 h1:N9t6taOJN3mNTTi0wDf4e3lp/G/ON1TP67Pn0vTUA9I= github.com/mostynb/go-grpc-compression v1.1.17/go.mod h1:FUSBr0QjKqQgoDG/e0yiqlR6aqyXC39+g/hFLDfSsEY= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= @@ -557,24 +573,34 @@ github.com/npillmayer/nestext v0.1.3/go.mod h1:h2lrijH8jpicr25dFY+oAJLyzlya6jhnu github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= +github.com/onsi/ginkgo/v2 v2.4.0 h1:+Ig9nvqgS5OBSACXNk15PLdp0U9XPYROt9CFzVdFGIs= +github.com/onsi/gomega v1.23.0 h1:/oxKu9c2HVap+F3PfKort2Hw5DEU+HGlW8n+tguWsys= github.com/open-telemetry/opentelemetry-collector-contrib/exporter/fileexporter v0.74.0 h1:WTFx6kiRlr3qHTIsVeKeA6AjstEy2aNB6ZGKeF05XwE= github.com/open-telemetry/opentelemetry-collector-contrib/exporter/fileexporter v0.74.0/go.mod h1:2R1P84dGqCTt6+a0Wtox1VYIT304JXU32zloC275BxQ= github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusexporter v0.74.0 h1:sg7L0mW4oPu98lvbSk0ksO2E2pH1PVp72W0Izm7px7Q= github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusexporter v0.74.0/go.mod h1:DPrN5PlAvf0rQ2l72V+i94OA1D0oJSLE7kV69WVOQY0= +github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter v0.73.0 h1:cXEco83q8RbY9BGRETOmrgjzYL0UEh0//XiQpNY393U= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.74.0 h1:A+6ORAvf9b8cKq8wduxB0vVcFm3ZRjH/etYPWca8xvA= +github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.74.0/go.mod h1:cLVHnu/7vwt+zXI7RZuXYF0rR2I2GPgzsnha+jgirfE= github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.74.0 h1:EQ9+r7sOgnZmXcRc3UIoEpUaBDt2Fo7lWGh3ipfy+7c= github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.74.0/go.mod h1:H7RBK86WDrVyICR+/9y+4XhHTJWe65uXKdODBU/BmPE= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.74.0 h1:SUlZZPqhPs0FUtq8ck07P2jUnxiNY6iGdqoKVSVSoOU= github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.74.0 h1:vU5ZebauzCuYNXFlQaWaYnOfjoOAnS+Sc8+oNWoHkbM= github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.74.0/go.mod h1:TEu3TnUv1TuyHtjllrUDQ/ImpyD+GrkDejZv4hxl3G8= github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent v0.74.0 h1:COFBWXiWnhRs9x1oYJbDg5cyiNAozp8sycriD9+1/7E= github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent v0.74.0/go.mod h1:cAKlYKU+/8mk6ETOnD+EAi5gpXZjDrGweAB9YTYrv/g= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.74.0 h1:DmOc+i5N1Ut23tJnHJUIcne5JWnYh6x2VL7YG4PP+tg= github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.74.0 h1:9zWdiR9+bem0LvvWWoMZU6R3xTmu0WbcAPe8kI/jpyk= github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.74.0/go.mod h1:3RViz8fguswWAFR+8W2Kzmch3eecOVK935QVsBdpUk4= github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.74.0 h1:HQGFpz3olAA1AGH1AgVKV2dygf9QGyQF7cwTMFDdthI= github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.74.0/go.mod h1:Nw7FXUNb5aKbHxdJvXPOh382a9P0dTKfsrIv4ZIXjig= github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.74.0 h1:KaNIB5+iuKpTxFcOKP7NEnxXcEi16dFQSkfeZBgUgQc= github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.74.0/go.mod h1:wglIjSJcaZjTZwC21Aiem0lYWPRpQ9ta7ntzT2roLSY= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheusremotewrite v0.73.0 h1:nkUfL6+7gOyl9wrfRBGfjrHi3Th5IG5GG7I32vmTbQ4= github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor v0.74.0 h1:RRXvzgK5TCT8szonERO+BlVmTDahtRE0vu9B7C1J+s8= github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor v0.74.0/go.mod h1:LISh6PelAL9fA7bw8dmuXT2BG8p9Pto3jJ22/ktuxqs= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.74.0 h1:JP0wF/0RiXEDPWHvIaExy/vh5vKoBdeCZmnzhgx8j24= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM= @@ -582,13 +608,12 @@ github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zM github.com/ovh/go-ovh v1.3.0 h1:mvZaddk4E4kLcXhzb+cxBsMPYp2pHqiQpWYkInsuZPQ= github.com/ovh/go-ovh v1.3.0/go.mod h1:AxitLZ5HBRPyUd+Zl60Ajaag+rNTdVXWIkzfrVuTXWA= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= -github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM= -github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -653,8 +678,7 @@ github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8= -github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -663,9 +687,11 @@ github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFo github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= github.com/scaleway/scaleway-sdk-go v1.0.0-beta.12 h1:Aaz4T7dZp7cB2cv7D/tGtRdSMh48sRaDYr7Jh0HV4qQ= github.com/scaleway/scaleway-sdk-go v1.0.0-beta.12/go.mod h1:fCa7OJZ/9DRTnOKmxvT6pn+LPWUptQAmHF/SBJUGEcg= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/shirou/gopsutil/v3 v3.23.2 h1:PAWSuiAszn7IhPMBtXsbSCafej7PqUOvY6YywlQUExU= github.com/shirou/gopsutil/v3 v3.23.2/go.mod h1:gv0aQw33GLo3pG8SiWKiQrbDzbRY1K80RyZJ7V4Th1M= +github.com/shoenig/test v0.6.0 h1:rU0ymLHmCRqz14gABce/DzYryKU+uaWqobCBvAY6DtU= github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749 h1:bUGsEnyNbVPw06Bs80sCeARAlK8lhwqGyi6UT8ymuGk= github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= @@ -689,6 +715,7 @@ github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= @@ -703,7 +730,12 @@ github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stvp/go-udp-testing v0.0.0-20201019212854-469649b16807/go.mod h1:7jxmlfBCDBXRzr0eAQJ48XC1hBu1np4CS5+cHEYfwpc= +github.com/tidwall/gjson v1.10.2 h1:APbLGOM0rrEkd8WBw9C24nllro4ajFuJu0Sc9hRz8Bo= +github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs= +github.com/tidwall/tinylru v1.1.0 h1:XY6IUfzVTU9rpwdhKUF6nQdChgCdGjkMfLzbWyiau6I= +github.com/tidwall/wal v1.1.7 h1:emc1TRjIVsdKKSnpwGBAcsAGg0767SvUk8+ygx7Bb+4= github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+KdJV0CM= github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7AmcWpGR8lSZfqI= github.com/tklauser/numcpus v0.6.0 h1:kebhY2Qt+3U6RNK7UqpYNA+tJ23IBEGKkB7JQBfDYms= @@ -753,28 +785,20 @@ go.opentelemetry.io/collector/consumer v0.74.0 h1:+kjT/ixG+4SVSHg7u9mQe0+LNDc6Pu go.opentelemetry.io/collector/consumer v0.74.0/go.mod h1:MuGqt8/OKVAOjrh5WHr1TR2qwHizy64ZP2uNSr+XpvI= go.opentelemetry.io/collector/exporter v0.74.0 h1:VZxDuVz9kJM/Yten3xA/abJwLJNkxLThiao6E1ULW7c= go.opentelemetry.io/collector/exporter v0.74.0/go.mod h1:kw5YoorpKqEpZZ/a5ODSoYFK1mszzcKBNORd32S8Z7c= -go.opentelemetry.io/collector/exporter/loggingexporter v0.73.0 h1:Va2j/kuczRK6B/5T8TVPs701H4EB30idZp3KBkYcfdY= -go.opentelemetry.io/collector/exporter/loggingexporter v0.73.0/go.mod h1:Qo0d8LQvn2PZEEc+XVYkM8/iPWLhTx30S7q05iWWQss= -go.opentelemetry.io/collector/exporter/otlpexporter v0.73.0 h1:Z7ZZvSG40pkXb1c/aFrtdIDG+v2aWYAHubrhl6hPXm8= -go.opentelemetry.io/collector/exporter/otlpexporter v0.73.0/go.mod h1:TdlPRm0+mbr86VR6eMG1lUgf9Z+tR+6zl7Htm3X8dW8= -go.opentelemetry.io/collector/exporter/otlphttpexporter v0.74.0 h1:PxMjLplw3G9syTIZ7gtsREq9gnx76yD/jHH4gFLjsPs= -go.opentelemetry.io/collector/exporter/otlphttpexporter v0.74.0/go.mod h1:f+EVFgK6f9TibQjeEvmUPK9vSMAakmJlAspxEQS94RU= -go.opentelemetry.io/collector/extension/ballastextension v0.74.0 h1:00EQfDtj4xyyuNoRyNq5vux3odhjiADFOdaZQqRxICE= -go.opentelemetry.io/collector/extension/ballastextension v0.74.0/go.mod h1:1Xk+QccstpjInZAn6F1HPgsVHyccT8rTLULDtBFDccM= +go.opentelemetry.io/collector/exporter/loggingexporter v0.74.0 h1:x0w283QUtOy27PoUGaBD4vvIj3MTm0FGyFlgpHUrW2g= +go.opentelemetry.io/collector/exporter/loggingexporter v0.74.0/go.mod h1:1VPdIKOROz7X0Z6r7YSIl33HlgvXjzGWqec4K2FHKXc= +go.opentelemetry.io/collector/exporter/otlpexporter v0.74.0 h1:YKvTeYcBrJwbcXNy65fJ/xytUSMurpYn/KkJD0x+DAY= +go.opentelemetry.io/collector/exporter/otlpexporter v0.74.0/go.mod h1:cRbvsnpSxzySoTSnXbOGPQZu9KHlEyKkTeE21f9Q1p4= go.opentelemetry.io/collector/extension/zpagesextension v0.74.0 h1:hB82OUfwZ1lXd7i/mtwqtizabFhKN/lZpqUhnO//2iM= go.opentelemetry.io/collector/extension/zpagesextension v0.74.0/go.mod h1:0QwkmYH6QxquvqkBWMa09R7rHyfPllw1rGBCuhzbxHc= go.opentelemetry.io/collector/featuregate v0.74.0 h1:hzkzhi6pvjqEK5+CkVBJX69wpEEYqgtTFMHGlZFsQyE= go.opentelemetry.io/collector/featuregate v0.74.0/go.mod h1:pmVMr98Ps6QKyEHiVPN7o3Qd8K//M2NapfOv5BMWvA0= go.opentelemetry.io/collector/pdata v1.0.0-rc8 h1:vBikWdZFsRiT5dVsLQhnE99w3edM7eem3Q9dSqMlStE= go.opentelemetry.io/collector/pdata v1.0.0-rc8/go.mod h1:BVCBhWgclYCh7Oi6BkMiQfRa6MXv1uRTlKXuL5oBby8= -go.opentelemetry.io/collector/processor/batchprocessor v0.73.0 h1:zJw0WlqC1OuADxD2hoDQMbZ1MwDdQosoRVHyKX/2F5A= -go.opentelemetry.io/collector/processor/batchprocessor v0.73.0/go.mod h1:nvDyRxOqGg5NVM5A1KwqtRGFVFf61V83pGAK/46Ya9g= -go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.74.0 h1:mcwiWajhbllC22wqmtBrkVkKVCOrOlJ1kdxr9Kn60ek= -go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.74.0/go.mod h1:qfDIbIbshcLaCb7QgunPGkdUqmebYU4+9J9pe+C1TOE= +go.opentelemetry.io/collector/processor/batchprocessor v0.74.0 h1:X7WiqcxMsObHxOaK5MZctqW2QIiu3z9VFrB0CdECYro= +go.opentelemetry.io/collector/processor/batchprocessor v0.74.0/go.mod h1:+qP4jMcI6Kih20KZZDpf0QsJNSjTmqvQ2UQfIdjMavw= go.opentelemetry.io/collector/receiver v0.74.0 h1:jlgBFa0iByvn8VuX27UxtqiPiZE8ejmU5lb1nSptWD8= go.opentelemetry.io/collector/receiver v0.74.0/go.mod h1:SQkyATvoZCJefNkI2jnrR63SOdrmDLYCnQqXJ7ACqn0= -go.opentelemetry.io/collector/receiver/otlpreceiver v0.74.0 h1:e/X/W0z2Jtpy3Yd3CXkmEm9vSpKq/P3pKUrEVMUFBRw= -go.opentelemetry.io/collector/receiver/otlpreceiver v0.74.0/go.mod h1:9X9/RYFxJIaK0JLlRZ0PpmQSSlYpY+r4KsTOj2jWj14= go.opentelemetry.io/collector/semconv v0.74.0 h1:tPpbz87CPu/pM2/fSEKBJWXTvWvUJvEChbQkzdhWQHE= go.opentelemetry.io/collector/semconv v0.74.0/go.mod h1:xt8oDOiwa1jy24tGUo8+SzpphI7ZredS2WM/0m8rtTA= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.40.0 h1:5jD3teb4Qh7mx/nfzq4jO2WFFpvXD0vYWFDrdvNWmXk= @@ -1151,8 +1175,6 @@ google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20220329172620-7be39ac1afc7/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20230223222841-637eb2293923 h1:znp6mq/drrY+6khTAlJUDNFFcDGV2ENLYKpMq8SyCds= -google.golang.org/genproto v0.0.0-20230223222841-637eb2293923/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= google.golang.org/genproto v0.0.0-20230303212802-e74f57abe488 h1:QQF+HdiI4iocoxUjjpLgvTYDHKm99C/VtTBFnfiCJos= google.golang.org/genproto v0.0.0-20230303212802-e74f57abe488/go.mod h1:TvhZT5f700eVlTNwND1xoEZQeWTB2RY/65kplwl/bFA= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= @@ -1206,8 +1228,8 @@ gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/ini.v1 v1.57.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.66.6 h1:LATuAqN/shcYAOkv3wl2L4rkaKqkcgTBQjOyYDvcPKI= -gopkg.in/ini.v1 v1.66.6/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= +gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= @@ -1226,6 +1248,7 @@ gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/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= +gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/otelcollector/prom-config-validator-builder/main.go b/otelcollector/prom-config-validator-builder/main.go index bb2fe2ec3..ba29f8bc7 100644 --- a/otelcollector/prom-config-validator-builder/main.go +++ b/otelcollector/prom-config-validator-builder/main.go @@ -20,13 +20,16 @@ import ( type OtelConfig struct { Exporters interface{} `yaml:"exporters"` Processors interface{} `yaml:"processors"` + Extensions interface{} `yaml:"extensions"` Receivers struct { Prometheus struct { - Config interface{} `yaml:"config"` + Config interface{} `yaml:"config"` + TargetAllocator interface{} `yaml:"target_allocator"` } `yaml:"prometheus"` } `yaml:"receivers"` Service struct { - Pipelines struct { + Extensions interface{} `yaml:"extensions"` + Pipelines struct { Metrics struct { Exporters interface{} `yaml:"exporters"` Processors interface{} `yaml:"processors"` diff --git a/otelcollector/prometheusreceiver/go.mod b/otelcollector/prometheusreceiver/go.mod index 712242d0c..632343951 100644 --- a/otelcollector/prometheusreceiver/go.mod +++ b/otelcollector/prometheusreceiver/go.mod @@ -6,7 +6,7 @@ require ( github.com/go-kit/log v0.2.1 github.com/gogo/protobuf v1.3.2 github.com/golang/snappy v0.0.4 - github.com/mitchellh/hashstructure/v2 v2.0.2 + github.com/cnf/structhash v0.0.0-20201127153200-e1b16c1ebc08 github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter v0.73.0 github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.73.0 github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.73.0 diff --git a/otelcollector/prometheusreceiver/go.sum b/otelcollector/prometheusreceiver/go.sum index b86bd8ec4..d767553ef 100644 --- a/otelcollector/prometheusreceiver/go.sum +++ b/otelcollector/prometheusreceiver/go.sum @@ -464,8 +464,8 @@ github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go. github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= -github.com/mitchellh/hashstructure/v2 v2.0.2 h1:vGKWl0YJqUNxE8d+h8f6NJLcCJrgbhC4NcD46KavDd4= -github.com/mitchellh/hashstructure/v2 v2.0.2/go.mod h1:MG3aRVU/N29oo/V/IhBX8GR/zz4kQkprJgF2EVszyDE= +github.com/cnf/structhash v0.0.0-20201127153200-e1b16c1ebc08 h1:ox2F0PSMlrAAiAdknSRMDrAr8mfxPCfSZolH+/qQnyQ= +github.com/cnf/structhash v0.0.0-20201127153200-e1b16c1ebc08/go.mod h1:pCxVEbcm3AMg7ejXyorUXi6HQCzOIBf7zEDVPtw0/U4= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= diff --git a/otelcollector/prometheusreceiver/metrics_receiver.go b/otelcollector/prometheusreceiver/metrics_receiver.go index 2bc3e1e0b..bfbbd76d6 100644 --- a/otelcollector/prometheusreceiver/metrics_receiver.go +++ b/otelcollector/prometheusreceiver/metrics_receiver.go @@ -26,8 +26,8 @@ import ( "sync" "time" + "github.com/cnf/structhash" "github.com/go-kit/log" - "github.com/mitchellh/hashstructure/v2" "github.com/prometheus/common/model" "github.com/prometheus/prometheus/config" "github.com/prometheus/prometheus/discovery" @@ -67,6 +67,7 @@ type pReceiver struct { registry *featuregate.Registry scrapeManager *scrape.Manager discoveryManager *discovery.Manager + webHandler *web.Handler } // New creates a new prometheus.Receiver reference. @@ -123,7 +124,7 @@ func (r *pReceiver) Start(_ context.Context, host component.Host) error { func (r *pReceiver) startTargetAllocator(allocConf *targetAllocator, baseCfg *config.Config) error { r.settings.Logger.Info("Starting target allocator discovery") // immediately sync jobs, not waiting for the first tick - savedHash, err := r.syncTargetAllocator(uint64(0), allocConf, baseCfg) + savedHash, err := r.syncTargetAllocator("", allocConf, baseCfg) if err != nil { return err } @@ -150,18 +151,20 @@ func (r *pReceiver) startTargetAllocator(allocConf *targetAllocator, baseCfg *co // syncTargetAllocator request jobs from targetAllocator and update underlying receiver, if the response does not match the provided compareHash. // baseDiscoveryCfg can be used to provide additional ScrapeConfigs which will be added to the retrieved jobs. -func (r *pReceiver) syncTargetAllocator(compareHash uint64, allocConf *targetAllocator, baseCfg *config.Config) (uint64, error) { +func (r *pReceiver) syncTargetAllocator(compareHash string, allocConf *targetAllocator, baseCfg *config.Config) (string, error) { r.settings.Logger.Debug("Syncing target allocator jobs") scrapeConfigsResponse, err := r.getScrapeConfigsResponse(allocConf.Endpoint) if err != nil { r.settings.Logger.Error("Failed to retrieve job list", zap.Error(err)) - return 0, err + return "", err } - hash, err := hashstructure.Hash(scrapeConfigsResponse, hashstructure.FormatV2, nil) + // hash, err := hashstructure.Hash(scrapeConfigsResponse, hashstructure.FormatV2, nil) + hash, err := structhash.Hash(scrapeConfigsResponse, 1) + if err != nil { r.settings.Logger.Error("Failed to hash job list", zap.Error(err)) - return 0, err + return "", err } if hash == compareHash { // no update needed @@ -193,7 +196,7 @@ func (r *pReceiver) syncTargetAllocator(compareHash uint64, allocConf *targetAll err = r.applyCfg(baseCfg) if err != nil { r.settings.Logger.Error("Failed to apply new scrape configuration", zap.Error(err)) - return 0, err + return "", err } return hash, nil @@ -251,6 +254,9 @@ func (r *pReceiver) applyCfg(cfg *config.Config) error { if err := r.discoveryManager.ApplyConfig(discoveryCfg); err != nil { return err } + + r.webHandler.ApplyConfig(cfg) + return nil } @@ -325,18 +331,18 @@ func (r *pReceiver) initPrometheusComponents(ctx context.Context, host component Gatherer: prometheus.DefaultGatherer, } go_kit_logger := log.NewLogfmtLogger(log.NewSyncWriter(os.Stderr)) - webHandler := web.New(go_kit_logger, &webOptions) - listener, err := webHandler.Listener() + r.webHandler = web.New(go_kit_logger, &webOptions) + listener, err := r.webHandler.Listener() if err != nil { return err } // Pass config and let the web handler know the config is ready. // These are needed because Prometheus allows reloading the config without restarting. - webHandler.ApplyConfig(r.cfg.PrometheusConfig) - webHandler.SetReady(true) + r.webHandler.ApplyConfig(r.cfg.PrometheusConfig) + r.webHandler.SetReady(true) // Uses the same context as the discovery and scrape managers for shutting down go func() { - if err := webHandler.Run(ctx, listener, ""); err != nil { + if err := r.webHandler.Run(ctx, listener, ""); err != nil { r.settings.Logger.Error("Web handler failed", zap.Error(err)) host.ReportFatalError(err) } diff --git a/otelcollector/scripts/arc-eula.sh b/otelcollector/scripts/arc-eula.sh new file mode 100644 index 000000000..ee5c3f86e --- /dev/null +++ b/otelcollector/scripts/arc-eula.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +export IS_ARC_CLUSTER="false" +CLUSTER_nocase=$(echo $CLUSTER | tr "[:upper:]" "[:lower:]") +if [[ $CLUSTER_nocase =~ "connectedclusters" ]]; then + export IS_ARC_CLUSTER="true" +fi +echo "export IS_ARC_CLUSTER=$IS_ARC_CLUSTER" >> ~/.bashrc + +# EULA statement is required for Arc extension +if [ "$IS_ARC_CLUSTER" == "true" ]; then + echo "MICROSOFT SOFTWARE LICENSE TERMS\n\nMICROSOFT Azure Arc-enabled Kubernetes\n\nThis software is licensed to you as part of your or your company's subscription license for Microsoft Azure Services. You may only use the software with Microsoft Azure Services and subject to the terms and conditions of the agreement under which you obtained Microsoft Azure Services. If you do not have an active subscription license for Microsoft Azure Services, you may not use the software. Microsoft Azure Legal Information: https://azure.microsoft.com/en-us/support/legal/" +fi diff --git a/otelcollector/scripts/configmap-parser.sh b/otelcollector/scripts/configmap-parser.sh new file mode 100644 index 000000000..aaa4a29c6 --- /dev/null +++ b/otelcollector/scripts/configmap-parser.sh @@ -0,0 +1,131 @@ +#!/bin/bash + +#set agent config schema version +if [ -e "/etc/config/settings/schema-version" ] && [ -s "/etc/config/settings/schema-version" ]; then + #trim + config_schema_version="$(cat /etc/config/settings/schema-version | xargs)" + #remove all spaces + config_schema_version="${config_schema_version//[[:space:]]/}" + #take first 10 characters + config_schema_version="$(echo $config_schema_version| cut -c1-10)" + + export AZMON_AGENT_CFG_SCHEMA_VERSION=$config_schema_version + echo "export AZMON_AGENT_CFG_SCHEMA_VERSION=$config_schema_version" >> ~/.bashrc + source ~/.bashrc +fi + +#set agent config file version +if [ -e "/etc/config/settings/config-version" ] && [ -s "/etc/config/settings/config-version" ]; then + #trim + config_file_version="$(cat /etc/config/settings/config-version | xargs)" + #remove all spaces + config_file_version="${config_file_version//[[:space:]]/}" + #take first 10 characters + config_file_version="$(echo $config_file_version| cut -c1-10)" + + export AZMON_AGENT_CFG_FILE_VERSION=$config_file_version + echo "export AZMON_AGENT_CFG_FILE_VERSION=$config_file_version" >> ~/.bashrc + source ~/.bashrc +fi + +# Parse the settings for pod annotations +ruby /opt/microsoft/configmapparser/tomlparser-pod-annotation-based-scraping.rb +if [ -e "/opt/microsoft/configmapparser/config_def_pod_annotation_based_scraping" ]; then + cat /opt/microsoft/configmapparser/config_def_pod_annotation_based_scraping | while read line; do + echo $line >> ~/.bashrc + done + source /opt/microsoft/configmapparser/config_def_pod_annotation_based_scraping + source ~/.bashrc +fi + +# Parse the configmap to set the right environment variables for prometheus collector settings +ruby /opt/microsoft/configmapparser/tomlparser-prometheus-collector-settings.rb +cat /opt/microsoft/configmapparser/config_prometheus_collector_settings_env_var | while read line; do + echo $line >> ~/.bashrc +done +source /opt/microsoft/configmapparser/config_prometheus_collector_settings_env_var +source ~/.bashrc + +# Parse the settings for default scrape configs +ruby /opt/microsoft/configmapparser/tomlparser-default-scrape-settings.rb +if [ -e "/opt/microsoft/configmapparser/config_default_scrape_settings_env_var" ]; then + cat /opt/microsoft/configmapparser/config_default_scrape_settings_env_var | while read line; do + echo $line >> ~/.bashrc + done + source /opt/microsoft/configmapparser/config_default_scrape_settings_env_var + source ~/.bashrc +fi + +# Parse the settings for debug mode +ruby /opt/microsoft/configmapparser/tomlparser-debug-mode.rb +if [ -e "/opt/microsoft/configmapparser/config_debug_mode_env_var" ]; then + cat /opt/microsoft/configmapparser/config_debug_mode_env_var | while read line; do + echo $line >> ~/.bashrc + done + source /opt/microsoft/configmapparser/config_debug_mode_env_var + source ~/.bashrc +fi + +# Parse the settings for default targets metrics keep list config +ruby /opt/microsoft/configmapparser/tomlparser-default-targets-metrics-keep-list.rb + +# Parse the settings for default-targets-scrape-interval-settings config +ruby /opt/microsoft/configmapparser/tomlparser-scrape-interval.rb + +# Merge default and custom prometheus config +ruby /opt/microsoft/configmapparser/prometheus-config-merger.rb + +echo "export AZMON_INVALID_CUSTOM_PROMETHEUS_CONFIG=false" >> ~/.bashrc +export AZMON_INVALID_CUSTOM_PROMETHEUS_CONFIG=false +echo "export CONFIG_VALIDATOR_RUNNING_IN_AGENT=true" >> ~/.bashrc +export CONFIG_VALIDATOR_RUNNING_IN_AGENT=true +if [ -e "/opt/promMergedConfig.yml" ]; then + # promconfigvalidator validates by generating an otel config and running through receiver's config load and validate method + /opt/promconfigvalidator --config "/opt/promMergedConfig.yml" --output "/opt/microsoft/otelcollector/collector-config.yml" --otelTemplate "/opt/microsoft/otelcollector/collector-config-template.yml" + if [ $? -ne 0 ] || [ ! -e "/opt/microsoft/otelcollector/collector-config.yml" ]; then + # Use default config if specified config is invalid + echo_error "prom-config-validator::Prometheus custom config validation failed. The custom config will not be used" + echo "export AZMON_INVALID_CUSTOM_PROMETHEUS_CONFIG=true" >> ~/.bashrc + export AZMON_INVALID_CUSTOM_PROMETHEUS_CONFIG=true + if [ -e "/opt/defaultsMergedConfig.yml" ]; then + echo_error "prom-config-validator::Running validator on just default scrape configs" + /opt/promconfigvalidator --config "/opt/defaultsMergedConfig.yml" --output "/opt/collector-config-with-defaults.yml" --otelTemplate "/opt/microsoft/otelcollector/collector-config-template.yml" + if [ $? -ne 0 ] || [ ! -e "/opt/collector-config-with-defaults.yml" ]; then + echo_error "prom-config-validator::Prometheus default scrape config validation failed. No scrape configs will be used" + else + cp "/opt/collector-config-with-defaults.yml" "/opt/microsoft/otelcollector/collector-config-default.yml" + fi + fi + echo "export AZMON_USE_DEFAULT_PROMETHEUS_CONFIG=true" >> ~/.bashrc + export AZMON_USE_DEFAULT_PROMETHEUS_CONFIG=true + fi +elif [ -e "/opt/defaultsMergedConfig.yml" ]; then + echo_warning "prom-config-validator::No custom prometheus config found. Only using default scrape configs" + /opt/promconfigvalidator --config "/opt/defaultsMergedConfig.yml" --output "/opt/collector-config-with-defaults.yml" --otelTemplate "/opt/microsoft/otelcollector/collector-config-template.yml" + if [ $? -ne 0 ] || [ ! -e "/opt/collector-config-with-defaults.yml" ]; then + echo_error "prom-config-validator::Prometheus default scrape config validation failed. No scrape configs will be used" + else + echo "prom-config-validator::Prometheus default scrape config validation succeeded, using this as collector config" + cp "/opt/collector-config-with-defaults.yml" "/opt/microsoft/otelcollector/collector-config-default.yml" + fi + echo "export AZMON_USE_DEFAULT_PROMETHEUS_CONFIG=true" >> ~/.bashrc + export AZMON_USE_DEFAULT_PROMETHEUS_CONFIG=true + +else + # This else block is needed, when there is no custom config mounted as config map or default configs enabled + echo_error "prom-config-validator::No custom config via configmap or default scrape configs enabled." + echo "export AZMON_USE_DEFAULT_PROMETHEUS_CONFIG=true" >> ~/.bashrc + export AZMON_USE_DEFAULT_PROMETHEUS_CONFIG=true +fi + +# Set the environment variables from the prom-config-validator +if [ -e "/opt/microsoft/prom_config_validator_env_var" ]; then + cat /opt/microsoft/prom_config_validator_env_var | while read line; do + echo $line >> ~/.bashrc + done + source /opt/microsoft/prom_config_validator_env_var + source ~/.bashrc +fi + +source ~/.bashrc +echo "prom-config-validator::Use default prometheus config: ${AZMON_USE_DEFAULT_PROMETHEUS_CONFIG}" \ No newline at end of file diff --git a/otelcollector/scripts/livenessprobe-configreader.sh b/otelcollector/scripts/livenessprobe-configreader.sh new file mode 100644 index 000000000..8a331caed --- /dev/null +++ b/otelcollector/scripts/livenessprobe-configreader.sh @@ -0,0 +1,11 @@ +#test to exit non zero value if config changed +if [ ! -s "/opt/inotifyoutput.txt" ] #file doesn't exists or size == 0 +then + exit 0 +else + if [ -s "/opt/inotifyoutput.txt" ] #file exists and size > 0 + then + echo "inotifyoutput.txt has been updated - config changed" > /dev/termination-log + exit 1 + fi +fi \ No newline at end of file diff --git a/otelcollector/scripts/logger.sh b/otelcollector/scripts/logger.sh new file mode 100644 index 000000000..548a71159 --- /dev/null +++ b/otelcollector/scripts/logger.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +# Colors for Logging +Color_Off='\033[0m' +Red='\033[0;31m' +Green='\033[0;32m' +Yellow='\033[0;33m' +Cyan='\033[0;36m' + +# Echo text in red +echo_error () { + echo -e "${Red}$1${Color_Off}" +} + +# Echo text in yellow +echo_warning () { + echo -e "${Yellow}$1${Color_Off}" +} + +# Echo variable name in Cyan and value in regular color +echo_var () { + echo -e "${Cyan}$1${Color_Off}=$2" +} \ No newline at end of file diff --git a/otelcollector/scripts/main-configreader.sh b/otelcollector/scripts/main-configreader.sh new file mode 100644 index 000000000..c8d1d6f75 --- /dev/null +++ b/otelcollector/scripts/main-configreader.sh @@ -0,0 +1,50 @@ +#!/bin/bash + +# Run logging utility +source /opt/logger.sh + +#Run inotify as a daemon to track changes to the mounted configmap. +touch /opt/inotifyoutput.txt +inotifywait /etc/config/settings --daemon --recursive --outfile "/opt/inotifyoutput.txt" --event create,delete --format '%e : %T' --timefmt '+%s' + +# Run ARC EULA utility +source /opt/arc-eula.sh + +echo_var "MODE" "$MODE" +echo_var "CONTAINER_TYPE" "$CONTAINER_TYPE" +echo_var "CLUSTER" "$CLUSTER" + +# Run configmap parser utility +source /opt/configmap-parser.sh + +#start cron daemon for logrotate +/usr/sbin/crond -n -s & + + +# Run configreader to update the configmap for TargetAllocator +# Add this error handling - if [ $? -ne 0 ] after running the configurationreader exe +if [ "$AZMON_USE_DEFAULT_PROMETHEUS_CONFIG" = "true" ] && [ -e "/opt/microsoft/otelcollector/collector-config-default.yml" ] ; then + echo_warning "Running config reader with only default scrape configs enabled" + /opt/configurationreader --config /opt/microsoft/otelcollector/collector-config-default.yml +elif [ -e "/opt/microsoft/otelcollector/collector-config.yml" ]; then + echo_warning "Running config reader with merged default and custom scrape config via configmap" + /opt/configurationreader --config /opt/microsoft/otelcollector/collector-config.yml +else + echo_warning "No configs found via configmap, not running config reader" +fi + +# Get ruby version +RUBY_VERSION=`ruby --version` +echo_var "RUBY_VERSION" "$RUBY_VERSION" + +# Get golang version +GOLANG_VERSION=`cat /opt/goversion.txt` +echo_var "GOLANG_VERSION" "$GOLANG_VERSION" + +shutdown() { + echo "shutting down" +} + +trap "shutdown" SIGTERM + +sleep inf & wait \ No newline at end of file diff --git a/otelcollector/scripts/main.sh b/otelcollector/scripts/main.sh index 3744edbe0..654dce3f7 100644 --- a/otelcollector/scripts/main.sh +++ b/otelcollector/scripts/main.sh @@ -1,42 +1,14 @@ #!/bin/bash -# Colors for Logging -Color_Off='\033[0m' -Red='\033[0;31m' -Green='\033[0;32m' -Yellow='\033[0;33m' -Cyan='\033[0;36m' - -# Echo text in red -echo_error () { - echo -e "${Red}$1${Color_Off}" -} - -# Echo text in yellow -echo_warning () { - echo -e "${Yellow}$1${Color_Off}" -} - -# Echo variable name in Cyan and value in regular color -echo_var () { - echo -e "${Cyan}$1${Color_Off}=$2" -} +# Run logging utility +source /opt/logger.sh #Run inotify as a daemon to track changes to the mounted configmap. touch /opt/inotifyoutput.txt inotifywait /etc/config/settings --daemon --recursive --outfile "/opt/inotifyoutput.txt" --event create,delete --format '%e : %T' --timefmt '+%s' -export IS_ARC_CLUSTER="false" -CLUSTER_nocase=$(echo $CLUSTER | tr "[:upper:]" "[:lower:]") -if [[ $CLUSTER_nocase =~ "connectedclusters" ]]; then - export IS_ARC_CLUSTER="true" -fi -echo "export IS_ARC_CLUSTER=$IS_ARC_CLUSTER" >> ~/.bashrc - -# EULA statement is required for Arc extension -if [ "$IS_ARC_CLUSTER" == "true" ]; then - echo "MICROSOFT SOFTWARE LICENSE TERMS\n\nMICROSOFT Azure Arc-enabled Kubernetes\n\nThis software is licensed to you as part of your or your company's subscription license for Microsoft Azure Services. You may only use the software with Microsoft Azure Services and subject to the terms and conditions of the agreement under which you obtained Microsoft Azure Services. If you do not have an active subscription license for Microsoft Azure Services, you may not use the software. Microsoft Azure Legal Information: https://azure.microsoft.com/en-us/support/legal/" -fi +# Run ARC EULA utility +source /opt/arc-eula.sh if [ -z $MODE ]; then MODE="simple" @@ -45,6 +17,14 @@ echo_var "MODE" "$MODE" echo_var "CONTROLLER_TYPE" "$CONTROLLER_TYPE" echo_var "CLUSTER" "$CLUSTER" +aikey=$(echo $APPLICATIONINSIGHTS_AUTH | base64 -d) +export TELEMETRY_APPLICATIONINSIGHTS_KEY=$aikey +echo "export TELEMETRY_APPLICATIONINSIGHTS_KEY=$aikey" >> ~/.bashrc +source ~/.bashrc + +#get controller kind in lowercase, trimmed +controllerType=$(echo $CONTROLLER_TYPE | tr "[:upper:]" "[:lower:]" | xargs) + # If using a trusted CA for HTTP Proxy, copy this over from the node and install cp /anchors/ubuntu/* /etc/pki/ca-trust/source/anchors 2>/dev/null cp /anchors/mariner/* /etc/pki/ca-trust/source/anchors 2>/dev/null @@ -103,146 +83,12 @@ if [ $IS_ARC_CLUSTER == "true" ] && [ $HTTP_PROXY_ENABLED == "true" ]; then fi fi -#set agent config schema version -if [ -e "/etc/config/settings/schema-version" ] && [ -s "/etc/config/settings/schema-version" ]; then - #trim - config_schema_version="$(cat /etc/config/settings/schema-version | xargs)" - #remove all spaces - config_schema_version="${config_schema_version//[[:space:]]/}" - #take first 10 characters - config_schema_version="$(echo $config_schema_version| cut -c1-10)" - - export AZMON_AGENT_CFG_SCHEMA_VERSION=$config_schema_version - echo "export AZMON_AGENT_CFG_SCHEMA_VERSION=$config_schema_version" >> ~/.bashrc - source ~/.bashrc -fi - -#set agent config file version -if [ -e "/etc/config/settings/config-version" ] && [ -s "/etc/config/settings/config-version" ]; then - #trim - config_file_version="$(cat /etc/config/settings/config-version | xargs)" - #remove all spaces - config_file_version="${config_file_version//[[:space:]]/}" - #take first 10 characters - config_file_version="$(echo $config_file_version| cut -c1-10)" - - export AZMON_AGENT_CFG_FILE_VERSION=$config_file_version - echo "export AZMON_AGENT_CFG_FILE_VERSION=$config_file_version" >> ~/.bashrc - source ~/.bashrc -fi - -aikey=$(echo $APPLICATIONINSIGHTS_AUTH | base64 -d) -export TELEMETRY_APPLICATIONINSIGHTS_KEY=$aikey -echo "export TELEMETRY_APPLICATIONINSIGHTS_KEY=$aikey" >> ~/.bashrc -source ~/.bashrc - -# Parse the settings for pod annotations -ruby /opt/microsoft/configmapparser/tomlparser-pod-annotation-based-scraping.rb -if [ -e "/opt/microsoft/configmapparser/config_def_pod_annotation_based_scraping" ]; then - cat /opt/microsoft/configmapparser/config_def_pod_annotation_based_scraping | while read line; do - echo $line >> ~/.bashrc - done - source /opt/microsoft/configmapparser/config_def_pod_annotation_based_scraping - source ~/.bashrc -fi - -# Parse the configmap to set the right environment variables for prometheus collector settings -ruby /opt/microsoft/configmapparser/tomlparser-prometheus-collector-settings.rb -cat /opt/microsoft/configmapparser/config_prometheus_collector_settings_env_var | while read line; do - echo $line >> ~/.bashrc -done -source /opt/microsoft/configmapparser/config_prometheus_collector_settings_env_var -source ~/.bashrc - -# Parse the settings for default scrape configs -ruby /opt/microsoft/configmapparser/tomlparser-default-scrape-settings.rb -if [ -e "/opt/microsoft/configmapparser/config_default_scrape_settings_env_var" ]; then - cat /opt/microsoft/configmapparser/config_default_scrape_settings_env_var | while read line; do - echo $line >> ~/.bashrc - done - source /opt/microsoft/configmapparser/config_default_scrape_settings_env_var - source ~/.bashrc -fi - -# Parse the settings for debug mode -ruby /opt/microsoft/configmapparser/tomlparser-debug-mode.rb -if [ -e "/opt/microsoft/configmapparser/config_debug_mode_env_var" ]; then - cat /opt/microsoft/configmapparser/config_debug_mode_env_var | while read line; do - echo $line >> ~/.bashrc - done - source /opt/microsoft/configmapparser/config_debug_mode_env_var - source ~/.bashrc -fi - -# Parse the settings for default targets metrics keep list config -ruby /opt/microsoft/configmapparser/tomlparser-default-targets-metrics-keep-list.rb - -# Parse the settings for default-targets-scrape-interval-settings config -ruby /opt/microsoft/configmapparser/tomlparser-scrape-interval.rb - -# Merge default and custom prometheus config -ruby /opt/microsoft/configmapparser/prometheus-config-merger.rb - -echo "export AZMON_INVALID_CUSTOM_PROMETHEUS_CONFIG=false" >> ~/.bashrc -export AZMON_INVALID_CUSTOM_PROMETHEUS_CONFIG=false -echo "export CONFIG_VALIDATOR_RUNNING_IN_AGENT=true" >> ~/.bashrc -export CONFIG_VALIDATOR_RUNNING_IN_AGENT=true -if [ -e "/opt/promMergedConfig.yml" ]; then - # promconfigvalidator validates by generating an otel config and running through receiver's config load and validate method - /opt/promconfigvalidator --config "/opt/promMergedConfig.yml" --output "/opt/microsoft/otelcollector/collector-config.yml" --otelTemplate "/opt/microsoft/otelcollector/collector-config-template.yml" - if [ $? -ne 0 ] || [ ! -e "/opt/microsoft/otelcollector/collector-config.yml" ]; then - # Use default config if specified config is invalid - echo_error "prom-config-validator::Prometheus custom config validation failed. The custom config will not be used" - echo "export AZMON_INVALID_CUSTOM_PROMETHEUS_CONFIG=true" >> ~/.bashrc - export AZMON_INVALID_CUSTOM_PROMETHEUS_CONFIG=true - if [ -e "/opt/defaultsMergedConfig.yml" ]; then - echo_error "prom-config-validator::Running validator on just default scrape configs" - /opt/promconfigvalidator --config "/opt/defaultsMergedConfig.yml" --output "/opt/collector-config-with-defaults.yml" --otelTemplate "/opt/microsoft/otelcollector/collector-config-template.yml" - if [ $? -ne 0 ] || [ ! -e "/opt/collector-config-with-defaults.yml" ]; then - echo_error "prom-config-validator::Prometheus default scrape config validation failed. No scrape configs will be used" - else - cp "/opt/collector-config-with-defaults.yml" "/opt/microsoft/otelcollector/collector-config-default.yml" - fi - fi - echo "export AZMON_USE_DEFAULT_PROMETHEUS_CONFIG=true" >> ~/.bashrc - export AZMON_USE_DEFAULT_PROMETHEUS_CONFIG=true - fi -elif [ -e "/opt/defaultsMergedConfig.yml" ]; then - echo_warning "prom-config-validator::No custom prometheus config found. Only using default scrape configs" - /opt/promconfigvalidator --config "/opt/defaultsMergedConfig.yml" --output "/opt/collector-config-with-defaults.yml" --otelTemplate "/opt/microsoft/otelcollector/collector-config-template.yml" - if [ $? -ne 0 ] || [ ! -e "/opt/collector-config-with-defaults.yml" ]; then - echo_error "prom-config-validator::Prometheus default scrape config validation failed. No scrape configs will be used" - else - echo "prom-config-validator::Prometheus default scrape config validation succeeded, using this as collector config" - cp "/opt/collector-config-with-defaults.yml" "/opt/microsoft/otelcollector/collector-config-default.yml" - fi - echo "export AZMON_USE_DEFAULT_PROMETHEUS_CONFIG=true" >> ~/.bashrc - export AZMON_USE_DEFAULT_PROMETHEUS_CONFIG=true - -else - # This else block is needed, when there is no custom config mounted as config map or default configs enabled - echo_error "prom-config-validator::No custom config or default scrape configs enabled. No scrape configs will be used" - echo "export AZMON_USE_DEFAULT_PROMETHEUS_CONFIG=true" >> ~/.bashrc - export AZMON_USE_DEFAULT_PROMETHEUS_CONFIG=true -fi - -# Set the environment variables from the prom-config-validator -if [ -e "/opt/microsoft/prom_config_validator_env_var" ]; then - cat /opt/microsoft/prom_config_validator_env_var | while read line; do - echo $line >> ~/.bashrc - done - source /opt/microsoft/prom_config_validator_env_var - source ~/.bashrc -fi - -source ~/.bashrc -echo "prom-config-validator::Use default prometheus config: ${AZMON_USE_DEFAULT_PROMETHEUS_CONFIG}" +source /opt/configmap-parser.sh #start cron daemon for logrotate /usr/sbin/crond -n -s & -#get controller kind in lowercase, trimmed -controllerType=$(echo $CONTROLLER_TYPE | tr "[:upper:]" "[:lower:]" | xargs) + if [ $controllerType = "replicaset" ]; then fluentBitConfigFile="/opt/fluent-bit/fluent-bit.conf" if [ "$CLUSTER_OVERRIDE" = "true" ]; then @@ -393,8 +239,12 @@ GOLANG_VERSION=`cat /opt/goversion.txt` echo_var "GOLANG_VERSION" "$GOLANG_VERSION" # Start otelcollector -if [ "$AZMON_USE_DEFAULT_PROMETHEUS_CONFIG" = "true" ]; then - echo_warning "Starting otelcollector with only default scrape configs enabled" +if [ $controllerType = "replicaset" ]; then + echo_warning "Starting otelcollector in replicaset with Target allocator settings" + /opt/microsoft/otelcollector/otelcollector --config /opt/microsoft/otelcollector/collector-config-replicaset.yml &> /opt/microsoft/otelcollector/collector-log.txt & +elif [ "$AZMON_USE_DEFAULT_PROMETHEUS_CONFIG" = "true" ]; then + # Commenting this out since config can be applied via CRD + # echo_warning "Starting otelcollector with only default scrape configs enabled" /opt/microsoft/otelcollector/otelcollector --config /opt/microsoft/otelcollector/collector-config-default.yml &> /opt/microsoft/otelcollector/collector-log.txt & else echo "Starting otelcollector" diff --git a/otelcollector/scripts/setup-configreader.sh b/otelcollector/scripts/setup-configreader.sh new file mode 100644 index 000000000..21ca95e29 --- /dev/null +++ b/otelcollector/scripts/setup-configreader.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +TMPDIR="/opt" +cd $TMPDIR + +if [ -z $1 ]; then + ARCH="amd64" +else + ARCH=$1 +fi + +sudo tdnf install ca-certificates-microsoft -y +sudo update-ca-trust + +#Need this for newer scripts +chmod 544 $TMPDIR/*.sh +chmod 544 $TMPDIR/microsoft/liveness/*.sh +chmod 544 $TMPDIR/microsoft/configmapparser/*.rb + +chmod 744 /usr/sbin/ + +#download inotify tools for watching configmap changes +echo "Installing inotify..." +sudo tdnf check-update +sudo tdnf repolist --refresh +sudo tdnf install inotify-tools -y + +echo "Installing packages for re2 gem install..." +sudo tdnf install -y build-essential re2-devel + +echo "Installing tomlrb, deep_merge and re2 gems..." +gem install colorize +gem install tomlrb +gem install deep_merge +gem install re2 + +# Setup hourly cron for logrotate +cp /etc/cron.daily/logrotate /etc/cron.hourly/ diff --git a/otelcollector/telegraf/telegraf-prometheus-collector.conf b/otelcollector/telegraf/telegraf-prometheus-collector.conf index e44ed5a7b..063ca63bd 100644 --- a/otelcollector/telegraf/telegraf-prometheus-collector.conf +++ b/otelcollector/telegraf/telegraf-prometheus-collector.conf @@ -199,3 +199,23 @@ metric_version = 2 url_tag = "scrapeUrl" response_timeout = "15s" + +[[inputs.prometheus]] + interval = "5m" + urls = ["http://localhost:9090/metrics"] + fieldpass = ["prometheus_sd_http_failures_total"] + metric_version = 2 + url_tag = "scrapeUrl" + response_timeout = "15s" + [inputs.prometheus.tagdrop] + controllertype = [ "DaemonSet"] + +[[inputs.prometheus]] + interval = "5m" + urls = ["http://ama-metrics-targetallocator.kube-system.svc.cluster.local/metrics"] + fieldpass = ["opentelemetry_allocator_targets","opentelemetry_allocator_collectors_discovered"] + metric_version = 2 + url_tag = "scrapeUrl" + response_timeout = "15s" + [inputs.prometheus.tagdrop] + controllertype = [ "DaemonSet"] From c0f033b87e007c7b644ffcd41785d7a4f9c24140 Mon Sep 17 00:00:00 2001 From: vishwanath Date: Mon, 7 Aug 2023 21:16:37 -0700 Subject: [PATCH 006/242] upgrade all to latest and setup resource attributes --- .pipelines/azure-pipeline-build.yml | 4 ++-- otelcollector/metricextension/me.config | 25 ++++++++++++++++++++++++- otelcollector/scripts/setup.sh | 8 +++----- 3 files changed, 29 insertions(+), 8 deletions(-) diff --git a/.pipelines/azure-pipeline-build.yml b/.pipelines/azure-pipeline-build.yml index 3241157ee..96e6de481 100644 --- a/.pipelines/azure-pipeline-build.yml +++ b/.pipelines/azure-pipeline-build.yml @@ -186,12 +186,12 @@ jobs: docker buildx use dockerbuilder docker login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) if [ "$(Build.Reason)" != "PullRequest" ]; then - docker buildx build . --platform=linux/amd64 --file ./build/linux/Dockerfile -t $(LINUX_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/metadata.json --push + docker buildx build . --platform=linux/amd64,linux/arm64 --file ./build/linux/Dockerfile -t $(LINUX_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/metadata.json --push docker pull $(LINUX_FULL_IMAGE_NAME) else # Build multiarch image to make sure there are no issues - docker buildx build . --platform=linux/amd64 --file ./build/linux/Dockerfile -t $(LINUX_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/metadata.json + docker buildx build . --platform=linux/amd64,linux/arm64 --file ./build/linux/Dockerfile -t $(LINUX_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/metadata.json # Load in amd64 image to run vulnerability scan docker buildx build . --file ./build/linux/Dockerfile -t $(LINUX_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/metadata.json diff --git a/otelcollector/metricextension/me.config b/otelcollector/metricextension/me.config index 2c0e3a79e..f6c22d489 100644 --- a/otelcollector/metricextension/me.config +++ b/otelcollector/metricextension/me.config @@ -7,7 +7,30 @@ "resourceAttributes":[ "cluster", "job", - "instance" + "instance", + "service.name", + "service.namespace", + "service.version", + "service.instance.id", + "telemetry.sdk.name", + "telemetry.sdk.version", + "telemetry.auto.version", + "process.pid", + "process.executable.name", + "process.executable.path", + "os.type", + "os.version", + "k8s.node.name", + "k8s.namespace.name", + "k8s.pod.uid", + "k8s.pod.name", + "k8s.container.name", + "k8s.deployment.name", + "k8s.replicaset.name", + "k8s.statefulset.name", + "k8s.daemonset.name", + "k8s.job.name", + "k8s.cronjob.name" ], "honorResourceAttributes":true, "maxReceiveMessageSizeMBytes": 12 diff --git a/otelcollector/scripts/setup.sh b/otelcollector/scripts/setup.sh index 4594925c6..afbe1159c 100644 --- a/otelcollector/scripts/setup.sh +++ b/otelcollector/scripts/setup.sh @@ -44,7 +44,7 @@ echo "Installing mdsd..." # fi # Install this way once moving to the Mariner published RPMs: -sudo tdnf install -y azure-mdsd-1.23.5 +sudo tdnf install -y azure-mdsd-1.27.0 cp -f $TMPDIR/envmdsd /etc/mdsd.d # Create the following directory for mdsd logs @@ -52,7 +52,7 @@ mkdir /opt/microsoft/linuxmonagent # Install telegraf echo "Installing telegraf..." -sudo tdnf install telegraf-1.25.2 -y +sudo tdnf install telegraf-1.27.2 -y sudo tdnf list installed | grep telegraf | awk '{print $2}' > telegrafversion.txt # Install fluent-bit @@ -64,9 +64,7 @@ cp /etc/cron.daily/logrotate /etc/cron.hourly/ # Install ME echo "Installing Metrics Extension..." -sudo wget https://github.com/Azure/prometheus-collector/releases/download/me-linux-exemplar-trial/metricsext2-2.2023.707.1841-1.cm2.x86_64.rpm -sudo tdnf install -y metricsext2-2.2023.707.1841-1.cm2.x86_64.rpm -#sudo tdnf install -y metricsext2-2.2023.224.2214 +sudo tdnf install -y metricsext2-2.2023.721.1630 sudo tdnf list installed | grep metricsext2 | awk '{print $2}' > metricsextversion.txt # tdnf does not have an autoremove feature. Only necessary packages are copied over to distroless build. Below reduces the image size if using non-distroless From 29bb664b82313eb898ed3c0992babc299c575a98 Mon Sep 17 00:00:00 2001 From: vishwanath Date: Mon, 7 Aug 2023 23:27:56 -0700 Subject: [PATCH 007/242] trigger build --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a46064a33..a23d9e29c 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ | Publish | [![Build Status](https://github-private.vsrm.visualstudio.com/_apis/public/Release/badge/2d36c31d-2f89-409f-9a3e-32e4e9699840/79/127)](https://github-private.visualstudio.com/azure/_release?definitionId=79&view=mine&_a=releases) | | Deploy | [![Build Status](https://github-private.vsrm.visualstudio.com/_apis/public/Release/badge/2d36c31d-2f89-409f-9a3e-32e4e9699840/79/128)](https://github-private.visualstudio.com/azure/_release?definitionId=79&view=mine&_a=releases) | -# Project +# Project This project is Azure Monitor managed service for Prometheus, which is the agent based solution to collect Prometheus metrics to be sent to managed Azure Monitor store. From 46503f87bdc7b3b85b7e0bf31536cdf67eda8978 Mon Sep 17 00:00:00 2001 From: rashmichandrashekar Date: Mon, 14 Aug 2023 14:01:39 -0700 Subject: [PATCH 008/242] Rashmi/crd (#563) --- .../templates/ama-metrics-clusterRole.yaml | 2 +- .../templates/ama-metrics-deployment.yaml | 1 + .../templates/ama-metrics-podmonitor-crd.yaml | 4 ++-- .../templates/ama-metrics-servicemonitor-crd.yaml | 4 ++-- .../templates/ama-metrics-targetallocator.yaml | 2 ++ otelcollector/opentelemetry-operator | 2 +- 6 files changed, 9 insertions(+), 6 deletions(-) diff --git a/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-clusterRole.yaml b/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-clusterRole.yaml index 62b6b259a..e08dcfe5d 100644 --- a/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-clusterRole.yaml +++ b/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-clusterRole.yaml @@ -40,7 +40,7 @@ rules: resources: ["azureclusteridentityrequests", "azureclusteridentityrequests/status"] verbs: ["get", "update", "list", "create"] - apiGroups: - - monitoring.coreos.com + - azmonitoring.coreos.com resources: - servicemonitors - podmonitors diff --git a/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-deployment.yaml b/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-deployment.yaml index 1bf13e861..708e74e13 100644 --- a/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-deployment.yaml +++ b/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-deployment.yaml @@ -5,6 +5,7 @@ metadata: namespace: kube-system labels: component: ama-metrics + kubernetes.azure.com/managedby: aks spec: replicas: 1 revisionHistoryLimit: 2 diff --git a/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-podmonitor-crd.yaml b/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-podmonitor-crd.yaml index bb46f8e8d..a95cf2c1f 100644 --- a/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-podmonitor-crd.yaml +++ b/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-podmonitor-crd.yaml @@ -5,9 +5,9 @@ metadata: annotations: controller-gen.kubebuilder.io/version: v0.11.1 creationTimestamp: null - name: podmonitors.monitoring.coreos.com + name: podmonitors.azmonitoring.coreos.com spec: - group: monitoring.coreos.com + group: azmonitoring.coreos.com names: categories: - prometheus-operator diff --git a/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-servicemonitor-crd.yaml b/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-servicemonitor-crd.yaml index cd8d1c4cb..2a8a34207 100644 --- a/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-servicemonitor-crd.yaml +++ b/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-servicemonitor-crd.yaml @@ -4,9 +4,9 @@ metadata: annotations: controller-gen.kubebuilder.io/version: v0.11.1 creationTimestamp: null - name: servicemonitors.monitoring.coreos.com + name: servicemonitors.azmonitoring.coreos.com spec: - group: monitoring.coreos.com + group: azmonitoring.coreos.com names: categories: - prometheus-operator diff --git a/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-targetallocator.yaml b/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-targetallocator.yaml index 327613cea..558ea2132 100644 --- a/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-targetallocator.yaml +++ b/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-targetallocator.yaml @@ -48,6 +48,8 @@ spec: {{- else }} value: "{{ .Values.global.commonGlobals.Customer.AzureResourceID }}" {{- end }} + - name: PROMETHEUS_OPERATOR_V1_CUSTOM_GROUP + value: "azmonitoring.coreos.com" image: "mcr.microsoft.com{{ .Values.AzureMonitorMetrics.ImageRepository }}:{{ .Values.AzureMonitorMetrics.ImageTagTargetAllocator }}" imagePullPolicy: IfNotPresent name: targetallocator diff --git a/otelcollector/opentelemetry-operator b/otelcollector/opentelemetry-operator index cb2f1f568..e40a92a28 160000 --- a/otelcollector/opentelemetry-operator +++ b/otelcollector/opentelemetry-operator @@ -1 +1 @@ -Subproject commit cb2f1f56854e2d5b69acf4db001e65dd5d06373f +Subproject commit e40a92a2841641b490ce48149bb630b768ce8567 From 25da9618b73d52dc25a07a0f54053c38532c3ba9 Mon Sep 17 00:00:00 2001 From: Rashmi Chandrashekar Date: Mon, 14 Aug 2023 14:03:42 -0700 Subject: [PATCH 009/242] building from right branch --- .pipelines/azure-pipeline-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pipelines/azure-pipeline-build.yml b/.pipelines/azure-pipeline-build.yml index 6e3cf1d87..b74121d2f 100644 --- a/.pipelines/azure-pipeline-build.yml +++ b/.pipelines/azure-pipeline-build.yml @@ -2,7 +2,7 @@ trigger: branches: include: - main - - grace/operator + - operator-targetallocator pr: autoCancel: true From 29cd8752d144b80082688e1bef05fb7b53d9bae0 Mon Sep 17 00:00:00 2001 From: Rashmi Chandrashekar Date: Mon, 14 Aug 2023 14:33:29 -0700 Subject: [PATCH 010/242] fixing dockerfile --- otelcollector/opentelemetry-operator | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/otelcollector/opentelemetry-operator b/otelcollector/opentelemetry-operator index e40a92a28..2b60c8996 160000 --- a/otelcollector/opentelemetry-operator +++ b/otelcollector/opentelemetry-operator @@ -1 +1 @@ -Subproject commit e40a92a2841641b490ce48149bb630b768ce8567 +Subproject commit 2b60c8996e374480b008986e5eb68522b53da58e From 714280bcab149760e5355530cff801826d8e6bfc Mon Sep 17 00:00:00 2001 From: Rashmi Chandrashekar Date: Mon, 14 Aug 2023 14:53:20 -0700 Subject: [PATCH 011/242] trying recursuive for TA build --- .pipelines/azure-pipeline-build.yml | 1354 +++++++++++++-------------- 1 file changed, 677 insertions(+), 677 deletions(-) diff --git a/.pipelines/azure-pipeline-build.yml b/.pipelines/azure-pipeline-build.yml index f76b01753..f7b6927b3 100644 --- a/.pipelines/azure-pipeline-build.yml +++ b/.pipelines/azure-pipeline-build.yml @@ -139,156 +139,156 @@ jobs: pathToPublish: '$(Build.ArtifactStagingDirectory)' artifactName: drop -- job: Linux - displayName: Build linux image - pool: - name: Azure-Pipelines-CI-Test-EO - dependsOn: common - variables: - LINUX_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.LINUX_FULL_IMAGE_NAME'] ] - # This is necessary because of: https://github.com/moby/moby/issues/37965 - DOCKER_BUILDKIT: 1 - steps: - - checkout: self - submodules: true - - - task: CodeQL3000Init@0 - displayName: 'SDL: init codeql' - condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) - - - task: GoTool@0 - displayName: "Build: specify golang version" - inputs: - version: '1.19' - - - bash: | - sudo apt-get install build-essential -y - make - condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) - workingDirectory: $(Build.SourcesDirectory)/otelcollector/opentelemetry-collector-builder/ - displayName: "SDL: build otelcollector, promconfigvalidator, targetallocator, and fluent-bit plugin for scanning" - - - task: BinSkim@4 - displayName: 'SDL: run binskim' - condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) - inputs: - InputType: 'CommandLine' - arguments: 'analyze --rich-return-code $(Build.SourcesDirectory)/otelcollector/opentelemetry-collector-builder/otelcollector $(Build.SourcesDirectory)/otelcollector/prom-config-validator-builder/promconfigvalidator $(Build.SourcesDirectory)/otelcollector/opentelemetry-operator/cmd/otel-allocator/targetallocator $(Build.SourcesDirectory)/otelcollector/fluent-bit/src/out_appinsights.so' - - - task: Gosec@1 - displayName: 'SDL: run gosec' - condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) - inputs: - targetPattern: 'gosecPattern' - targetGosecPattern: '$(Build.SourcesDirectory)/otelcollector' - - - bash: | - wget https://github.com/microsoft/DevSkim/releases/download/v0.6.9/DevSkim_linux_0.6.9.zip - unzip DevSkim_linux_0.6.9.zip - chmod 775 DevSkim_linux_0.6.9/devskim - ./DevSkim_linux_0.6.9/devskim analyze $(Build.SourcesDirectory)/otelcollector --ignore-globs **/deploy/dashboard/**,**/react/static/** --severity critical,important - displayName: 'SDL: run devskim' - condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) - workingDirectory: $(Build.SourcesDirectory) - - - bash: | - sudo gem install brakeman -v 5.4.1 - brakeman $(Build.SourcesDirectory)/otelcollector/configmapparser --force - displayName: 'SDL: run brakeman' - condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) - - - bash: | - mkdir -p $(Build.ArtifactStagingDirectory)/linux - - # Necessary due to necessary due to https://stackoverflow.com/questions/60080264/docker-cannot-build-multi-platform-images-with-docker-buildx - sudo apt-get update && sudo apt-get -y install qemu binfmt-support qemu-user-static - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - - docker buildx create --name dockerbuilder - docker buildx use dockerbuilder - docker login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) - if [ "$(Build.Reason)" != "PullRequest" ]; then - docker buildx build . --platform=linux/amd64,linux/arm64 --file ./build/linux/Dockerfile -t $(LINUX_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/metadata.json --push - docker pull $(LINUX_FULL_IMAGE_NAME) - else - - # Build multiarch image to make sure there are no issues - docker buildx build . --platform=linux/amd64,linux/arm64 --file ./build/linux/Dockerfile -t $(LINUX_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/metadata.json - - # Load in amd64 image to run vulnerability scan - docker buildx build . --file ./build/linux/Dockerfile -t $(LINUX_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/metadata.json - fi - workingDirectory: $(Build.SourcesDirectory)/otelcollector/ - displayName: "Build: build and push image to dev ACR" - - - bash: | - curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin - trivy image --ignore-unfixed --no-progress --severity HIGH,CRITICAL,MEDIUM --exit-code 1 $(LINUX_FULL_IMAGE_NAME) - trivy image --ignore-unfixed --no-progress --severity HIGH,CRITICAL,MEDIUM --exit-code 1 $(KUBE_STATE_METRICS_IMAGE) - trivy image --ignore-unfixed --no-progress --severity HIGH,CRITICAL,MEDIUM --exit-code 1 $(NODE_EXPORTER_IMAGE) - workingDirectory: $(Build.SourcesDirectory) - displayName: "Build: run trivy scan" - - - task: CodeQL3000Finalize@0 - displayName: 'SDL: run codeql' - condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) - - - task: ComponentGovernanceComponentDetection@0 - displayName: "SDL: run component governance" - condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) - inputs: - scanType: 'Register' - verbosity: 'Verbose' - dockerImagesToScan: '$(LINUX_FULL_IMAGE_NAME)' - alertWarningLevel: 'High' - - - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 - displayName: "Ev2: Generate image artifacts" - condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) - inputs: - BuildDropPath: '$(Build.ArtifactStagingDirectory)/linux' - DockerImagesToScan: '$(LINUX_FULL_IMAGE_NAME)' - - - task: SdtReport@2 - displayName: 'SDL: generate report' - condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) - inputs: - GdnExportAllTools: false - GdnExportGdnToolBinSkim: true - GdnExportGdnToolBinSkimSeverity: 'Note' - GdnExportGdnToolGosec: true - GdnExportGdnToolGosecSeverity: 'Note' - GdnExportGdnToolSemmle: true - GdnExportGdnToolSemmleSeverity: 'Note' - - - task: PublishSecurityAnalysisLogs@3 - displayName: 'SDL: publish report' - condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) - inputs: - ArtifactName: 'CodeAnalysisLogs' - ArtifactType: 'Container' - PublishProcessedResults: true - AllTools: true - ToolLogsNotFoundAction: 'Standard' - - - task: PublishBuildArtifacts@1 - displayName: "Ev2: Publish image artifacts" - condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) - inputs: - pathToPublish: '$(Build.ArtifactStagingDirectory)' - artifactName: drop - - - task: PostAnalysis@2 - displayName: 'SDL: Post-Build Analysis' - condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) - inputs: - GdnBreakAllTools: false - GdnBreakGdnToolBinSkim: true - GdnBreakGdnToolBinSkimSeverity: 'Warning' - GdnBreakGdnToolGosec: true - GdnBreakGdnToolGosecSeverity: 'Warning' - GdnBreakGdnToolSemmle: true - GdnBreakGdnToolSemmleSeverity: 'Warning' +# - job: Linux +# displayName: Build linux image +# pool: +# name: Azure-Pipelines-CI-Test-EO +# dependsOn: common +# variables: +# LINUX_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.LINUX_FULL_IMAGE_NAME'] ] +# # This is necessary because of: https://github.com/moby/moby/issues/37965 +# DOCKER_BUILDKIT: 1 +# steps: +# - checkout: self +# submodules: true + +# - task: CodeQL3000Init@0 +# displayName: 'SDL: init codeql' +# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + +# - task: GoTool@0 +# displayName: "Build: specify golang version" +# inputs: +# version: '1.19' + +# - bash: | +# sudo apt-get install build-essential -y +# make +# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) +# workingDirectory: $(Build.SourcesDirectory)/otelcollector/opentelemetry-collector-builder/ +# displayName: "SDL: build otelcollector, promconfigvalidator, targetallocator, and fluent-bit plugin for scanning" + +# - task: BinSkim@4 +# displayName: 'SDL: run binskim' +# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) +# inputs: +# InputType: 'CommandLine' +# arguments: 'analyze --rich-return-code $(Build.SourcesDirectory)/otelcollector/opentelemetry-collector-builder/otelcollector $(Build.SourcesDirectory)/otelcollector/prom-config-validator-builder/promconfigvalidator $(Build.SourcesDirectory)/otelcollector/opentelemetry-operator/cmd/otel-allocator/targetallocator $(Build.SourcesDirectory)/otelcollector/fluent-bit/src/out_appinsights.so' + +# - task: Gosec@1 +# displayName: 'SDL: run gosec' +# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) +# inputs: +# targetPattern: 'gosecPattern' +# targetGosecPattern: '$(Build.SourcesDirectory)/otelcollector' + +# - bash: | +# wget https://github.com/microsoft/DevSkim/releases/download/v0.6.9/DevSkim_linux_0.6.9.zip +# unzip DevSkim_linux_0.6.9.zip +# chmod 775 DevSkim_linux_0.6.9/devskim +# ./DevSkim_linux_0.6.9/devskim analyze $(Build.SourcesDirectory)/otelcollector --ignore-globs **/deploy/dashboard/**,**/react/static/** --severity critical,important +# displayName: 'SDL: run devskim' +# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) +# workingDirectory: $(Build.SourcesDirectory) + +# - bash: | +# sudo gem install brakeman -v 5.4.1 +# brakeman $(Build.SourcesDirectory)/otelcollector/configmapparser --force +# displayName: 'SDL: run brakeman' +# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + +# - bash: | +# mkdir -p $(Build.ArtifactStagingDirectory)/linux + +# # Necessary due to necessary due to https://stackoverflow.com/questions/60080264/docker-cannot-build-multi-platform-images-with-docker-buildx +# sudo apt-get update && sudo apt-get -y install qemu binfmt-support qemu-user-static +# docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + +# docker buildx create --name dockerbuilder +# docker buildx use dockerbuilder +# docker login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) +# if [ "$(Build.Reason)" != "PullRequest" ]; then +# docker buildx build . --platform=linux/amd64,linux/arm64 --file ./build/linux/Dockerfile -t $(LINUX_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/metadata.json --push +# docker pull $(LINUX_FULL_IMAGE_NAME) +# else + +# # Build multiarch image to make sure there are no issues +# docker buildx build . --platform=linux/amd64,linux/arm64 --file ./build/linux/Dockerfile -t $(LINUX_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/metadata.json + +# # Load in amd64 image to run vulnerability scan +# docker buildx build . --file ./build/linux/Dockerfile -t $(LINUX_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/metadata.json +# fi +# workingDirectory: $(Build.SourcesDirectory)/otelcollector/ +# displayName: "Build: build and push image to dev ACR" + +# - bash: | +# curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin +# trivy image --ignore-unfixed --no-progress --severity HIGH,CRITICAL,MEDIUM --exit-code 1 $(LINUX_FULL_IMAGE_NAME) +# trivy image --ignore-unfixed --no-progress --severity HIGH,CRITICAL,MEDIUM --exit-code 1 $(KUBE_STATE_METRICS_IMAGE) +# trivy image --ignore-unfixed --no-progress --severity HIGH,CRITICAL,MEDIUM --exit-code 1 $(NODE_EXPORTER_IMAGE) +# workingDirectory: $(Build.SourcesDirectory) +# displayName: "Build: run trivy scan" + +# - task: CodeQL3000Finalize@0 +# displayName: 'SDL: run codeql' +# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + +# - task: ComponentGovernanceComponentDetection@0 +# displayName: "SDL: run component governance" +# condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) +# inputs: +# scanType: 'Register' +# verbosity: 'Verbose' +# dockerImagesToScan: '$(LINUX_FULL_IMAGE_NAME)' +# alertWarningLevel: 'High' + +# - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 +# displayName: "Ev2: Generate image artifacts" +# condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) +# inputs: +# BuildDropPath: '$(Build.ArtifactStagingDirectory)/linux' +# DockerImagesToScan: '$(LINUX_FULL_IMAGE_NAME)' + +# - task: SdtReport@2 +# displayName: 'SDL: generate report' +# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) +# inputs: +# GdnExportAllTools: false +# GdnExportGdnToolBinSkim: true +# GdnExportGdnToolBinSkimSeverity: 'Note' +# GdnExportGdnToolGosec: true +# GdnExportGdnToolGosecSeverity: 'Note' +# GdnExportGdnToolSemmle: true +# GdnExportGdnToolSemmleSeverity: 'Note' + +# - task: PublishSecurityAnalysisLogs@3 +# displayName: 'SDL: publish report' +# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) +# inputs: +# ArtifactName: 'CodeAnalysisLogs' +# ArtifactType: 'Container' +# PublishProcessedResults: true +# AllTools: true +# ToolLogsNotFoundAction: 'Standard' + +# - task: PublishBuildArtifacts@1 +# displayName: "Ev2: Publish image artifacts" +# condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) +# inputs: +# pathToPublish: '$(Build.ArtifactStagingDirectory)' +# artifactName: drop + +# - task: PostAnalysis@2 +# displayName: 'SDL: Post-Build Analysis' +# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) +# inputs: +# GdnBreakAllTools: false +# GdnBreakGdnToolBinSkim: true +# GdnBreakGdnToolBinSkimSeverity: 'Warning' +# GdnBreakGdnToolGosec: true +# GdnBreakGdnToolGosecSeverity: 'Warning' +# GdnBreakGdnToolSemmle: true +# GdnBreakGdnToolSemmleSeverity: 'Warning' - job: TargetAllocator displayName: Build target allocator image @@ -301,7 +301,7 @@ jobs: DOCKER_BUILDKIT: 1 steps: - checkout: self - submodules: true + submodules: recursive persistCredentials: true - bash: | mkdir -p $(Build.ArtifactStagingDirectory)/targetallocator @@ -332,529 +332,529 @@ jobs: workingDirectory: $(Build.SourcesDirectory) displayName: "Build: run trivy scan" -- job: Linux_ConfigReader - displayName: Build linux image for config reader - pool: - name: Azure-Pipelines-CI-Test-EO - dependsOn: common - variables: - LINUX_CONFIG_READER_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.LINUX_CONFIG_READER_FULL_IMAGE_NAME'] ] - # This is necessary because of: https://github.com/moby/moby/issues/37965 - DOCKER_BUILDKIT: 1 - steps: - - - task: CodeQL3000Init@0 - displayName: 'SDL: init codeql' - condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) - - - task: GoTool@0 - displayName: "Build: specify golang version" - inputs: - version: '1.19' - - - bash: | - sudo apt-get install build-essential -y - make - condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) - workingDirectory: $(Build.SourcesDirectory)/otelcollector/configuration-reader-builder/ - displayName: "SDL: build configuration reader for scanning" - - - task: BinSkim@4 - displayName: 'SDL: run binskim' - condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) - inputs: - InputType: 'CommandLine' - arguments: 'analyze --rich-return-code $(Build.SourcesDirectory)/otelcollector/configuration-reader-builder/configurationreader' - - - task: Gosec@1 - displayName: 'SDL: run gosec' - condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) - inputs: - targetPattern: 'gosecPattern' - targetGosecPattern: '$(Build.SourcesDirectory)/otelcollector' - - - bash: | - wget https://github.com/microsoft/DevSkim/releases/download/v0.6.9/DevSkim_linux_0.6.9.zip - unzip DevSkim_linux_0.6.9.zip - chmod 775 DevSkim_linux_0.6.9/devskim - ./DevSkim_linux_0.6.9/devskim analyze $(Build.SourcesDirectory)/otelcollector --ignore-globs **/deploy/dashboard/**,**/react/static/** --severity critical,important - displayName: 'SDL: run devskim' - condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) - workingDirectory: $(Build.SourcesDirectory) - - - bash: | - ruby --version - sudo apt-get install ruby-full - ruby --version - sudo gem install brakeman - brakeman $(Build.SourcesDirectory)/otelcollector/configmapparser --force - displayName: 'SDL: run brakeman' - condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) - - - bash: | - mkdir -p $(Build.ArtifactStagingDirectory)/linux - - # Necessary due to necessary due to https://stackoverflow.com/questions/60080264/docker-cannot-build-multi-platform-images-with-docker-buildx - sudo apt-get update && sudo apt-get -y install qemu binfmt-support qemu-user-static - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - - docker buildx create --name dockerbuilder - docker buildx use dockerbuilder - docker login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) - if [ "$(Build.Reason)" != "PullRequest" ]; then - docker buildx build . --platform=linux/amd64,linux/arm64 --file ./build/linux/configuration-reader/Dockerfile -t $(LINUX_CONFIG_READER_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/configuration-reader/metadata.json --push - docker pull $(LINUX_CONFIG_READER_FULL_IMAGE_NAME) - else - - # Build multiarch image to make sure there are no issues - docker buildx build . --platform=linux/amd64,linux/arm64 --file ./build/linux/configuration-reader/Dockerfile -t $(LINUX_CONFIG_READER_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/configuration-reader/metadata.json - - # Load in amd64 image to run vulnerability scan - docker buildx build . --file ./build/linux/configuration-reader/Dockerfile -t $(LINUX_CONFIG_READER_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/configuration-reader/metadata.json - fi - workingDirectory: $(Build.SourcesDirectory)/otelcollector/ - displayName: "Build: build and push configuration reader image to dev ACR" - - # - bash: | - # curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin - # trivy image --ignore-unfixed --no-progress --severity HIGH,CRITICAL,MEDIUM --exit-code 1 $(LINUX_CONFIG_READER_FULL_IMAGE_NAME) - # workingDirectory: $(Build.SourcesDirectory) - # displayName: "Build: run trivy scan" - - - task: CodeQL3000Finalize@0 - displayName: 'SDL: run codeql' - condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) - - - task: ComponentGovernanceComponentDetection@0 - displayName: "SDL: run component governance" - condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) - inputs: - scanType: 'Register' - verbosity: 'Verbose' - dockerImagesToScan: '$(LINUX_CONFIG_READER_FULL_IMAGE_NAME)' - alertWarningLevel: 'High' - - - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 - displayName: "Ev2: Generate image artifacts" - condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) - inputs: - BuildDropPath: '$(Build.ArtifactStagingDirectory)/linux' - DockerImagesToScan: '$(LINUX_CONFIG_READER_FULL_IMAGE_NAME)' - - - task: SdtReport@2 - displayName: 'SDL: generate report' - condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) - inputs: - GdnExportAllTools: false - GdnExportGdnToolBinSkim: true - GdnExportGdnToolBinSkimSeverity: 'Note' - GdnExportGdnToolGosec: true - GdnExportGdnToolGosecSeverity: 'Note' - GdnExportGdnToolSemmle: true - GdnExportGdnToolSemmleSeverity: 'Note' - - - task: PublishSecurityAnalysisLogs@3 - displayName: 'SDL: publish report' - condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) - inputs: - ArtifactName: 'CodeAnalysisLogs' - ArtifactType: 'Container' - PublishProcessedResults: true - AllTools: true - ToolLogsNotFoundAction: 'Standard' - - - task: PublishBuildArtifacts@1 - displayName: "Ev2: Publish image artifacts" - condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) - inputs: - pathToPublish: '$(Build.ArtifactStagingDirectory)' - artifactName: drop - - - task: PostAnalysis@2 - displayName: 'SDL: Post-Build Analysis' - condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) - inputs: - GdnBreakAllTools: false - GdnBreakGdnToolBinSkim: true - GdnBreakGdnToolBinSkimSeverity: 'Warning' - GdnBreakGdnToolGosec: true - GdnBreakGdnToolGosecSeverity: 'Warning' - GdnBreakGdnToolSemmle: true - GdnBreakGdnToolSemmleSeverity: 'Warning' - -- job: Windows2019 - displayName: "Build windows 2019 image" - pool: - name: Azure-Pipelines-Windows-CI-Test-EO - dependsOn: - - Common - variables: - WINDOWS_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.WINDOWS_FULL_IMAGE_NAME'] ] - WINDOWS_2019_BASE_IMAGE_VERSION: $[ dependencies.common.outputs['setup.WINDOWS_2019_BASE_IMAGE_VERSION'] ] - steps: - - task: GoTool@0 - displayName: "Build: specify golang version" - inputs: - version: '1.19' - - - powershell: | - ./makefile_windows.ps1 - workingDirectory: $(Build.SourcesDirectory)/otelcollector/opentelemetry-collector-builder/ - displayName: "Build: build otelcollector, promconfigvalidator, and fluent-bit plugin" - - - powershell: | - docker build . --isolation=hyperv --file ./build/windows/Dockerfile -t $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2019_BASE_IMAGE_VERSION) --build-arg WINDOWS_VERSION=$(WINDOWS_2019_BASE_IMAGE_VERSION) - workingDirectory: $(Build.SourcesDirectory)/otelcollector/ - displayName: "Build: build WS2019 image" - - - powershell: | - docker login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) - docker push $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2019_BASE_IMAGE_VERSION) - displayName: "Build: push image to dev ACR" - - - task: ComponentGovernanceComponentDetection@0 - displayName: "SDL: run component governance" - condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) - inputs: - scanType: 'Register' - verbosity: 'Verbose' - dockerImagesToScan: '$(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2019_BASE_IMAGE_VERSION)' - -- job: Windows2022 - displayName: "Build windows 2022 image" - pool: - name: Azure-Pipelines-Windows-CI-Test-EO - dependsOn: - - Common - variables: - WINDOWS_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.WINDOWS_FULL_IMAGE_NAME'] ] - WINDOWS_2022_BASE_IMAGE_VERSION: $[ dependencies.common.outputs['setup.WINDOWS_2022_BASE_IMAGE_VERSION'] ] - steps: - - task: GoTool@0 - displayName: "Build: specify golang version" - inputs: - version: '1.19' - - - powershell: | - ./makefile_windows.ps1 - workingDirectory: $(Build.SourcesDirectory)/otelcollector/opentelemetry-collector-builder/ - displayName: "Build: build otelcollector, promconfigvalidator, and fluent-bit plugin" - - - powershell: | - docker build . --isolation=hyperv --file ./build/windows/Dockerfile -t $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2022_BASE_IMAGE_VERSION) --build-arg WINDOWS_VERSION=$(WINDOWS_2022_BASE_IMAGE_VERSION) - workingDirectory: $(Build.SourcesDirectory)/otelcollector/ - displayName: "Build: build WS2022 image" - - - powershell: | - docker login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) - docker push $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2022_BASE_IMAGE_VERSION) - displayName: "Build: push image to dev ACR" - condition: eq(variables.IS_PR, false) - - - task: ComponentGovernanceComponentDetection@0 - displayName: "SDL: run component governance" - condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) - inputs: - scanType: 'Register' - verbosity: 'Verbose' - dockerImagesToScan: '$(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2022_BASE_IMAGE_VERSION)' - alertWarningLevel: 'High' - -- job: WindowsMultiArch - displayName: "Build windows multi-arch image" - pool: - name: Azure-Pipelines-Windows-CI-Test-EO - dependsOn: - - Common - - Windows2019 - - Windows2022 - variables: - WINDOWS_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.WINDOWS_FULL_IMAGE_NAME'] ] - WINDOWS_2019_BASE_IMAGE_VERSION: $[ dependencies.common.outputs['setup.WINDOWS_2019_BASE_IMAGE_VERSION'] ] - WINDOWS_2022_BASE_IMAGE_VERSION: $[ dependencies.common.outputs['setup.WINDOWS_2022_BASE_IMAGE_VERSION'] ] - steps: - - task: GoTool@0 - displayName: "Build: specify golang version" - inputs: - version: '1.19' - - - powershell: | - New-Item -Path "$(Build.ArtifactStagingDirectory)" -Name "windows" -ItemType "directory" - @{"image.name"="$(WINDOWS_FULL_IMAGE_NAME)"} | ConvertTo-Json -Compress | Out-File -Encoding ascii $(Build.ArtifactStagingDirectory)/windows/metadata.json - docker login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) - docker manifest create $(WINDOWS_FULL_IMAGE_NAME) $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2019_BASE_IMAGE_VERSION) $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2022_BASE_IMAGE_VERSION) - docker manifest push $(WINDOWS_FULL_IMAGE_NAME) - workingDirectory: $(Build.SourcesDirectory)/otelcollector/ - displayName: "Build: Triggering manigest for multi-arc docker image" - - - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 - condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) - displayName: "Ev2: generate image artifacts" - inputs: - BuildDropPath: '$(Build.ArtifactStagingDirectory)/windows' - DockerImagesToScan: '$(WINDOWS_FULL_IMAGE_NAME)' - - - task: PublishBuildArtifacts@1 - condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) - displayName: "Ev2: publish image artifacts" - inputs: - pathToPublish: '$(Build.ArtifactStagingDirectory)' - artifactName: drop - -- job: Chart - displayName: "Package 1P helm chart" - pool: - name: Azure-Pipelines-CI-Test-EO - dependsOn: - - Common - - Linux - - WindowsMultiArch - variables: - HELM_CHART_NAME: $[ dependencies.common.outputs['setup.HELM_CHART_NAME'] ] - HELM_SEMVER: $[ dependencies.common.outputs['setup.SEMVER'] ] - IMAGE_TAG: $[ dependencies.common.outputs['setup.SEMVER'] ] - IMAGE_TAG_WINDOWS: $[ dependencies.common.outputs['setup.WINDOWS_IMAGE_TAG'] ] - HELM_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.HELM_FULL_IMAGE_NAME'] ] - steps: - - task: HelmInstaller@1 - displayName: 'Build: install Helm version' - inputs: - helmVersionToInstall: latest - - - bash: | - envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/chart/prometheus-collector/Chart-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/chart/prometheus-collector/Chart.yaml && envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/chart/prometheus-collector/values-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/chart/prometheus-collector/values.yaml - helm version - displayName: "Build: substitute chart version in Chart.yaml and values.yaml" - - - bash: | - helm dep update - workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/chart/prometheus-collector/ - displayName: "Build: update helm dependencies" - - - bash: | - helm package ./prometheus-collector/ - workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/chart/ - displayName: "Build: package helm chart" - - - bash: | - helm registry login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) - helm push $(HELM_CHART_NAME)-$(HELM_SEMVER).tgz oci://$(ACR_REGISTRY)$(ACR_REPOSITORY_HELM) - mkdir -p $(Build.ArtifactStagingDirectory)/chart - echo {\"image.name\":\"$(HELM_FULL_IMAGE_NAME)\"} > $(Build.ArtifactStagingDirectory)/chart/metadata.json - workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/chart/ - displayName: "Build: push helm chart to dev ACR" - condition: eq(variables.IS_PR, false) - -- job: ARC_Chart - displayName: "Package Arc helm chart" - pool: - name: Azure-Pipelines-CI-Test-EO - dependsOn: - - Common - - Linux - variables: - HELM_SEMVER: $[ dependencies.common.outputs['setup.SEMVER'] ] - IMAGE_TAG: $[ dependencies.common.outputs['setup.SEMVER'] ] - IMAGE_TAG_WINDOWS: $[ dependencies.common.outputs['setup.WINDOWS_IMAGE_TAG'] ] - ARC_HELM_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.ARC_HELM_FULL_IMAGE_NAME'] ] - ARC_EXTENSION: true - steps: - - task: HelmInstaller@1 - displayName: 'Build: install Helm version' - inputs: - helmVersionToInstall: latest - - - bash: | - export HELM_CHART_NAME=$ARC_HELM_CHART_NAME - envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/Chart-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/Chart.yaml && envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values.yaml - helm version - displayName: "Build: substitute chart version in Chart.yaml and values.yaml" - - - bash: | - helm dep update - workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon - displayName: "Build: update helm dependencies" - - - bash: | - helm package ./azure-monitor-metrics-addon/ - workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/ - displayName: "Build: package helm chart" - - - bash: | - helm registry login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) - helm push $(ARC_HELM_CHART_NAME)-$(HELM_SEMVER).tgz oci://$(ACR_REGISTRY)$(ACR_REPOSITORY_HELM) - mkdir -p $(Build.ArtifactStagingDirectory)/arc-chart - echo {\"image.name\":\"$(ARC_HELM_FULL_IMAGE_NAME)\"} > $(Build.ArtifactStagingDirectory)/arc-chart/metadata.json - workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/ - displayName: "Build: push helm chart to dev ACR" - condition: eq(variables.IS_PR, false) - - - task: PublishBuildArtifacts@1 - displayName: "Ev2: publish helm chart artifacts" - condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) - inputs: - pathToPublish: '$(Build.ArtifactStagingDirectory)' - artifactName: drop - -- job: DeployARC - displayName: "Deploy to ARC dev cluster" - condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) - pool: - name: Azure-Pipelines-CI-Test-EO - dependsOn: - - Common - - ARC_Chart - variables: - HELM_SEMVER: $[ dependencies.common.outputs['setup.SEMVER'] ] - steps: - - bash: | - # Create JSON request body - cat < "request.json" - { - "artifactEndpoints": [ - { - "Regions": [ - "westcentralus" - ], - "Releasetrains": [ - "pipeline" - ], - "FullPathToHelmChart": "https://mcr.microsoft.com/azuremonitor/containerinsights/cidev/ama-metrics-arc", - "ExtensionUpdateFrequencyInMinutes": 5, - "IsCustomerHidden": true, - "ReadyforRollout": true, - "RollbackVersion": null, - "PackageConfigName": "Microsoft.AzureMonitor.Containers.Metrics-Prom041823" - } - ] - } - EOF - - # Send Request - SUBSCRIPTION="b9842c7c-1a38-4385-8f39-a51314758bcf" - RESOURCE_AUDIENCE="c699bf69-fb1d-4eaf-999b-99e6b2ae4d85" - SPN_CLIENT_ID="9a4c55e9-576a-450a-88bd-53bd634db38d" - SPN_TENANT_ID="72f988bf-86f1-41af-91ab-2d7cd011db47" - METHOD="PUT" - - echo "Request parameter preparation, SUBSCRIPTION is $SUBSCRIPTION, RESOURCE_AUDIENCE is $RESOURCE_AUDIENCE, CHART_VERSION is $HELM_SEMVER, SPN_CLIENT_ID is $SPN_CLIENT_ID, SPN_TENANT_ID is $SPN_TENANT_ID" - - # MSI is not supported - echo "Login cli using spn" - az login --service-principal --username=$SPN_CLIENT_ID --password=$(ARC_SPN_SECRET) --tenant=$SPN_TENANT_ID - if [ $? -eq 0 ]; then - echo "Logged in successfully with spn" - else - echo "-e error failed to login to az with managed identity credentials" - exit 1 - fi - - ACCESS_TOKEN=$(az account get-access-token --resource $RESOURCE_AUDIENCE --query accessToken -o json) - if [ $? -eq 0 ]; then - echo "get access token from resource:$RESOURCE_AUDIENCE successfully." - else - echo "-e error get access token from resource:$RESOURCE_AUDIENCE failed." - exit 1 - fi - ACCESS_TOKEN=$(echo $ACCESS_TOKEN | tr -d '"' | tr -d '"\r\n') - - ARC_API_URL="https://eastus2euap.dp.kubernetesconfiguration.azure.com" - EXTENSION_NAME="microsoft.azuremonitor.containers.metrics" - API_VERSION="2021-05-01" - - echo "start send request" - az rest --method $METHOD --headers "{\"Authorization\": \"Bearer $ACCESS_TOKEN\", \"Content-Type\": \"application/json\"}" --body @request.json --uri $ARC_API_URL/subscriptions/$SUBSCRIPTION/extensionTypeRegistrations/$EXTENSION_NAME/versions/$HELM_SEMVER?api-version=$API_VERSION - if [ $? -eq 0 ]; then - echo "arc extension registered successfully" - else - echo "-e error failed to register arc extension" - exit 1 - fi - displayName: "Deploy: Release to dev release train" - - task: AzureCLI@2 - displayName: "Deploy: ci-dev-arc-wcus cluster" - inputs: - azureSubscription: 'ContainerInsights_Build_Subscription(9b96ebbd-c57a-42d1-bbe9-b69296e4c7fb)' - scriptType: 'bash' - scriptLocation: 'inlineScript' - inlineScript: | - az config set extension.use_dynamic_install=yes_without_prompt - az k8s-extension update --name azuremonitor-metrics --resource-group ci-dev-arc-wcus --cluster-name ci-dev-arc-wcus --cluster-type connectedClusters --version $HELM_SEMVER --release-train pipeline - -- job: Deploy - displayName: "Deploy to dev clusters" - pool: - name: Azure-Pipelines-CI-Test-EO - condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) - dependsOn: - - Common - - Chart - variables: - HELM_CHART_NAME: $[ dependencies.common.outputs['setup.HELM_CHART_NAME'] ] - HELM_SEMVER: $[ dependencies.common.outputs['setup.SEMVER'] ] - IMAGE_TAG: $[ dependencies.common.outputs['setup.SEMVER'] ] - IMAGE_TAG_WINDOWS: $[ dependencies.common.outputs['setup.WINDOWS_IMAGE_TAG'] ] - HELM_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.HELM_FULL_IMAGE_NAME'] ] - steps: - - checkout: self - submodules: true - persistCredentials: true - - - bash: | - git config --global user.name "AzureDevOps Agent" - git tag "v$(HELM_SEMVER)" - git push origin "v$(HELM_SEMVER)" - displayName: Tag commit with semver - - - task: HelmInstaller@1 - displayName: Install Helm version - inputs: - helmVersionToInstall: latest - - bash: | - for i in 1 2 3 4 5 6 7 8 9 10 - do - sleep 30 - echo $(MCR_REGISTRY)$(MCR_REPOSITORY):$(IMAGE_TAG_WINDOWS) - echo $(MCR_REGISTRY)$(MCR_REPOSITORY_HELM):$(IMAGE_TAG) - - output1=$(curl -s https://$(MCR_REGISTRY)/v2$(MCR_REPOSITORY)/tags/list) - output2=$(curl -s https://$(MCR_REGISTRY)/v2$(MCR_REPOSITORY_HELM)/tags/list) - if (echo $output1 | grep $(IMAGE_TAG_WINDOWS)) && (echo $output2 | grep $(IMAGE_TAG)) - then - echo "Images and chart are published to mcr" - exit 0 - fi - done - echo "Images and chart are not published to mcr within 5 minutes" - exit 1 - displayName: "Check images are pushed to dev MCR" - - - bash: | - helm pull oci://$(MCR_REGISTRY)$(MCR_REPOSITORY_HELM) --version $(HELM_SEMVER) - workingDirectory: $(Build.StagingDirectory) - displayName: "Pull helm chart from dev MCR" - - - bash: | - export AKS_REGION="eastus" - export AKS_RESOURCE_ID="/subscriptions/9b96ebbd-c57a-42d1-bbe9-b69296e4c7fb/resourceGroups/ci-dev-aks-mac-eus-rg/providers/Microsoft.ContainerService/managedClusters/ci-dev-aks-mac-eus" - export ARC_EXTENSION="false" - envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/Chart-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/Chart.yaml && envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values.yaml - ls $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon - cd $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon - helm dependency update - displayName: "Build: substitute chart version for 3p in Chart.yaml and values.yaml" - - - task: HelmDeploy@0 - displayName: "Deploy: ci-dev-aks-mac-eus cluster" - inputs: - connectionType: 'Azure Resource Manager' - azureSubscription: 'ContainerInsights_Build_Subscription(9b96ebbd-c57a-42d1-bbe9-b69296e4c7fb)' - azureResourceGroup: 'ci-dev-aks-mac-eus-rg' - kubernetesCluster: 'ci-dev-aks-mac-eus' - namespace: 'default' - command: 'upgrade' - chartType: 'FilePath' - chartPath: '$(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/' - releaseName: 'ama-metrics' - waitForExecution: false - arguments: --dependency-update --values $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values.yaml +# - job: Linux_ConfigReader +# displayName: Build linux image for config reader +# pool: +# name: Azure-Pipelines-CI-Test-EO +# dependsOn: common +# variables: +# LINUX_CONFIG_READER_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.LINUX_CONFIG_READER_FULL_IMAGE_NAME'] ] +# # This is necessary because of: https://github.com/moby/moby/issues/37965 +# DOCKER_BUILDKIT: 1 +# steps: + +# - task: CodeQL3000Init@0 +# displayName: 'SDL: init codeql' +# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + +# - task: GoTool@0 +# displayName: "Build: specify golang version" +# inputs: +# version: '1.19' + +# - bash: | +# sudo apt-get install build-essential -y +# make +# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) +# workingDirectory: $(Build.SourcesDirectory)/otelcollector/configuration-reader-builder/ +# displayName: "SDL: build configuration reader for scanning" + +# - task: BinSkim@4 +# displayName: 'SDL: run binskim' +# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) +# inputs: +# InputType: 'CommandLine' +# arguments: 'analyze --rich-return-code $(Build.SourcesDirectory)/otelcollector/configuration-reader-builder/configurationreader' + +# - task: Gosec@1 +# displayName: 'SDL: run gosec' +# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) +# inputs: +# targetPattern: 'gosecPattern' +# targetGosecPattern: '$(Build.SourcesDirectory)/otelcollector' + +# - bash: | +# wget https://github.com/microsoft/DevSkim/releases/download/v0.6.9/DevSkim_linux_0.6.9.zip +# unzip DevSkim_linux_0.6.9.zip +# chmod 775 DevSkim_linux_0.6.9/devskim +# ./DevSkim_linux_0.6.9/devskim analyze $(Build.SourcesDirectory)/otelcollector --ignore-globs **/deploy/dashboard/**,**/react/static/** --severity critical,important +# displayName: 'SDL: run devskim' +# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) +# workingDirectory: $(Build.SourcesDirectory) + +# - bash: | +# ruby --version +# sudo apt-get install ruby-full +# ruby --version +# sudo gem install brakeman +# brakeman $(Build.SourcesDirectory)/otelcollector/configmapparser --force +# displayName: 'SDL: run brakeman' +# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + +# - bash: | +# mkdir -p $(Build.ArtifactStagingDirectory)/linux + +# # Necessary due to necessary due to https://stackoverflow.com/questions/60080264/docker-cannot-build-multi-platform-images-with-docker-buildx +# sudo apt-get update && sudo apt-get -y install qemu binfmt-support qemu-user-static +# docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + +# docker buildx create --name dockerbuilder +# docker buildx use dockerbuilder +# docker login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) +# if [ "$(Build.Reason)" != "PullRequest" ]; then +# docker buildx build . --platform=linux/amd64,linux/arm64 --file ./build/linux/configuration-reader/Dockerfile -t $(LINUX_CONFIG_READER_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/configuration-reader/metadata.json --push +# docker pull $(LINUX_CONFIG_READER_FULL_IMAGE_NAME) +# else + +# # Build multiarch image to make sure there are no issues +# docker buildx build . --platform=linux/amd64,linux/arm64 --file ./build/linux/configuration-reader/Dockerfile -t $(LINUX_CONFIG_READER_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/configuration-reader/metadata.json + +# # Load in amd64 image to run vulnerability scan +# docker buildx build . --file ./build/linux/configuration-reader/Dockerfile -t $(LINUX_CONFIG_READER_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/configuration-reader/metadata.json +# fi +# workingDirectory: $(Build.SourcesDirectory)/otelcollector/ +# displayName: "Build: build and push configuration reader image to dev ACR" + +# # - bash: | +# # curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin +# # trivy image --ignore-unfixed --no-progress --severity HIGH,CRITICAL,MEDIUM --exit-code 1 $(LINUX_CONFIG_READER_FULL_IMAGE_NAME) +# # workingDirectory: $(Build.SourcesDirectory) +# # displayName: "Build: run trivy scan" + +# - task: CodeQL3000Finalize@0 +# displayName: 'SDL: run codeql' +# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + +# - task: ComponentGovernanceComponentDetection@0 +# displayName: "SDL: run component governance" +# condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) +# inputs: +# scanType: 'Register' +# verbosity: 'Verbose' +# dockerImagesToScan: '$(LINUX_CONFIG_READER_FULL_IMAGE_NAME)' +# alertWarningLevel: 'High' + +# - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 +# displayName: "Ev2: Generate image artifacts" +# condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) +# inputs: +# BuildDropPath: '$(Build.ArtifactStagingDirectory)/linux' +# DockerImagesToScan: '$(LINUX_CONFIG_READER_FULL_IMAGE_NAME)' + +# - task: SdtReport@2 +# displayName: 'SDL: generate report' +# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) +# inputs: +# GdnExportAllTools: false +# GdnExportGdnToolBinSkim: true +# GdnExportGdnToolBinSkimSeverity: 'Note' +# GdnExportGdnToolGosec: true +# GdnExportGdnToolGosecSeverity: 'Note' +# GdnExportGdnToolSemmle: true +# GdnExportGdnToolSemmleSeverity: 'Note' + +# - task: PublishSecurityAnalysisLogs@3 +# displayName: 'SDL: publish report' +# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) +# inputs: +# ArtifactName: 'CodeAnalysisLogs' +# ArtifactType: 'Container' +# PublishProcessedResults: true +# AllTools: true +# ToolLogsNotFoundAction: 'Standard' + +# - task: PublishBuildArtifacts@1 +# displayName: "Ev2: Publish image artifacts" +# condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) +# inputs: +# pathToPublish: '$(Build.ArtifactStagingDirectory)' +# artifactName: drop + +# - task: PostAnalysis@2 +# displayName: 'SDL: Post-Build Analysis' +# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) +# inputs: +# GdnBreakAllTools: false +# GdnBreakGdnToolBinSkim: true +# GdnBreakGdnToolBinSkimSeverity: 'Warning' +# GdnBreakGdnToolGosec: true +# GdnBreakGdnToolGosecSeverity: 'Warning' +# GdnBreakGdnToolSemmle: true +# GdnBreakGdnToolSemmleSeverity: 'Warning' + +# - job: Windows2019 +# displayName: "Build windows 2019 image" +# pool: +# name: Azure-Pipelines-Windows-CI-Test-EO +# dependsOn: +# - Common +# variables: +# WINDOWS_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.WINDOWS_FULL_IMAGE_NAME'] ] +# WINDOWS_2019_BASE_IMAGE_VERSION: $[ dependencies.common.outputs['setup.WINDOWS_2019_BASE_IMAGE_VERSION'] ] +# steps: +# - task: GoTool@0 +# displayName: "Build: specify golang version" +# inputs: +# version: '1.19' + +# - powershell: | +# ./makefile_windows.ps1 +# workingDirectory: $(Build.SourcesDirectory)/otelcollector/opentelemetry-collector-builder/ +# displayName: "Build: build otelcollector, promconfigvalidator, and fluent-bit plugin" + +# - powershell: | +# docker build . --isolation=hyperv --file ./build/windows/Dockerfile -t $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2019_BASE_IMAGE_VERSION) --build-arg WINDOWS_VERSION=$(WINDOWS_2019_BASE_IMAGE_VERSION) +# workingDirectory: $(Build.SourcesDirectory)/otelcollector/ +# displayName: "Build: build WS2019 image" + +# - powershell: | +# docker login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) +# docker push $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2019_BASE_IMAGE_VERSION) +# displayName: "Build: push image to dev ACR" + +# - task: ComponentGovernanceComponentDetection@0 +# displayName: "SDL: run component governance" +# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) +# inputs: +# scanType: 'Register' +# verbosity: 'Verbose' +# dockerImagesToScan: '$(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2019_BASE_IMAGE_VERSION)' + +# - job: Windows2022 +# displayName: "Build windows 2022 image" +# pool: +# name: Azure-Pipelines-Windows-CI-Test-EO +# dependsOn: +# - Common +# variables: +# WINDOWS_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.WINDOWS_FULL_IMAGE_NAME'] ] +# WINDOWS_2022_BASE_IMAGE_VERSION: $[ dependencies.common.outputs['setup.WINDOWS_2022_BASE_IMAGE_VERSION'] ] +# steps: +# - task: GoTool@0 +# displayName: "Build: specify golang version" +# inputs: +# version: '1.19' + +# - powershell: | +# ./makefile_windows.ps1 +# workingDirectory: $(Build.SourcesDirectory)/otelcollector/opentelemetry-collector-builder/ +# displayName: "Build: build otelcollector, promconfigvalidator, and fluent-bit plugin" + +# - powershell: | +# docker build . --isolation=hyperv --file ./build/windows/Dockerfile -t $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2022_BASE_IMAGE_VERSION) --build-arg WINDOWS_VERSION=$(WINDOWS_2022_BASE_IMAGE_VERSION) +# workingDirectory: $(Build.SourcesDirectory)/otelcollector/ +# displayName: "Build: build WS2022 image" + +# - powershell: | +# docker login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) +# docker push $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2022_BASE_IMAGE_VERSION) +# displayName: "Build: push image to dev ACR" +# condition: eq(variables.IS_PR, false) + +# - task: ComponentGovernanceComponentDetection@0 +# displayName: "SDL: run component governance" +# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) +# inputs: +# scanType: 'Register' +# verbosity: 'Verbose' +# dockerImagesToScan: '$(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2022_BASE_IMAGE_VERSION)' +# alertWarningLevel: 'High' + +# - job: WindowsMultiArch +# displayName: "Build windows multi-arch image" +# pool: +# name: Azure-Pipelines-Windows-CI-Test-EO +# dependsOn: +# - Common +# - Windows2019 +# - Windows2022 +# variables: +# WINDOWS_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.WINDOWS_FULL_IMAGE_NAME'] ] +# WINDOWS_2019_BASE_IMAGE_VERSION: $[ dependencies.common.outputs['setup.WINDOWS_2019_BASE_IMAGE_VERSION'] ] +# WINDOWS_2022_BASE_IMAGE_VERSION: $[ dependencies.common.outputs['setup.WINDOWS_2022_BASE_IMAGE_VERSION'] ] +# steps: +# - task: GoTool@0 +# displayName: "Build: specify golang version" +# inputs: +# version: '1.19' + +# - powershell: | +# New-Item -Path "$(Build.ArtifactStagingDirectory)" -Name "windows" -ItemType "directory" +# @{"image.name"="$(WINDOWS_FULL_IMAGE_NAME)"} | ConvertTo-Json -Compress | Out-File -Encoding ascii $(Build.ArtifactStagingDirectory)/windows/metadata.json +# docker login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) +# docker manifest create $(WINDOWS_FULL_IMAGE_NAME) $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2019_BASE_IMAGE_VERSION) $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2022_BASE_IMAGE_VERSION) +# docker manifest push $(WINDOWS_FULL_IMAGE_NAME) +# workingDirectory: $(Build.SourcesDirectory)/otelcollector/ +# displayName: "Build: Triggering manigest for multi-arc docker image" + +# - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 +# condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) +# displayName: "Ev2: generate image artifacts" +# inputs: +# BuildDropPath: '$(Build.ArtifactStagingDirectory)/windows' +# DockerImagesToScan: '$(WINDOWS_FULL_IMAGE_NAME)' + +# - task: PublishBuildArtifacts@1 +# condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) +# displayName: "Ev2: publish image artifacts" +# inputs: +# pathToPublish: '$(Build.ArtifactStagingDirectory)' +# artifactName: drop + +# - job: Chart +# displayName: "Package 1P helm chart" +# pool: +# name: Azure-Pipelines-CI-Test-EO +# dependsOn: +# - Common +# - Linux +# - WindowsMultiArch +# variables: +# HELM_CHART_NAME: $[ dependencies.common.outputs['setup.HELM_CHART_NAME'] ] +# HELM_SEMVER: $[ dependencies.common.outputs['setup.SEMVER'] ] +# IMAGE_TAG: $[ dependencies.common.outputs['setup.SEMVER'] ] +# IMAGE_TAG_WINDOWS: $[ dependencies.common.outputs['setup.WINDOWS_IMAGE_TAG'] ] +# HELM_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.HELM_FULL_IMAGE_NAME'] ] +# steps: +# - task: HelmInstaller@1 +# displayName: 'Build: install Helm version' +# inputs: +# helmVersionToInstall: latest + +# - bash: | +# envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/chart/prometheus-collector/Chart-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/chart/prometheus-collector/Chart.yaml && envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/chart/prometheus-collector/values-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/chart/prometheus-collector/values.yaml +# helm version +# displayName: "Build: substitute chart version in Chart.yaml and values.yaml" + +# - bash: | +# helm dep update +# workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/chart/prometheus-collector/ +# displayName: "Build: update helm dependencies" + +# - bash: | +# helm package ./prometheus-collector/ +# workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/chart/ +# displayName: "Build: package helm chart" + +# - bash: | +# helm registry login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) +# helm push $(HELM_CHART_NAME)-$(HELM_SEMVER).tgz oci://$(ACR_REGISTRY)$(ACR_REPOSITORY_HELM) +# mkdir -p $(Build.ArtifactStagingDirectory)/chart +# echo {\"image.name\":\"$(HELM_FULL_IMAGE_NAME)\"} > $(Build.ArtifactStagingDirectory)/chart/metadata.json +# workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/chart/ +# displayName: "Build: push helm chart to dev ACR" +# condition: eq(variables.IS_PR, false) + +# - job: ARC_Chart +# displayName: "Package Arc helm chart" +# pool: +# name: Azure-Pipelines-CI-Test-EO +# dependsOn: +# - Common +# - Linux +# variables: +# HELM_SEMVER: $[ dependencies.common.outputs['setup.SEMVER'] ] +# IMAGE_TAG: $[ dependencies.common.outputs['setup.SEMVER'] ] +# IMAGE_TAG_WINDOWS: $[ dependencies.common.outputs['setup.WINDOWS_IMAGE_TAG'] ] +# ARC_HELM_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.ARC_HELM_FULL_IMAGE_NAME'] ] +# ARC_EXTENSION: true +# steps: +# - task: HelmInstaller@1 +# displayName: 'Build: install Helm version' +# inputs: +# helmVersionToInstall: latest + +# - bash: | +# export HELM_CHART_NAME=$ARC_HELM_CHART_NAME +# envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/Chart-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/Chart.yaml && envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values.yaml +# helm version +# displayName: "Build: substitute chart version in Chart.yaml and values.yaml" + +# - bash: | +# helm dep update +# workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon +# displayName: "Build: update helm dependencies" + +# - bash: | +# helm package ./azure-monitor-metrics-addon/ +# workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/ +# displayName: "Build: package helm chart" + +# - bash: | +# helm registry login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) +# helm push $(ARC_HELM_CHART_NAME)-$(HELM_SEMVER).tgz oci://$(ACR_REGISTRY)$(ACR_REPOSITORY_HELM) +# mkdir -p $(Build.ArtifactStagingDirectory)/arc-chart +# echo {\"image.name\":\"$(ARC_HELM_FULL_IMAGE_NAME)\"} > $(Build.ArtifactStagingDirectory)/arc-chart/metadata.json +# workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/ +# displayName: "Build: push helm chart to dev ACR" +# condition: eq(variables.IS_PR, false) + +# - task: PublishBuildArtifacts@1 +# displayName: "Ev2: publish helm chart artifacts" +# condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) +# inputs: +# pathToPublish: '$(Build.ArtifactStagingDirectory)' +# artifactName: drop + +# - job: DeployARC +# displayName: "Deploy to ARC dev cluster" +# condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) +# pool: +# name: Azure-Pipelines-CI-Test-EO +# dependsOn: +# - Common +# - ARC_Chart +# variables: +# HELM_SEMVER: $[ dependencies.common.outputs['setup.SEMVER'] ] +# steps: +# - bash: | +# # Create JSON request body +# cat < "request.json" +# { +# "artifactEndpoints": [ +# { +# "Regions": [ +# "westcentralus" +# ], +# "Releasetrains": [ +# "pipeline" +# ], +# "FullPathToHelmChart": "https://mcr.microsoft.com/azuremonitor/containerinsights/cidev/ama-metrics-arc", +# "ExtensionUpdateFrequencyInMinutes": 5, +# "IsCustomerHidden": true, +# "ReadyforRollout": true, +# "RollbackVersion": null, +# "PackageConfigName": "Microsoft.AzureMonitor.Containers.Metrics-Prom041823" +# } +# ] +# } +# EOF + +# # Send Request +# SUBSCRIPTION="b9842c7c-1a38-4385-8f39-a51314758bcf" +# RESOURCE_AUDIENCE="c699bf69-fb1d-4eaf-999b-99e6b2ae4d85" +# SPN_CLIENT_ID="9a4c55e9-576a-450a-88bd-53bd634db38d" +# SPN_TENANT_ID="72f988bf-86f1-41af-91ab-2d7cd011db47" +# METHOD="PUT" + +# echo "Request parameter preparation, SUBSCRIPTION is $SUBSCRIPTION, RESOURCE_AUDIENCE is $RESOURCE_AUDIENCE, CHART_VERSION is $HELM_SEMVER, SPN_CLIENT_ID is $SPN_CLIENT_ID, SPN_TENANT_ID is $SPN_TENANT_ID" + +# # MSI is not supported +# echo "Login cli using spn" +# az login --service-principal --username=$SPN_CLIENT_ID --password=$(ARC_SPN_SECRET) --tenant=$SPN_TENANT_ID +# if [ $? -eq 0 ]; then +# echo "Logged in successfully with spn" +# else +# echo "-e error failed to login to az with managed identity credentials" +# exit 1 +# fi + +# ACCESS_TOKEN=$(az account get-access-token --resource $RESOURCE_AUDIENCE --query accessToken -o json) +# if [ $? -eq 0 ]; then +# echo "get access token from resource:$RESOURCE_AUDIENCE successfully." +# else +# echo "-e error get access token from resource:$RESOURCE_AUDIENCE failed." +# exit 1 +# fi +# ACCESS_TOKEN=$(echo $ACCESS_TOKEN | tr -d '"' | tr -d '"\r\n') + +# ARC_API_URL="https://eastus2euap.dp.kubernetesconfiguration.azure.com" +# EXTENSION_NAME="microsoft.azuremonitor.containers.metrics" +# API_VERSION="2021-05-01" + +# echo "start send request" +# az rest --method $METHOD --headers "{\"Authorization\": \"Bearer $ACCESS_TOKEN\", \"Content-Type\": \"application/json\"}" --body @request.json --uri $ARC_API_URL/subscriptions/$SUBSCRIPTION/extensionTypeRegistrations/$EXTENSION_NAME/versions/$HELM_SEMVER?api-version=$API_VERSION +# if [ $? -eq 0 ]; then +# echo "arc extension registered successfully" +# else +# echo "-e error failed to register arc extension" +# exit 1 +# fi +# displayName: "Deploy: Release to dev release train" +# - task: AzureCLI@2 +# displayName: "Deploy: ci-dev-arc-wcus cluster" +# inputs: +# azureSubscription: 'ContainerInsights_Build_Subscription(9b96ebbd-c57a-42d1-bbe9-b69296e4c7fb)' +# scriptType: 'bash' +# scriptLocation: 'inlineScript' +# inlineScript: | +# az config set extension.use_dynamic_install=yes_without_prompt +# az k8s-extension update --name azuremonitor-metrics --resource-group ci-dev-arc-wcus --cluster-name ci-dev-arc-wcus --cluster-type connectedClusters --version $HELM_SEMVER --release-train pipeline + +# - job: Deploy +# displayName: "Deploy to dev clusters" +# pool: +# name: Azure-Pipelines-CI-Test-EO +# condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) +# dependsOn: +# - Common +# - Chart +# variables: +# HELM_CHART_NAME: $[ dependencies.common.outputs['setup.HELM_CHART_NAME'] ] +# HELM_SEMVER: $[ dependencies.common.outputs['setup.SEMVER'] ] +# IMAGE_TAG: $[ dependencies.common.outputs['setup.SEMVER'] ] +# IMAGE_TAG_WINDOWS: $[ dependencies.common.outputs['setup.WINDOWS_IMAGE_TAG'] ] +# HELM_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.HELM_FULL_IMAGE_NAME'] ] +# steps: +# - checkout: self +# submodules: true +# persistCredentials: true + +# - bash: | +# git config --global user.name "AzureDevOps Agent" +# git tag "v$(HELM_SEMVER)" +# git push origin "v$(HELM_SEMVER)" +# displayName: Tag commit with semver + +# - task: HelmInstaller@1 +# displayName: Install Helm version +# inputs: +# helmVersionToInstall: latest +# - bash: | +# for i in 1 2 3 4 5 6 7 8 9 10 +# do +# sleep 30 +# echo $(MCR_REGISTRY)$(MCR_REPOSITORY):$(IMAGE_TAG_WINDOWS) +# echo $(MCR_REGISTRY)$(MCR_REPOSITORY_HELM):$(IMAGE_TAG) + +# output1=$(curl -s https://$(MCR_REGISTRY)/v2$(MCR_REPOSITORY)/tags/list) +# output2=$(curl -s https://$(MCR_REGISTRY)/v2$(MCR_REPOSITORY_HELM)/tags/list) +# if (echo $output1 | grep $(IMAGE_TAG_WINDOWS)) && (echo $output2 | grep $(IMAGE_TAG)) +# then +# echo "Images and chart are published to mcr" +# exit 0 +# fi +# done +# echo "Images and chart are not published to mcr within 5 minutes" +# exit 1 +# displayName: "Check images are pushed to dev MCR" + +# - bash: | +# helm pull oci://$(MCR_REGISTRY)$(MCR_REPOSITORY_HELM) --version $(HELM_SEMVER) +# workingDirectory: $(Build.StagingDirectory) +# displayName: "Pull helm chart from dev MCR" + +# - bash: | +# export AKS_REGION="eastus" +# export AKS_RESOURCE_ID="/subscriptions/9b96ebbd-c57a-42d1-bbe9-b69296e4c7fb/resourceGroups/ci-dev-aks-mac-eus-rg/providers/Microsoft.ContainerService/managedClusters/ci-dev-aks-mac-eus" +# export ARC_EXTENSION="false" +# envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/Chart-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/Chart.yaml && envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values.yaml +# ls $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon +# cd $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon +# helm dependency update +# displayName: "Build: substitute chart version for 3p in Chart.yaml and values.yaml" + +# - task: HelmDeploy@0 +# displayName: "Deploy: ci-dev-aks-mac-eus cluster" +# inputs: +# connectionType: 'Azure Resource Manager' +# azureSubscription: 'ContainerInsights_Build_Subscription(9b96ebbd-c57a-42d1-bbe9-b69296e4c7fb)' +# azureResourceGroup: 'ci-dev-aks-mac-eus-rg' +# kubernetesCluster: 'ci-dev-aks-mac-eus' +# namespace: 'default' +# command: 'upgrade' +# chartType: 'FilePath' +# chartPath: '$(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/' +# releaseName: 'ama-metrics' +# waitForExecution: false +# arguments: --dependency-update --values $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values.yaml From 3b5e7337ad8b26b0a1b317e4dc11b9a8d991a841 Mon Sep 17 00:00:00 2001 From: Rashmi Chandrashekar Date: Mon, 14 Aug 2023 15:08:54 -0700 Subject: [PATCH 012/242] uncommenting other builds --- .pipelines/azure-pipeline-build.yml | 1352 +++++++++++++-------------- 1 file changed, 676 insertions(+), 676 deletions(-) diff --git a/.pipelines/azure-pipeline-build.yml b/.pipelines/azure-pipeline-build.yml index f7b6927b3..9f92c8aba 100644 --- a/.pipelines/azure-pipeline-build.yml +++ b/.pipelines/azure-pipeline-build.yml @@ -139,156 +139,156 @@ jobs: pathToPublish: '$(Build.ArtifactStagingDirectory)' artifactName: drop -# - job: Linux -# displayName: Build linux image -# pool: -# name: Azure-Pipelines-CI-Test-EO -# dependsOn: common -# variables: -# LINUX_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.LINUX_FULL_IMAGE_NAME'] ] -# # This is necessary because of: https://github.com/moby/moby/issues/37965 -# DOCKER_BUILDKIT: 1 -# steps: -# - checkout: self -# submodules: true - -# - task: CodeQL3000Init@0 -# displayName: 'SDL: init codeql' -# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) - -# - task: GoTool@0 -# displayName: "Build: specify golang version" -# inputs: -# version: '1.19' - -# - bash: | -# sudo apt-get install build-essential -y -# make -# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) -# workingDirectory: $(Build.SourcesDirectory)/otelcollector/opentelemetry-collector-builder/ -# displayName: "SDL: build otelcollector, promconfigvalidator, targetallocator, and fluent-bit plugin for scanning" - -# - task: BinSkim@4 -# displayName: 'SDL: run binskim' -# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) -# inputs: -# InputType: 'CommandLine' -# arguments: 'analyze --rich-return-code $(Build.SourcesDirectory)/otelcollector/opentelemetry-collector-builder/otelcollector $(Build.SourcesDirectory)/otelcollector/prom-config-validator-builder/promconfigvalidator $(Build.SourcesDirectory)/otelcollector/opentelemetry-operator/cmd/otel-allocator/targetallocator $(Build.SourcesDirectory)/otelcollector/fluent-bit/src/out_appinsights.so' - -# - task: Gosec@1 -# displayName: 'SDL: run gosec' -# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) -# inputs: -# targetPattern: 'gosecPattern' -# targetGosecPattern: '$(Build.SourcesDirectory)/otelcollector' - -# - bash: | -# wget https://github.com/microsoft/DevSkim/releases/download/v0.6.9/DevSkim_linux_0.6.9.zip -# unzip DevSkim_linux_0.6.9.zip -# chmod 775 DevSkim_linux_0.6.9/devskim -# ./DevSkim_linux_0.6.9/devskim analyze $(Build.SourcesDirectory)/otelcollector --ignore-globs **/deploy/dashboard/**,**/react/static/** --severity critical,important -# displayName: 'SDL: run devskim' -# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) -# workingDirectory: $(Build.SourcesDirectory) - -# - bash: | -# sudo gem install brakeman -v 5.4.1 -# brakeman $(Build.SourcesDirectory)/otelcollector/configmapparser --force -# displayName: 'SDL: run brakeman' -# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) - -# - bash: | -# mkdir -p $(Build.ArtifactStagingDirectory)/linux - -# # Necessary due to necessary due to https://stackoverflow.com/questions/60080264/docker-cannot-build-multi-platform-images-with-docker-buildx -# sudo apt-get update && sudo apt-get -y install qemu binfmt-support qemu-user-static -# docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - -# docker buildx create --name dockerbuilder -# docker buildx use dockerbuilder -# docker login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) -# if [ "$(Build.Reason)" != "PullRequest" ]; then -# docker buildx build . --platform=linux/amd64,linux/arm64 --file ./build/linux/Dockerfile -t $(LINUX_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/metadata.json --push -# docker pull $(LINUX_FULL_IMAGE_NAME) -# else - -# # Build multiarch image to make sure there are no issues -# docker buildx build . --platform=linux/amd64,linux/arm64 --file ./build/linux/Dockerfile -t $(LINUX_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/metadata.json - -# # Load in amd64 image to run vulnerability scan -# docker buildx build . --file ./build/linux/Dockerfile -t $(LINUX_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/metadata.json -# fi -# workingDirectory: $(Build.SourcesDirectory)/otelcollector/ -# displayName: "Build: build and push image to dev ACR" - -# - bash: | -# curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin -# trivy image --ignore-unfixed --no-progress --severity HIGH,CRITICAL,MEDIUM --exit-code 1 $(LINUX_FULL_IMAGE_NAME) -# trivy image --ignore-unfixed --no-progress --severity HIGH,CRITICAL,MEDIUM --exit-code 1 $(KUBE_STATE_METRICS_IMAGE) -# trivy image --ignore-unfixed --no-progress --severity HIGH,CRITICAL,MEDIUM --exit-code 1 $(NODE_EXPORTER_IMAGE) -# workingDirectory: $(Build.SourcesDirectory) -# displayName: "Build: run trivy scan" - -# - task: CodeQL3000Finalize@0 -# displayName: 'SDL: run codeql' -# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) - -# - task: ComponentGovernanceComponentDetection@0 -# displayName: "SDL: run component governance" -# condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) -# inputs: -# scanType: 'Register' -# verbosity: 'Verbose' -# dockerImagesToScan: '$(LINUX_FULL_IMAGE_NAME)' -# alertWarningLevel: 'High' - -# - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 -# displayName: "Ev2: Generate image artifacts" -# condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) -# inputs: -# BuildDropPath: '$(Build.ArtifactStagingDirectory)/linux' -# DockerImagesToScan: '$(LINUX_FULL_IMAGE_NAME)' - -# - task: SdtReport@2 -# displayName: 'SDL: generate report' -# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) -# inputs: -# GdnExportAllTools: false -# GdnExportGdnToolBinSkim: true -# GdnExportGdnToolBinSkimSeverity: 'Note' -# GdnExportGdnToolGosec: true -# GdnExportGdnToolGosecSeverity: 'Note' -# GdnExportGdnToolSemmle: true -# GdnExportGdnToolSemmleSeverity: 'Note' - -# - task: PublishSecurityAnalysisLogs@3 -# displayName: 'SDL: publish report' -# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) -# inputs: -# ArtifactName: 'CodeAnalysisLogs' -# ArtifactType: 'Container' -# PublishProcessedResults: true -# AllTools: true -# ToolLogsNotFoundAction: 'Standard' - -# - task: PublishBuildArtifacts@1 -# displayName: "Ev2: Publish image artifacts" -# condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) -# inputs: -# pathToPublish: '$(Build.ArtifactStagingDirectory)' -# artifactName: drop - -# - task: PostAnalysis@2 -# displayName: 'SDL: Post-Build Analysis' -# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) -# inputs: -# GdnBreakAllTools: false -# GdnBreakGdnToolBinSkim: true -# GdnBreakGdnToolBinSkimSeverity: 'Warning' -# GdnBreakGdnToolGosec: true -# GdnBreakGdnToolGosecSeverity: 'Warning' -# GdnBreakGdnToolSemmle: true -# GdnBreakGdnToolSemmleSeverity: 'Warning' +- job: Linux + displayName: Build linux image + pool: + name: Azure-Pipelines-CI-Test-EO + dependsOn: common + variables: + LINUX_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.LINUX_FULL_IMAGE_NAME'] ] + # This is necessary because of: https://github.com/moby/moby/issues/37965 + DOCKER_BUILDKIT: 1 + steps: + - checkout: self + submodules: true + + - task: CodeQL3000Init@0 + displayName: 'SDL: init codeql' + condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + + - task: GoTool@0 + displayName: "Build: specify golang version" + inputs: + version: '1.19' + + - bash: | + sudo apt-get install build-essential -y + make + condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + workingDirectory: $(Build.SourcesDirectory)/otelcollector/opentelemetry-collector-builder/ + displayName: "SDL: build otelcollector, promconfigvalidator, targetallocator, and fluent-bit plugin for scanning" + + - task: BinSkim@4 + displayName: 'SDL: run binskim' + condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + inputs: + InputType: 'CommandLine' + arguments: 'analyze --rich-return-code $(Build.SourcesDirectory)/otelcollector/opentelemetry-collector-builder/otelcollector $(Build.SourcesDirectory)/otelcollector/prom-config-validator-builder/promconfigvalidator $(Build.SourcesDirectory)/otelcollector/opentelemetry-operator/cmd/otel-allocator/targetallocator $(Build.SourcesDirectory)/otelcollector/fluent-bit/src/out_appinsights.so' + + - task: Gosec@1 + displayName: 'SDL: run gosec' + condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + inputs: + targetPattern: 'gosecPattern' + targetGosecPattern: '$(Build.SourcesDirectory)/otelcollector' + + - bash: | + wget https://github.com/microsoft/DevSkim/releases/download/v0.6.9/DevSkim_linux_0.6.9.zip + unzip DevSkim_linux_0.6.9.zip + chmod 775 DevSkim_linux_0.6.9/devskim + ./DevSkim_linux_0.6.9/devskim analyze $(Build.SourcesDirectory)/otelcollector --ignore-globs **/deploy/dashboard/**,**/react/static/** --severity critical,important + displayName: 'SDL: run devskim' + condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + workingDirectory: $(Build.SourcesDirectory) + + - bash: | + sudo gem install brakeman -v 5.4.1 + brakeman $(Build.SourcesDirectory)/otelcollector/configmapparser --force + displayName: 'SDL: run brakeman' + condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + + - bash: | + mkdir -p $(Build.ArtifactStagingDirectory)/linux + + # Necessary due to necessary due to https://stackoverflow.com/questions/60080264/docker-cannot-build-multi-platform-images-with-docker-buildx + sudo apt-get update && sudo apt-get -y install qemu binfmt-support qemu-user-static + docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + + docker buildx create --name dockerbuilder + docker buildx use dockerbuilder + docker login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) + if [ "$(Build.Reason)" != "PullRequest" ]; then + docker buildx build . --platform=linux/amd64,linux/arm64 --file ./build/linux/Dockerfile -t $(LINUX_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/metadata.json --push + docker pull $(LINUX_FULL_IMAGE_NAME) + else + + # Build multiarch image to make sure there are no issues + docker buildx build . --platform=linux/amd64,linux/arm64 --file ./build/linux/Dockerfile -t $(LINUX_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/metadata.json + + # Load in amd64 image to run vulnerability scan + docker buildx build . --file ./build/linux/Dockerfile -t $(LINUX_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/metadata.json + fi + workingDirectory: $(Build.SourcesDirectory)/otelcollector/ + displayName: "Build: build and push image to dev ACR" + + - bash: | + curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin + trivy image --ignore-unfixed --no-progress --severity HIGH,CRITICAL,MEDIUM --exit-code 1 $(LINUX_FULL_IMAGE_NAME) + trivy image --ignore-unfixed --no-progress --severity HIGH,CRITICAL,MEDIUM --exit-code 1 $(KUBE_STATE_METRICS_IMAGE) + trivy image --ignore-unfixed --no-progress --severity HIGH,CRITICAL,MEDIUM --exit-code 1 $(NODE_EXPORTER_IMAGE) + workingDirectory: $(Build.SourcesDirectory) + displayName: "Build: run trivy scan" + + - task: CodeQL3000Finalize@0 + displayName: 'SDL: run codeql' + condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + + - task: ComponentGovernanceComponentDetection@0 + displayName: "SDL: run component governance" + condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) + inputs: + scanType: 'Register' + verbosity: 'Verbose' + dockerImagesToScan: '$(LINUX_FULL_IMAGE_NAME)' + alertWarningLevel: 'High' + + - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 + displayName: "Ev2: Generate image artifacts" + condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) + inputs: + BuildDropPath: '$(Build.ArtifactStagingDirectory)/linux' + DockerImagesToScan: '$(LINUX_FULL_IMAGE_NAME)' + + - task: SdtReport@2 + displayName: 'SDL: generate report' + condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + inputs: + GdnExportAllTools: false + GdnExportGdnToolBinSkim: true + GdnExportGdnToolBinSkimSeverity: 'Note' + GdnExportGdnToolGosec: true + GdnExportGdnToolGosecSeverity: 'Note' + GdnExportGdnToolSemmle: true + GdnExportGdnToolSemmleSeverity: 'Note' + + - task: PublishSecurityAnalysisLogs@3 + displayName: 'SDL: publish report' + condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + inputs: + ArtifactName: 'CodeAnalysisLogs' + ArtifactType: 'Container' + PublishProcessedResults: true + AllTools: true + ToolLogsNotFoundAction: 'Standard' + + - task: PublishBuildArtifacts@1 + displayName: "Ev2: Publish image artifacts" + condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) + inputs: + pathToPublish: '$(Build.ArtifactStagingDirectory)' + artifactName: drop + + - task: PostAnalysis@2 + displayName: 'SDL: Post-Build Analysis' + condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + inputs: + GdnBreakAllTools: false + GdnBreakGdnToolBinSkim: true + GdnBreakGdnToolBinSkimSeverity: 'Warning' + GdnBreakGdnToolGosec: true + GdnBreakGdnToolGosecSeverity: 'Warning' + GdnBreakGdnToolSemmle: true + GdnBreakGdnToolSemmleSeverity: 'Warning' - job: TargetAllocator displayName: Build target allocator image @@ -332,529 +332,529 @@ jobs: workingDirectory: $(Build.SourcesDirectory) displayName: "Build: run trivy scan" -# - job: Linux_ConfigReader -# displayName: Build linux image for config reader -# pool: -# name: Azure-Pipelines-CI-Test-EO -# dependsOn: common -# variables: -# LINUX_CONFIG_READER_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.LINUX_CONFIG_READER_FULL_IMAGE_NAME'] ] -# # This is necessary because of: https://github.com/moby/moby/issues/37965 -# DOCKER_BUILDKIT: 1 -# steps: - -# - task: CodeQL3000Init@0 -# displayName: 'SDL: init codeql' -# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) - -# - task: GoTool@0 -# displayName: "Build: specify golang version" -# inputs: -# version: '1.19' - -# - bash: | -# sudo apt-get install build-essential -y -# make -# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) -# workingDirectory: $(Build.SourcesDirectory)/otelcollector/configuration-reader-builder/ -# displayName: "SDL: build configuration reader for scanning" - -# - task: BinSkim@4 -# displayName: 'SDL: run binskim' -# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) -# inputs: -# InputType: 'CommandLine' -# arguments: 'analyze --rich-return-code $(Build.SourcesDirectory)/otelcollector/configuration-reader-builder/configurationreader' - -# - task: Gosec@1 -# displayName: 'SDL: run gosec' -# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) -# inputs: -# targetPattern: 'gosecPattern' -# targetGosecPattern: '$(Build.SourcesDirectory)/otelcollector' - -# - bash: | -# wget https://github.com/microsoft/DevSkim/releases/download/v0.6.9/DevSkim_linux_0.6.9.zip -# unzip DevSkim_linux_0.6.9.zip -# chmod 775 DevSkim_linux_0.6.9/devskim -# ./DevSkim_linux_0.6.9/devskim analyze $(Build.SourcesDirectory)/otelcollector --ignore-globs **/deploy/dashboard/**,**/react/static/** --severity critical,important -# displayName: 'SDL: run devskim' -# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) -# workingDirectory: $(Build.SourcesDirectory) - -# - bash: | -# ruby --version -# sudo apt-get install ruby-full -# ruby --version -# sudo gem install brakeman -# brakeman $(Build.SourcesDirectory)/otelcollector/configmapparser --force -# displayName: 'SDL: run brakeman' -# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) - -# - bash: | -# mkdir -p $(Build.ArtifactStagingDirectory)/linux - -# # Necessary due to necessary due to https://stackoverflow.com/questions/60080264/docker-cannot-build-multi-platform-images-with-docker-buildx -# sudo apt-get update && sudo apt-get -y install qemu binfmt-support qemu-user-static -# docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - -# docker buildx create --name dockerbuilder -# docker buildx use dockerbuilder -# docker login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) -# if [ "$(Build.Reason)" != "PullRequest" ]; then -# docker buildx build . --platform=linux/amd64,linux/arm64 --file ./build/linux/configuration-reader/Dockerfile -t $(LINUX_CONFIG_READER_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/configuration-reader/metadata.json --push -# docker pull $(LINUX_CONFIG_READER_FULL_IMAGE_NAME) -# else - -# # Build multiarch image to make sure there are no issues -# docker buildx build . --platform=linux/amd64,linux/arm64 --file ./build/linux/configuration-reader/Dockerfile -t $(LINUX_CONFIG_READER_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/configuration-reader/metadata.json - -# # Load in amd64 image to run vulnerability scan -# docker buildx build . --file ./build/linux/configuration-reader/Dockerfile -t $(LINUX_CONFIG_READER_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/configuration-reader/metadata.json -# fi -# workingDirectory: $(Build.SourcesDirectory)/otelcollector/ -# displayName: "Build: build and push configuration reader image to dev ACR" - -# # - bash: | -# # curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin -# # trivy image --ignore-unfixed --no-progress --severity HIGH,CRITICAL,MEDIUM --exit-code 1 $(LINUX_CONFIG_READER_FULL_IMAGE_NAME) -# # workingDirectory: $(Build.SourcesDirectory) -# # displayName: "Build: run trivy scan" - -# - task: CodeQL3000Finalize@0 -# displayName: 'SDL: run codeql' -# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) - -# - task: ComponentGovernanceComponentDetection@0 -# displayName: "SDL: run component governance" -# condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) -# inputs: -# scanType: 'Register' -# verbosity: 'Verbose' -# dockerImagesToScan: '$(LINUX_CONFIG_READER_FULL_IMAGE_NAME)' -# alertWarningLevel: 'High' - -# - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 -# displayName: "Ev2: Generate image artifacts" -# condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) -# inputs: -# BuildDropPath: '$(Build.ArtifactStagingDirectory)/linux' -# DockerImagesToScan: '$(LINUX_CONFIG_READER_FULL_IMAGE_NAME)' - -# - task: SdtReport@2 -# displayName: 'SDL: generate report' -# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) -# inputs: -# GdnExportAllTools: false -# GdnExportGdnToolBinSkim: true -# GdnExportGdnToolBinSkimSeverity: 'Note' -# GdnExportGdnToolGosec: true -# GdnExportGdnToolGosecSeverity: 'Note' -# GdnExportGdnToolSemmle: true -# GdnExportGdnToolSemmleSeverity: 'Note' - -# - task: PublishSecurityAnalysisLogs@3 -# displayName: 'SDL: publish report' -# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) -# inputs: -# ArtifactName: 'CodeAnalysisLogs' -# ArtifactType: 'Container' -# PublishProcessedResults: true -# AllTools: true -# ToolLogsNotFoundAction: 'Standard' - -# - task: PublishBuildArtifacts@1 -# displayName: "Ev2: Publish image artifacts" -# condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) -# inputs: -# pathToPublish: '$(Build.ArtifactStagingDirectory)' -# artifactName: drop - -# - task: PostAnalysis@2 -# displayName: 'SDL: Post-Build Analysis' -# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) -# inputs: -# GdnBreakAllTools: false -# GdnBreakGdnToolBinSkim: true -# GdnBreakGdnToolBinSkimSeverity: 'Warning' -# GdnBreakGdnToolGosec: true -# GdnBreakGdnToolGosecSeverity: 'Warning' -# GdnBreakGdnToolSemmle: true -# GdnBreakGdnToolSemmleSeverity: 'Warning' - -# - job: Windows2019 -# displayName: "Build windows 2019 image" -# pool: -# name: Azure-Pipelines-Windows-CI-Test-EO -# dependsOn: -# - Common -# variables: -# WINDOWS_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.WINDOWS_FULL_IMAGE_NAME'] ] -# WINDOWS_2019_BASE_IMAGE_VERSION: $[ dependencies.common.outputs['setup.WINDOWS_2019_BASE_IMAGE_VERSION'] ] -# steps: -# - task: GoTool@0 -# displayName: "Build: specify golang version" -# inputs: -# version: '1.19' - -# - powershell: | -# ./makefile_windows.ps1 -# workingDirectory: $(Build.SourcesDirectory)/otelcollector/opentelemetry-collector-builder/ -# displayName: "Build: build otelcollector, promconfigvalidator, and fluent-bit plugin" - -# - powershell: | -# docker build . --isolation=hyperv --file ./build/windows/Dockerfile -t $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2019_BASE_IMAGE_VERSION) --build-arg WINDOWS_VERSION=$(WINDOWS_2019_BASE_IMAGE_VERSION) -# workingDirectory: $(Build.SourcesDirectory)/otelcollector/ -# displayName: "Build: build WS2019 image" - -# - powershell: | -# docker login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) -# docker push $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2019_BASE_IMAGE_VERSION) -# displayName: "Build: push image to dev ACR" - -# - task: ComponentGovernanceComponentDetection@0 -# displayName: "SDL: run component governance" -# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) -# inputs: -# scanType: 'Register' -# verbosity: 'Verbose' -# dockerImagesToScan: '$(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2019_BASE_IMAGE_VERSION)' - -# - job: Windows2022 -# displayName: "Build windows 2022 image" -# pool: -# name: Azure-Pipelines-Windows-CI-Test-EO -# dependsOn: -# - Common -# variables: -# WINDOWS_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.WINDOWS_FULL_IMAGE_NAME'] ] -# WINDOWS_2022_BASE_IMAGE_VERSION: $[ dependencies.common.outputs['setup.WINDOWS_2022_BASE_IMAGE_VERSION'] ] -# steps: -# - task: GoTool@0 -# displayName: "Build: specify golang version" -# inputs: -# version: '1.19' - -# - powershell: | -# ./makefile_windows.ps1 -# workingDirectory: $(Build.SourcesDirectory)/otelcollector/opentelemetry-collector-builder/ -# displayName: "Build: build otelcollector, promconfigvalidator, and fluent-bit plugin" - -# - powershell: | -# docker build . --isolation=hyperv --file ./build/windows/Dockerfile -t $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2022_BASE_IMAGE_VERSION) --build-arg WINDOWS_VERSION=$(WINDOWS_2022_BASE_IMAGE_VERSION) -# workingDirectory: $(Build.SourcesDirectory)/otelcollector/ -# displayName: "Build: build WS2022 image" - -# - powershell: | -# docker login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) -# docker push $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2022_BASE_IMAGE_VERSION) -# displayName: "Build: push image to dev ACR" -# condition: eq(variables.IS_PR, false) - -# - task: ComponentGovernanceComponentDetection@0 -# displayName: "SDL: run component governance" -# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) -# inputs: -# scanType: 'Register' -# verbosity: 'Verbose' -# dockerImagesToScan: '$(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2022_BASE_IMAGE_VERSION)' -# alertWarningLevel: 'High' - -# - job: WindowsMultiArch -# displayName: "Build windows multi-arch image" -# pool: -# name: Azure-Pipelines-Windows-CI-Test-EO -# dependsOn: -# - Common -# - Windows2019 -# - Windows2022 -# variables: -# WINDOWS_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.WINDOWS_FULL_IMAGE_NAME'] ] -# WINDOWS_2019_BASE_IMAGE_VERSION: $[ dependencies.common.outputs['setup.WINDOWS_2019_BASE_IMAGE_VERSION'] ] -# WINDOWS_2022_BASE_IMAGE_VERSION: $[ dependencies.common.outputs['setup.WINDOWS_2022_BASE_IMAGE_VERSION'] ] -# steps: -# - task: GoTool@0 -# displayName: "Build: specify golang version" -# inputs: -# version: '1.19' - -# - powershell: | -# New-Item -Path "$(Build.ArtifactStagingDirectory)" -Name "windows" -ItemType "directory" -# @{"image.name"="$(WINDOWS_FULL_IMAGE_NAME)"} | ConvertTo-Json -Compress | Out-File -Encoding ascii $(Build.ArtifactStagingDirectory)/windows/metadata.json -# docker login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) -# docker manifest create $(WINDOWS_FULL_IMAGE_NAME) $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2019_BASE_IMAGE_VERSION) $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2022_BASE_IMAGE_VERSION) -# docker manifest push $(WINDOWS_FULL_IMAGE_NAME) -# workingDirectory: $(Build.SourcesDirectory)/otelcollector/ -# displayName: "Build: Triggering manigest for multi-arc docker image" - -# - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 -# condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) -# displayName: "Ev2: generate image artifacts" -# inputs: -# BuildDropPath: '$(Build.ArtifactStagingDirectory)/windows' -# DockerImagesToScan: '$(WINDOWS_FULL_IMAGE_NAME)' - -# - task: PublishBuildArtifacts@1 -# condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) -# displayName: "Ev2: publish image artifacts" -# inputs: -# pathToPublish: '$(Build.ArtifactStagingDirectory)' -# artifactName: drop - -# - job: Chart -# displayName: "Package 1P helm chart" -# pool: -# name: Azure-Pipelines-CI-Test-EO -# dependsOn: -# - Common -# - Linux -# - WindowsMultiArch -# variables: -# HELM_CHART_NAME: $[ dependencies.common.outputs['setup.HELM_CHART_NAME'] ] -# HELM_SEMVER: $[ dependencies.common.outputs['setup.SEMVER'] ] -# IMAGE_TAG: $[ dependencies.common.outputs['setup.SEMVER'] ] -# IMAGE_TAG_WINDOWS: $[ dependencies.common.outputs['setup.WINDOWS_IMAGE_TAG'] ] -# HELM_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.HELM_FULL_IMAGE_NAME'] ] -# steps: -# - task: HelmInstaller@1 -# displayName: 'Build: install Helm version' -# inputs: -# helmVersionToInstall: latest - -# - bash: | -# envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/chart/prometheus-collector/Chart-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/chart/prometheus-collector/Chart.yaml && envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/chart/prometheus-collector/values-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/chart/prometheus-collector/values.yaml -# helm version -# displayName: "Build: substitute chart version in Chart.yaml and values.yaml" - -# - bash: | -# helm dep update -# workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/chart/prometheus-collector/ -# displayName: "Build: update helm dependencies" - -# - bash: | -# helm package ./prometheus-collector/ -# workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/chart/ -# displayName: "Build: package helm chart" - -# - bash: | -# helm registry login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) -# helm push $(HELM_CHART_NAME)-$(HELM_SEMVER).tgz oci://$(ACR_REGISTRY)$(ACR_REPOSITORY_HELM) -# mkdir -p $(Build.ArtifactStagingDirectory)/chart -# echo {\"image.name\":\"$(HELM_FULL_IMAGE_NAME)\"} > $(Build.ArtifactStagingDirectory)/chart/metadata.json -# workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/chart/ -# displayName: "Build: push helm chart to dev ACR" -# condition: eq(variables.IS_PR, false) - -# - job: ARC_Chart -# displayName: "Package Arc helm chart" -# pool: -# name: Azure-Pipelines-CI-Test-EO -# dependsOn: -# - Common -# - Linux -# variables: -# HELM_SEMVER: $[ dependencies.common.outputs['setup.SEMVER'] ] -# IMAGE_TAG: $[ dependencies.common.outputs['setup.SEMVER'] ] -# IMAGE_TAG_WINDOWS: $[ dependencies.common.outputs['setup.WINDOWS_IMAGE_TAG'] ] -# ARC_HELM_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.ARC_HELM_FULL_IMAGE_NAME'] ] -# ARC_EXTENSION: true -# steps: -# - task: HelmInstaller@1 -# displayName: 'Build: install Helm version' -# inputs: -# helmVersionToInstall: latest - -# - bash: | -# export HELM_CHART_NAME=$ARC_HELM_CHART_NAME -# envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/Chart-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/Chart.yaml && envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values.yaml -# helm version -# displayName: "Build: substitute chart version in Chart.yaml and values.yaml" - -# - bash: | -# helm dep update -# workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon -# displayName: "Build: update helm dependencies" - -# - bash: | -# helm package ./azure-monitor-metrics-addon/ -# workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/ -# displayName: "Build: package helm chart" - -# - bash: | -# helm registry login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) -# helm push $(ARC_HELM_CHART_NAME)-$(HELM_SEMVER).tgz oci://$(ACR_REGISTRY)$(ACR_REPOSITORY_HELM) -# mkdir -p $(Build.ArtifactStagingDirectory)/arc-chart -# echo {\"image.name\":\"$(ARC_HELM_FULL_IMAGE_NAME)\"} > $(Build.ArtifactStagingDirectory)/arc-chart/metadata.json -# workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/ -# displayName: "Build: push helm chart to dev ACR" -# condition: eq(variables.IS_PR, false) - -# - task: PublishBuildArtifacts@1 -# displayName: "Ev2: publish helm chart artifacts" -# condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) -# inputs: -# pathToPublish: '$(Build.ArtifactStagingDirectory)' -# artifactName: drop - -# - job: DeployARC -# displayName: "Deploy to ARC dev cluster" -# condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) -# pool: -# name: Azure-Pipelines-CI-Test-EO -# dependsOn: -# - Common -# - ARC_Chart -# variables: -# HELM_SEMVER: $[ dependencies.common.outputs['setup.SEMVER'] ] -# steps: -# - bash: | -# # Create JSON request body -# cat < "request.json" -# { -# "artifactEndpoints": [ -# { -# "Regions": [ -# "westcentralus" -# ], -# "Releasetrains": [ -# "pipeline" -# ], -# "FullPathToHelmChart": "https://mcr.microsoft.com/azuremonitor/containerinsights/cidev/ama-metrics-arc", -# "ExtensionUpdateFrequencyInMinutes": 5, -# "IsCustomerHidden": true, -# "ReadyforRollout": true, -# "RollbackVersion": null, -# "PackageConfigName": "Microsoft.AzureMonitor.Containers.Metrics-Prom041823" -# } -# ] -# } -# EOF - -# # Send Request -# SUBSCRIPTION="b9842c7c-1a38-4385-8f39-a51314758bcf" -# RESOURCE_AUDIENCE="c699bf69-fb1d-4eaf-999b-99e6b2ae4d85" -# SPN_CLIENT_ID="9a4c55e9-576a-450a-88bd-53bd634db38d" -# SPN_TENANT_ID="72f988bf-86f1-41af-91ab-2d7cd011db47" -# METHOD="PUT" - -# echo "Request parameter preparation, SUBSCRIPTION is $SUBSCRIPTION, RESOURCE_AUDIENCE is $RESOURCE_AUDIENCE, CHART_VERSION is $HELM_SEMVER, SPN_CLIENT_ID is $SPN_CLIENT_ID, SPN_TENANT_ID is $SPN_TENANT_ID" - -# # MSI is not supported -# echo "Login cli using spn" -# az login --service-principal --username=$SPN_CLIENT_ID --password=$(ARC_SPN_SECRET) --tenant=$SPN_TENANT_ID -# if [ $? -eq 0 ]; then -# echo "Logged in successfully with spn" -# else -# echo "-e error failed to login to az with managed identity credentials" -# exit 1 -# fi - -# ACCESS_TOKEN=$(az account get-access-token --resource $RESOURCE_AUDIENCE --query accessToken -o json) -# if [ $? -eq 0 ]; then -# echo "get access token from resource:$RESOURCE_AUDIENCE successfully." -# else -# echo "-e error get access token from resource:$RESOURCE_AUDIENCE failed." -# exit 1 -# fi -# ACCESS_TOKEN=$(echo $ACCESS_TOKEN | tr -d '"' | tr -d '"\r\n') - -# ARC_API_URL="https://eastus2euap.dp.kubernetesconfiguration.azure.com" -# EXTENSION_NAME="microsoft.azuremonitor.containers.metrics" -# API_VERSION="2021-05-01" - -# echo "start send request" -# az rest --method $METHOD --headers "{\"Authorization\": \"Bearer $ACCESS_TOKEN\", \"Content-Type\": \"application/json\"}" --body @request.json --uri $ARC_API_URL/subscriptions/$SUBSCRIPTION/extensionTypeRegistrations/$EXTENSION_NAME/versions/$HELM_SEMVER?api-version=$API_VERSION -# if [ $? -eq 0 ]; then -# echo "arc extension registered successfully" -# else -# echo "-e error failed to register arc extension" -# exit 1 -# fi -# displayName: "Deploy: Release to dev release train" -# - task: AzureCLI@2 -# displayName: "Deploy: ci-dev-arc-wcus cluster" -# inputs: -# azureSubscription: 'ContainerInsights_Build_Subscription(9b96ebbd-c57a-42d1-bbe9-b69296e4c7fb)' -# scriptType: 'bash' -# scriptLocation: 'inlineScript' -# inlineScript: | -# az config set extension.use_dynamic_install=yes_without_prompt -# az k8s-extension update --name azuremonitor-metrics --resource-group ci-dev-arc-wcus --cluster-name ci-dev-arc-wcus --cluster-type connectedClusters --version $HELM_SEMVER --release-train pipeline - -# - job: Deploy -# displayName: "Deploy to dev clusters" -# pool: -# name: Azure-Pipelines-CI-Test-EO -# condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) -# dependsOn: -# - Common -# - Chart -# variables: -# HELM_CHART_NAME: $[ dependencies.common.outputs['setup.HELM_CHART_NAME'] ] -# HELM_SEMVER: $[ dependencies.common.outputs['setup.SEMVER'] ] -# IMAGE_TAG: $[ dependencies.common.outputs['setup.SEMVER'] ] -# IMAGE_TAG_WINDOWS: $[ dependencies.common.outputs['setup.WINDOWS_IMAGE_TAG'] ] -# HELM_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.HELM_FULL_IMAGE_NAME'] ] -# steps: -# - checkout: self -# submodules: true -# persistCredentials: true - -# - bash: | -# git config --global user.name "AzureDevOps Agent" -# git tag "v$(HELM_SEMVER)" -# git push origin "v$(HELM_SEMVER)" -# displayName: Tag commit with semver - -# - task: HelmInstaller@1 -# displayName: Install Helm version -# inputs: -# helmVersionToInstall: latest -# - bash: | -# for i in 1 2 3 4 5 6 7 8 9 10 -# do -# sleep 30 -# echo $(MCR_REGISTRY)$(MCR_REPOSITORY):$(IMAGE_TAG_WINDOWS) -# echo $(MCR_REGISTRY)$(MCR_REPOSITORY_HELM):$(IMAGE_TAG) - -# output1=$(curl -s https://$(MCR_REGISTRY)/v2$(MCR_REPOSITORY)/tags/list) -# output2=$(curl -s https://$(MCR_REGISTRY)/v2$(MCR_REPOSITORY_HELM)/tags/list) -# if (echo $output1 | grep $(IMAGE_TAG_WINDOWS)) && (echo $output2 | grep $(IMAGE_TAG)) -# then -# echo "Images and chart are published to mcr" -# exit 0 -# fi -# done -# echo "Images and chart are not published to mcr within 5 minutes" -# exit 1 -# displayName: "Check images are pushed to dev MCR" - -# - bash: | -# helm pull oci://$(MCR_REGISTRY)$(MCR_REPOSITORY_HELM) --version $(HELM_SEMVER) -# workingDirectory: $(Build.StagingDirectory) -# displayName: "Pull helm chart from dev MCR" - -# - bash: | -# export AKS_REGION="eastus" -# export AKS_RESOURCE_ID="/subscriptions/9b96ebbd-c57a-42d1-bbe9-b69296e4c7fb/resourceGroups/ci-dev-aks-mac-eus-rg/providers/Microsoft.ContainerService/managedClusters/ci-dev-aks-mac-eus" -# export ARC_EXTENSION="false" -# envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/Chart-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/Chart.yaml && envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values.yaml -# ls $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon -# cd $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon -# helm dependency update -# displayName: "Build: substitute chart version for 3p in Chart.yaml and values.yaml" - -# - task: HelmDeploy@0 -# displayName: "Deploy: ci-dev-aks-mac-eus cluster" -# inputs: -# connectionType: 'Azure Resource Manager' -# azureSubscription: 'ContainerInsights_Build_Subscription(9b96ebbd-c57a-42d1-bbe9-b69296e4c7fb)' -# azureResourceGroup: 'ci-dev-aks-mac-eus-rg' -# kubernetesCluster: 'ci-dev-aks-mac-eus' -# namespace: 'default' -# command: 'upgrade' -# chartType: 'FilePath' -# chartPath: '$(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/' -# releaseName: 'ama-metrics' -# waitForExecution: false -# arguments: --dependency-update --values $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values.yaml +- job: Linux_ConfigReader + displayName: Build linux image for config reader + pool: + name: Azure-Pipelines-CI-Test-EO + dependsOn: common + variables: + LINUX_CONFIG_READER_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.LINUX_CONFIG_READER_FULL_IMAGE_NAME'] ] + # This is necessary because of: https://github.com/moby/moby/issues/37965 + DOCKER_BUILDKIT: 1 + steps: + + - task: CodeQL3000Init@0 + displayName: 'SDL: init codeql' + condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + + - task: GoTool@0 + displayName: "Build: specify golang version" + inputs: + version: '1.19' + + - bash: | + sudo apt-get install build-essential -y + make + condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + workingDirectory: $(Build.SourcesDirectory)/otelcollector/configuration-reader-builder/ + displayName: "SDL: build configuration reader for scanning" + + - task: BinSkim@4 + displayName: 'SDL: run binskim' + condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + inputs: + InputType: 'CommandLine' + arguments: 'analyze --rich-return-code $(Build.SourcesDirectory)/otelcollector/configuration-reader-builder/configurationreader' + + - task: Gosec@1 + displayName: 'SDL: run gosec' + condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + inputs: + targetPattern: 'gosecPattern' + targetGosecPattern: '$(Build.SourcesDirectory)/otelcollector' + + - bash: | + wget https://github.com/microsoft/DevSkim/releases/download/v0.6.9/DevSkim_linux_0.6.9.zip + unzip DevSkim_linux_0.6.9.zip + chmod 775 DevSkim_linux_0.6.9/devskim + ./DevSkim_linux_0.6.9/devskim analyze $(Build.SourcesDirectory)/otelcollector --ignore-globs **/deploy/dashboard/**,**/react/static/** --severity critical,important + displayName: 'SDL: run devskim' + condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + workingDirectory: $(Build.SourcesDirectory) + + - bash: | + ruby --version + sudo apt-get install ruby-full + ruby --version + sudo gem install brakeman + brakeman $(Build.SourcesDirectory)/otelcollector/configmapparser --force + displayName: 'SDL: run brakeman' + condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + + - bash: | + mkdir -p $(Build.ArtifactStagingDirectory)/linux + + # Necessary due to necessary due to https://stackoverflow.com/questions/60080264/docker-cannot-build-multi-platform-images-with-docker-buildx + sudo apt-get update && sudo apt-get -y install qemu binfmt-support qemu-user-static + docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + + docker buildx create --name dockerbuilder + docker buildx use dockerbuilder + docker login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) + if [ "$(Build.Reason)" != "PullRequest" ]; then + docker buildx build . --platform=linux/amd64,linux/arm64 --file ./build/linux/configuration-reader/Dockerfile -t $(LINUX_CONFIG_READER_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/configuration-reader/metadata.json --push + docker pull $(LINUX_CONFIG_READER_FULL_IMAGE_NAME) + else + + # Build multiarch image to make sure there are no issues + docker buildx build . --platform=linux/amd64,linux/arm64 --file ./build/linux/configuration-reader/Dockerfile -t $(LINUX_CONFIG_READER_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/configuration-reader/metadata.json + + # Load in amd64 image to run vulnerability scan + docker buildx build . --file ./build/linux/configuration-reader/Dockerfile -t $(LINUX_CONFIG_READER_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/configuration-reader/metadata.json + fi + workingDirectory: $(Build.SourcesDirectory)/otelcollector/ + displayName: "Build: build and push configuration reader image to dev ACR" + + - bash: | + curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin + trivy image --ignore-unfixed --no-progress --severity HIGH,CRITICAL,MEDIUM --exit-code 1 $(LINUX_CONFIG_READER_FULL_IMAGE_NAME) + workingDirectory: $(Build.SourcesDirectory) + displayName: "Build: run trivy scan" + + - task: CodeQL3000Finalize@0 + displayName: 'SDL: run codeql' + condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + + - task: ComponentGovernanceComponentDetection@0 + displayName: "SDL: run component governance" + condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) + inputs: + scanType: 'Register' + verbosity: 'Verbose' + dockerImagesToScan: '$(LINUX_CONFIG_READER_FULL_IMAGE_NAME)' + alertWarningLevel: 'High' + + - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 + displayName: "Ev2: Generate image artifacts" + condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) + inputs: + BuildDropPath: '$(Build.ArtifactStagingDirectory)/linux' + DockerImagesToScan: '$(LINUX_CONFIG_READER_FULL_IMAGE_NAME)' + + - task: SdtReport@2 + displayName: 'SDL: generate report' + condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + inputs: + GdnExportAllTools: false + GdnExportGdnToolBinSkim: true + GdnExportGdnToolBinSkimSeverity: 'Note' + GdnExportGdnToolGosec: true + GdnExportGdnToolGosecSeverity: 'Note' + GdnExportGdnToolSemmle: true + GdnExportGdnToolSemmleSeverity: 'Note' + + - task: PublishSecurityAnalysisLogs@3 + displayName: 'SDL: publish report' + condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + inputs: + ArtifactName: 'CodeAnalysisLogs' + ArtifactType: 'Container' + PublishProcessedResults: true + AllTools: true + ToolLogsNotFoundAction: 'Standard' + + - task: PublishBuildArtifacts@1 + displayName: "Ev2: Publish image artifacts" + condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) + inputs: + pathToPublish: '$(Build.ArtifactStagingDirectory)' + artifactName: drop + + - task: PostAnalysis@2 + displayName: 'SDL: Post-Build Analysis' + condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + inputs: + GdnBreakAllTools: false + GdnBreakGdnToolBinSkim: true + GdnBreakGdnToolBinSkimSeverity: 'Warning' + GdnBreakGdnToolGosec: true + GdnBreakGdnToolGosecSeverity: 'Warning' + GdnBreakGdnToolSemmle: true + GdnBreakGdnToolSemmleSeverity: 'Warning' + +- job: Windows2019 + displayName: "Build windows 2019 image" + pool: + name: Azure-Pipelines-Windows-CI-Test-EO + dependsOn: + - Common + variables: + WINDOWS_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.WINDOWS_FULL_IMAGE_NAME'] ] + WINDOWS_2019_BASE_IMAGE_VERSION: $[ dependencies.common.outputs['setup.WINDOWS_2019_BASE_IMAGE_VERSION'] ] + steps: + - task: GoTool@0 + displayName: "Build: specify golang version" + inputs: + version: '1.19' + + - powershell: | + ./makefile_windows.ps1 + workingDirectory: $(Build.SourcesDirectory)/otelcollector/opentelemetry-collector-builder/ + displayName: "Build: build otelcollector, promconfigvalidator, and fluent-bit plugin" + + - powershell: | + docker build . --isolation=hyperv --file ./build/windows/Dockerfile -t $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2019_BASE_IMAGE_VERSION) --build-arg WINDOWS_VERSION=$(WINDOWS_2019_BASE_IMAGE_VERSION) + workingDirectory: $(Build.SourcesDirectory)/otelcollector/ + displayName: "Build: build WS2019 image" + + - powershell: | + docker login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) + docker push $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2019_BASE_IMAGE_VERSION) + displayName: "Build: push image to dev ACR" + + - task: ComponentGovernanceComponentDetection@0 + displayName: "SDL: run component governance" + condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + inputs: + scanType: 'Register' + verbosity: 'Verbose' + dockerImagesToScan: '$(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2019_BASE_IMAGE_VERSION)' + +- job: Windows2022 + displayName: "Build windows 2022 image" + pool: + name: Azure-Pipelines-Windows-CI-Test-EO + dependsOn: + - Common + variables: + WINDOWS_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.WINDOWS_FULL_IMAGE_NAME'] ] + WINDOWS_2022_BASE_IMAGE_VERSION: $[ dependencies.common.outputs['setup.WINDOWS_2022_BASE_IMAGE_VERSION'] ] + steps: + - task: GoTool@0 + displayName: "Build: specify golang version" + inputs: + version: '1.19' + + - powershell: | + ./makefile_windows.ps1 + workingDirectory: $(Build.SourcesDirectory)/otelcollector/opentelemetry-collector-builder/ + displayName: "Build: build otelcollector, promconfigvalidator, and fluent-bit plugin" + + - powershell: | + docker build . --isolation=hyperv --file ./build/windows/Dockerfile -t $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2022_BASE_IMAGE_VERSION) --build-arg WINDOWS_VERSION=$(WINDOWS_2022_BASE_IMAGE_VERSION) + workingDirectory: $(Build.SourcesDirectory)/otelcollector/ + displayName: "Build: build WS2022 image" + + - powershell: | + docker login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) + docker push $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2022_BASE_IMAGE_VERSION) + displayName: "Build: push image to dev ACR" + condition: eq(variables.IS_PR, false) + + - task: ComponentGovernanceComponentDetection@0 + displayName: "SDL: run component governance" + condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + inputs: + scanType: 'Register' + verbosity: 'Verbose' + dockerImagesToScan: '$(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2022_BASE_IMAGE_VERSION)' + alertWarningLevel: 'High' + +- job: WindowsMultiArch + displayName: "Build windows multi-arch image" + pool: + name: Azure-Pipelines-Windows-CI-Test-EO + dependsOn: + - Common + - Windows2019 + - Windows2022 + variables: + WINDOWS_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.WINDOWS_FULL_IMAGE_NAME'] ] + WINDOWS_2019_BASE_IMAGE_VERSION: $[ dependencies.common.outputs['setup.WINDOWS_2019_BASE_IMAGE_VERSION'] ] + WINDOWS_2022_BASE_IMAGE_VERSION: $[ dependencies.common.outputs['setup.WINDOWS_2022_BASE_IMAGE_VERSION'] ] + steps: + - task: GoTool@0 + displayName: "Build: specify golang version" + inputs: + version: '1.19' + + - powershell: | + New-Item -Path "$(Build.ArtifactStagingDirectory)" -Name "windows" -ItemType "directory" + @{"image.name"="$(WINDOWS_FULL_IMAGE_NAME)"} | ConvertTo-Json -Compress | Out-File -Encoding ascii $(Build.ArtifactStagingDirectory)/windows/metadata.json + docker login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) + docker manifest create $(WINDOWS_FULL_IMAGE_NAME) $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2019_BASE_IMAGE_VERSION) $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2022_BASE_IMAGE_VERSION) + docker manifest push $(WINDOWS_FULL_IMAGE_NAME) + workingDirectory: $(Build.SourcesDirectory)/otelcollector/ + displayName: "Build: Triggering manigest for multi-arc docker image" + + - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 + condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) + displayName: "Ev2: generate image artifacts" + inputs: + BuildDropPath: '$(Build.ArtifactStagingDirectory)/windows' + DockerImagesToScan: '$(WINDOWS_FULL_IMAGE_NAME)' + + - task: PublishBuildArtifacts@1 + condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) + displayName: "Ev2: publish image artifacts" + inputs: + pathToPublish: '$(Build.ArtifactStagingDirectory)' + artifactName: drop + +- job: Chart + displayName: "Package 1P helm chart" + pool: + name: Azure-Pipelines-CI-Test-EO + dependsOn: + - Common + - Linux + - WindowsMultiArch + variables: + HELM_CHART_NAME: $[ dependencies.common.outputs['setup.HELM_CHART_NAME'] ] + HELM_SEMVER: $[ dependencies.common.outputs['setup.SEMVER'] ] + IMAGE_TAG: $[ dependencies.common.outputs['setup.SEMVER'] ] + IMAGE_TAG_WINDOWS: $[ dependencies.common.outputs['setup.WINDOWS_IMAGE_TAG'] ] + HELM_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.HELM_FULL_IMAGE_NAME'] ] + steps: + - task: HelmInstaller@1 + displayName: 'Build: install Helm version' + inputs: + helmVersionToInstall: latest + + - bash: | + envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/chart/prometheus-collector/Chart-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/chart/prometheus-collector/Chart.yaml && envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/chart/prometheus-collector/values-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/chart/prometheus-collector/values.yaml + helm version + displayName: "Build: substitute chart version in Chart.yaml and values.yaml" + + - bash: | + helm dep update + workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/chart/prometheus-collector/ + displayName: "Build: update helm dependencies" + + - bash: | + helm package ./prometheus-collector/ + workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/chart/ + displayName: "Build: package helm chart" + + - bash: | + helm registry login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) + helm push $(HELM_CHART_NAME)-$(HELM_SEMVER).tgz oci://$(ACR_REGISTRY)$(ACR_REPOSITORY_HELM) + mkdir -p $(Build.ArtifactStagingDirectory)/chart + echo {\"image.name\":\"$(HELM_FULL_IMAGE_NAME)\"} > $(Build.ArtifactStagingDirectory)/chart/metadata.json + workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/chart/ + displayName: "Build: push helm chart to dev ACR" + condition: eq(variables.IS_PR, false) + +- job: ARC_Chart + displayName: "Package Arc helm chart" + pool: + name: Azure-Pipelines-CI-Test-EO + dependsOn: + - Common + - Linux + variables: + HELM_SEMVER: $[ dependencies.common.outputs['setup.SEMVER'] ] + IMAGE_TAG: $[ dependencies.common.outputs['setup.SEMVER'] ] + IMAGE_TAG_WINDOWS: $[ dependencies.common.outputs['setup.WINDOWS_IMAGE_TAG'] ] + ARC_HELM_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.ARC_HELM_FULL_IMAGE_NAME'] ] + ARC_EXTENSION: true + steps: + - task: HelmInstaller@1 + displayName: 'Build: install Helm version' + inputs: + helmVersionToInstall: latest + + - bash: | + export HELM_CHART_NAME=$ARC_HELM_CHART_NAME + envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/Chart-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/Chart.yaml && envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values.yaml + helm version + displayName: "Build: substitute chart version in Chart.yaml and values.yaml" + + - bash: | + helm dep update + workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon + displayName: "Build: update helm dependencies" + + - bash: | + helm package ./azure-monitor-metrics-addon/ + workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/ + displayName: "Build: package helm chart" + + - bash: | + helm registry login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) + helm push $(ARC_HELM_CHART_NAME)-$(HELM_SEMVER).tgz oci://$(ACR_REGISTRY)$(ACR_REPOSITORY_HELM) + mkdir -p $(Build.ArtifactStagingDirectory)/arc-chart + echo {\"image.name\":\"$(ARC_HELM_FULL_IMAGE_NAME)\"} > $(Build.ArtifactStagingDirectory)/arc-chart/metadata.json + workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/ + displayName: "Build: push helm chart to dev ACR" + condition: eq(variables.IS_PR, false) + + - task: PublishBuildArtifacts@1 + displayName: "Ev2: publish helm chart artifacts" + condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) + inputs: + pathToPublish: '$(Build.ArtifactStagingDirectory)' + artifactName: drop + +- job: DeployARC + displayName: "Deploy to ARC dev cluster" + condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) + pool: + name: Azure-Pipelines-CI-Test-EO + dependsOn: + - Common + - ARC_Chart + variables: + HELM_SEMVER: $[ dependencies.common.outputs['setup.SEMVER'] ] + steps: + - bash: | + # Create JSON request body + cat < "request.json" + { + "artifactEndpoints": [ + { + "Regions": [ + "westcentralus" + ], + "Releasetrains": [ + "pipeline" + ], + "FullPathToHelmChart": "https://mcr.microsoft.com/azuremonitor/containerinsights/cidev/ama-metrics-arc", + "ExtensionUpdateFrequencyInMinutes": 5, + "IsCustomerHidden": true, + "ReadyforRollout": true, + "RollbackVersion": null, + "PackageConfigName": "Microsoft.AzureMonitor.Containers.Metrics-Prom041823" + } + ] + } + EOF + + # Send Request + SUBSCRIPTION="b9842c7c-1a38-4385-8f39-a51314758bcf" + RESOURCE_AUDIENCE="c699bf69-fb1d-4eaf-999b-99e6b2ae4d85" + SPN_CLIENT_ID="9a4c55e9-576a-450a-88bd-53bd634db38d" + SPN_TENANT_ID="72f988bf-86f1-41af-91ab-2d7cd011db47" + METHOD="PUT" + + echo "Request parameter preparation, SUBSCRIPTION is $SUBSCRIPTION, RESOURCE_AUDIENCE is $RESOURCE_AUDIENCE, CHART_VERSION is $HELM_SEMVER, SPN_CLIENT_ID is $SPN_CLIENT_ID, SPN_TENANT_ID is $SPN_TENANT_ID" + + # MSI is not supported + echo "Login cli using spn" + az login --service-principal --username=$SPN_CLIENT_ID --password=$(ARC_SPN_SECRET) --tenant=$SPN_TENANT_ID + if [ $? -eq 0 ]; then + echo "Logged in successfully with spn" + else + echo "-e error failed to login to az with managed identity credentials" + exit 1 + fi + + ACCESS_TOKEN=$(az account get-access-token --resource $RESOURCE_AUDIENCE --query accessToken -o json) + if [ $? -eq 0 ]; then + echo "get access token from resource:$RESOURCE_AUDIENCE successfully." + else + echo "-e error get access token from resource:$RESOURCE_AUDIENCE failed." + exit 1 + fi + ACCESS_TOKEN=$(echo $ACCESS_TOKEN | tr -d '"' | tr -d '"\r\n') + + ARC_API_URL="https://eastus2euap.dp.kubernetesconfiguration.azure.com" + EXTENSION_NAME="microsoft.azuremonitor.containers.metrics" + API_VERSION="2021-05-01" + + echo "start send request" + az rest --method $METHOD --headers "{\"Authorization\": \"Bearer $ACCESS_TOKEN\", \"Content-Type\": \"application/json\"}" --body @request.json --uri $ARC_API_URL/subscriptions/$SUBSCRIPTION/extensionTypeRegistrations/$EXTENSION_NAME/versions/$HELM_SEMVER?api-version=$API_VERSION + if [ $? -eq 0 ]; then + echo "arc extension registered successfully" + else + echo "-e error failed to register arc extension" + exit 1 + fi + displayName: "Deploy: Release to dev release train" + - task: AzureCLI@2 + displayName: "Deploy: ci-dev-arc-wcus cluster" + inputs: + azureSubscription: 'ContainerInsights_Build_Subscription(9b96ebbd-c57a-42d1-bbe9-b69296e4c7fb)' + scriptType: 'bash' + scriptLocation: 'inlineScript' + inlineScript: | + az config set extension.use_dynamic_install=yes_without_prompt + az k8s-extension update --name azuremonitor-metrics --resource-group ci-dev-arc-wcus --cluster-name ci-dev-arc-wcus --cluster-type connectedClusters --version $HELM_SEMVER --release-train pipeline + +- job: Deploy + displayName: "Deploy to dev clusters" + pool: + name: Azure-Pipelines-CI-Test-EO + condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) + dependsOn: + - Common + - Chart + variables: + HELM_CHART_NAME: $[ dependencies.common.outputs['setup.HELM_CHART_NAME'] ] + HELM_SEMVER: $[ dependencies.common.outputs['setup.SEMVER'] ] + IMAGE_TAG: $[ dependencies.common.outputs['setup.SEMVER'] ] + IMAGE_TAG_WINDOWS: $[ dependencies.common.outputs['setup.WINDOWS_IMAGE_TAG'] ] + HELM_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.HELM_FULL_IMAGE_NAME'] ] + steps: + - checkout: self + submodules: true + persistCredentials: true + + - bash: | + git config --global user.name "AzureDevOps Agent" + git tag "v$(HELM_SEMVER)" + git push origin "v$(HELM_SEMVER)" + displayName: Tag commit with semver + + - task: HelmInstaller@1 + displayName: Install Helm version + inputs: + helmVersionToInstall: latest + - bash: | + for i in 1 2 3 4 5 6 7 8 9 10 + do + sleep 30 + echo $(MCR_REGISTRY)$(MCR_REPOSITORY):$(IMAGE_TAG_WINDOWS) + echo $(MCR_REGISTRY)$(MCR_REPOSITORY_HELM):$(IMAGE_TAG) + + output1=$(curl -s https://$(MCR_REGISTRY)/v2$(MCR_REPOSITORY)/tags/list) + output2=$(curl -s https://$(MCR_REGISTRY)/v2$(MCR_REPOSITORY_HELM)/tags/list) + if (echo $output1 | grep $(IMAGE_TAG_WINDOWS)) && (echo $output2 | grep $(IMAGE_TAG)) + then + echo "Images and chart are published to mcr" + exit 0 + fi + done + echo "Images and chart are not published to mcr within 5 minutes" + exit 1 + displayName: "Check images are pushed to dev MCR" + + - bash: | + helm pull oci://$(MCR_REGISTRY)$(MCR_REPOSITORY_HELM) --version $(HELM_SEMVER) + workingDirectory: $(Build.StagingDirectory) + displayName: "Pull helm chart from dev MCR" + + - bash: | + export AKS_REGION="eastus" + export AKS_RESOURCE_ID="/subscriptions/9b96ebbd-c57a-42d1-bbe9-b69296e4c7fb/resourceGroups/ci-dev-aks-mac-eus-rg/providers/Microsoft.ContainerService/managedClusters/ci-dev-aks-mac-eus" + export ARC_EXTENSION="false" + envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/Chart-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/Chart.yaml && envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values.yaml + ls $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon + cd $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon + helm dependency update + displayName: "Build: substitute chart version for 3p in Chart.yaml and values.yaml" + + - task: HelmDeploy@0 + displayName: "Deploy: ci-dev-aks-mac-eus cluster" + inputs: + connectionType: 'Azure Resource Manager' + azureSubscription: 'ContainerInsights_Build_Subscription(9b96ebbd-c57a-42d1-bbe9-b69296e4c7fb)' + azureResourceGroup: 'ci-dev-aks-mac-eus-rg' + kubernetesCluster: 'ci-dev-aks-mac-eus' + namespace: 'default' + command: 'upgrade' + chartType: 'FilePath' + chartPath: '$(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/' + releaseName: 'ama-metrics' + waitForExecution: false + arguments: --dependency-update --values $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values.yaml From 878d0b944877908956fff529371b1520f0d30839 Mon Sep 17 00:00:00 2001 From: Rashmi Chandrashekar Date: Mon, 14 Aug 2023 15:24:37 -0700 Subject: [PATCH 013/242] adding sample pod monitor for reference app --- .../pod-monitor-reference-app.yaml | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 otelcollector/deploy/example-custom-resources/pod-monitor-reference-app.yaml diff --git a/otelcollector/deploy/example-custom-resources/pod-monitor-reference-app.yaml b/otelcollector/deploy/example-custom-resources/pod-monitor-reference-app.yaml new file mode 100644 index 000000000..b17567a40 --- /dev/null +++ b/otelcollector/deploy/example-custom-resources/pod-monitor-reference-app.yaml @@ -0,0 +1,23 @@ +apiVersion: azmonitoring.coreos.com/v1 +kind: PodMonitor +metadata: + name: prometheus-reference-app-job +spec: + labelLimit: 63 + labelNameLengthLimit: 511 + labelValueLengthLimit: 1023 + selector: + matchLabels: + app: prometheus-reference-app + podMetricsEndpoints: + - relabelings: + - sourceLabels: [__meta_kubernetes_pod_label_app] + action: keep + regex: "prometheus-reference-app" + - sourceLabels: [__meta_kubernetes_pod_node_name] + action: replace + regex: ('$$NODE_NAME$$') + targetLabel: instance + + + From ba588b5b080d7b2dd08145af3703729dd881c5b5 Mon Sep 17 00:00:00 2001 From: Rashmi Chandrashekar Date: Mon, 14 Aug 2023 15:43:47 -0700 Subject: [PATCH 014/242] testing out trivy --- .pipelines/azure-pipeline-build.yml | 1137 ++++++++++++++------------- 1 file changed, 569 insertions(+), 568 deletions(-) diff --git a/.pipelines/azure-pipeline-build.yml b/.pipelines/azure-pipeline-build.yml index 9f92c8aba..5fd5203b3 100644 --- a/.pipelines/azure-pipeline-build.yml +++ b/.pipelines/azure-pipeline-build.yml @@ -139,198 +139,198 @@ jobs: pathToPublish: '$(Build.ArtifactStagingDirectory)' artifactName: drop -- job: Linux - displayName: Build linux image - pool: - name: Azure-Pipelines-CI-Test-EO - dependsOn: common - variables: - LINUX_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.LINUX_FULL_IMAGE_NAME'] ] - # This is necessary because of: https://github.com/moby/moby/issues/37965 - DOCKER_BUILDKIT: 1 - steps: - - checkout: self - submodules: true - - - task: CodeQL3000Init@0 - displayName: 'SDL: init codeql' - condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) - - - task: GoTool@0 - displayName: "Build: specify golang version" - inputs: - version: '1.19' - - - bash: | - sudo apt-get install build-essential -y - make - condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) - workingDirectory: $(Build.SourcesDirectory)/otelcollector/opentelemetry-collector-builder/ - displayName: "SDL: build otelcollector, promconfigvalidator, targetallocator, and fluent-bit plugin for scanning" - - - task: BinSkim@4 - displayName: 'SDL: run binskim' - condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) - inputs: - InputType: 'CommandLine' - arguments: 'analyze --rich-return-code $(Build.SourcesDirectory)/otelcollector/opentelemetry-collector-builder/otelcollector $(Build.SourcesDirectory)/otelcollector/prom-config-validator-builder/promconfigvalidator $(Build.SourcesDirectory)/otelcollector/opentelemetry-operator/cmd/otel-allocator/targetallocator $(Build.SourcesDirectory)/otelcollector/fluent-bit/src/out_appinsights.so' - - - task: Gosec@1 - displayName: 'SDL: run gosec' - condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) - inputs: - targetPattern: 'gosecPattern' - targetGosecPattern: '$(Build.SourcesDirectory)/otelcollector' - - - bash: | - wget https://github.com/microsoft/DevSkim/releases/download/v0.6.9/DevSkim_linux_0.6.9.zip - unzip DevSkim_linux_0.6.9.zip - chmod 775 DevSkim_linux_0.6.9/devskim - ./DevSkim_linux_0.6.9/devskim analyze $(Build.SourcesDirectory)/otelcollector --ignore-globs **/deploy/dashboard/**,**/react/static/** --severity critical,important - displayName: 'SDL: run devskim' - condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) - workingDirectory: $(Build.SourcesDirectory) - - - bash: | - sudo gem install brakeman -v 5.4.1 - brakeman $(Build.SourcesDirectory)/otelcollector/configmapparser --force - displayName: 'SDL: run brakeman' - condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) - - - bash: | - mkdir -p $(Build.ArtifactStagingDirectory)/linux - - # Necessary due to necessary due to https://stackoverflow.com/questions/60080264/docker-cannot-build-multi-platform-images-with-docker-buildx - sudo apt-get update && sudo apt-get -y install qemu binfmt-support qemu-user-static - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - - docker buildx create --name dockerbuilder - docker buildx use dockerbuilder - docker login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) - if [ "$(Build.Reason)" != "PullRequest" ]; then - docker buildx build . --platform=linux/amd64,linux/arm64 --file ./build/linux/Dockerfile -t $(LINUX_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/metadata.json --push - docker pull $(LINUX_FULL_IMAGE_NAME) - else - - # Build multiarch image to make sure there are no issues - docker buildx build . --platform=linux/amd64,linux/arm64 --file ./build/linux/Dockerfile -t $(LINUX_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/metadata.json - - # Load in amd64 image to run vulnerability scan - docker buildx build . --file ./build/linux/Dockerfile -t $(LINUX_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/metadata.json - fi - workingDirectory: $(Build.SourcesDirectory)/otelcollector/ - displayName: "Build: build and push image to dev ACR" - - - bash: | - curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin - trivy image --ignore-unfixed --no-progress --severity HIGH,CRITICAL,MEDIUM --exit-code 1 $(LINUX_FULL_IMAGE_NAME) - trivy image --ignore-unfixed --no-progress --severity HIGH,CRITICAL,MEDIUM --exit-code 1 $(KUBE_STATE_METRICS_IMAGE) - trivy image --ignore-unfixed --no-progress --severity HIGH,CRITICAL,MEDIUM --exit-code 1 $(NODE_EXPORTER_IMAGE) - workingDirectory: $(Build.SourcesDirectory) - displayName: "Build: run trivy scan" - - - task: CodeQL3000Finalize@0 - displayName: 'SDL: run codeql' - condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) - - - task: ComponentGovernanceComponentDetection@0 - displayName: "SDL: run component governance" - condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) - inputs: - scanType: 'Register' - verbosity: 'Verbose' - dockerImagesToScan: '$(LINUX_FULL_IMAGE_NAME)' - alertWarningLevel: 'High' - - - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 - displayName: "Ev2: Generate image artifacts" - condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) - inputs: - BuildDropPath: '$(Build.ArtifactStagingDirectory)/linux' - DockerImagesToScan: '$(LINUX_FULL_IMAGE_NAME)' - - - task: SdtReport@2 - displayName: 'SDL: generate report' - condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) - inputs: - GdnExportAllTools: false - GdnExportGdnToolBinSkim: true - GdnExportGdnToolBinSkimSeverity: 'Note' - GdnExportGdnToolGosec: true - GdnExportGdnToolGosecSeverity: 'Note' - GdnExportGdnToolSemmle: true - GdnExportGdnToolSemmleSeverity: 'Note' - - - task: PublishSecurityAnalysisLogs@3 - displayName: 'SDL: publish report' - condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) - inputs: - ArtifactName: 'CodeAnalysisLogs' - ArtifactType: 'Container' - PublishProcessedResults: true - AllTools: true - ToolLogsNotFoundAction: 'Standard' - - - task: PublishBuildArtifacts@1 - displayName: "Ev2: Publish image artifacts" - condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) - inputs: - pathToPublish: '$(Build.ArtifactStagingDirectory)' - artifactName: drop - - - task: PostAnalysis@2 - displayName: 'SDL: Post-Build Analysis' - condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) - inputs: - GdnBreakAllTools: false - GdnBreakGdnToolBinSkim: true - GdnBreakGdnToolBinSkimSeverity: 'Warning' - GdnBreakGdnToolGosec: true - GdnBreakGdnToolGosecSeverity: 'Warning' - GdnBreakGdnToolSemmle: true - GdnBreakGdnToolSemmleSeverity: 'Warning' - -- job: TargetAllocator - displayName: Build target allocator image - pool: - name: Azure-Pipelines-CI-Test-EO - dependsOn: common - variables: - TARGET_ALLOCATOR_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.TARGET_ALLOCATOR_FULL_IMAGE_NAME'] ] - # This is necessary because of: https://github.com/moby/moby/issues/37965 - DOCKER_BUILDKIT: 1 - steps: - - checkout: self - submodules: recursive - persistCredentials: true - - bash: | - mkdir -p $(Build.ArtifactStagingDirectory)/targetallocator - - # Necessary due to necessary due to https://stackoverflow.com/questions/60080264/docker-cannot-build-multi-platform-images-with-docker-buildx - sudo apt-get update && sudo apt-get -y install qemu binfmt-support qemu-user-static - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - - docker buildx create --name dockerbuilder - docker buildx use dockerbuilder - docker login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) - if [ "$(Build.Reason)" != "PullRequest" ]; then - docker buildx build . --platform=linux/amd64,linux/arm64 --file Dockerfile -t $(TARGET_ALLOCATOR_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/targetallocator/metadata.json --push - docker pull $(TARGET_ALLOCATOR_FULL_IMAGE_NAME) - else - - # Build multiarch image to make sure there are no issues - docker buildx build . --platform=linux/amd64,linux/arm64 --file Dockerfile -t $(TARGET_ALLOCATOR_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/targetallocator/metadata.json - - # Load in amd64 image to run vulnerability scan - docker buildx build . --file Dockerfile -t $(TARGET_ALLOCATOR_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/targetallocator/metadata.json - fi - workingDirectory: $(Build.SourcesDirectory)/otelcollector/opentelemetry-operator/cmd/otel-allocator - displayName: "Build: build and push target allocator image to dev ACR" - - bash: | - curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin - trivy image --ignore-unfixed --no-progress --severity HIGH,CRITICAL,MEDIUM --exit-code 1 $(TARGET_ALLOCATOR_FULL_IMAGE_NAME) - workingDirectory: $(Build.SourcesDirectory) - displayName: "Build: run trivy scan" +# - job: Linux +# displayName: Build linux image +# pool: +# name: Azure-Pipelines-CI-Test-EO +# dependsOn: common +# variables: +# LINUX_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.LINUX_FULL_IMAGE_NAME'] ] +# # This is necessary because of: https://github.com/moby/moby/issues/37965 +# DOCKER_BUILDKIT: 1 +# steps: +# - checkout: self +# submodules: true + +# - task: CodeQL3000Init@0 +# displayName: 'SDL: init codeql' +# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + +# - task: GoTool@0 +# displayName: "Build: specify golang version" +# inputs: +# version: '1.19' + +# - bash: | +# sudo apt-get install build-essential -y +# make +# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) +# workingDirectory: $(Build.SourcesDirectory)/otelcollector/opentelemetry-collector-builder/ +# displayName: "SDL: build otelcollector, promconfigvalidator, targetallocator, and fluent-bit plugin for scanning" + +# - task: BinSkim@4 +# displayName: 'SDL: run binskim' +# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) +# inputs: +# InputType: 'CommandLine' +# arguments: 'analyze --rich-return-code $(Build.SourcesDirectory)/otelcollector/opentelemetry-collector-builder/otelcollector $(Build.SourcesDirectory)/otelcollector/prom-config-validator-builder/promconfigvalidator $(Build.SourcesDirectory)/otelcollector/opentelemetry-operator/cmd/otel-allocator/targetallocator $(Build.SourcesDirectory)/otelcollector/fluent-bit/src/out_appinsights.so' + +# - task: Gosec@1 +# displayName: 'SDL: run gosec' +# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) +# inputs: +# targetPattern: 'gosecPattern' +# targetGosecPattern: '$(Build.SourcesDirectory)/otelcollector' + +# - bash: | +# wget https://github.com/microsoft/DevSkim/releases/download/v0.6.9/DevSkim_linux_0.6.9.zip +# unzip DevSkim_linux_0.6.9.zip +# chmod 775 DevSkim_linux_0.6.9/devskim +# ./DevSkim_linux_0.6.9/devskim analyze $(Build.SourcesDirectory)/otelcollector --ignore-globs **/deploy/dashboard/**,**/react/static/** --severity critical,important +# displayName: 'SDL: run devskim' +# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) +# workingDirectory: $(Build.SourcesDirectory) + +# - bash: | +# sudo gem install brakeman -v 5.4.1 +# brakeman $(Build.SourcesDirectory)/otelcollector/configmapparser --force +# displayName: 'SDL: run brakeman' +# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + +# - bash: | +# mkdir -p $(Build.ArtifactStagingDirectory)/linux + +# # Necessary due to necessary due to https://stackoverflow.com/questions/60080264/docker-cannot-build-multi-platform-images-with-docker-buildx +# sudo apt-get update && sudo apt-get -y install qemu binfmt-support qemu-user-static +# docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + +# docker buildx create --name dockerbuilder +# docker buildx use dockerbuilder +# docker login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) +# if [ "$(Build.Reason)" != "PullRequest" ]; then +# docker buildx build . --platform=linux/amd64,linux/arm64 --file ./build/linux/Dockerfile -t $(LINUX_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/metadata.json --push +# docker pull $(LINUX_FULL_IMAGE_NAME) +# else + +# # Build multiarch image to make sure there are no issues +# docker buildx build . --platform=linux/amd64,linux/arm64 --file ./build/linux/Dockerfile -t $(LINUX_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/metadata.json + +# # Load in amd64 image to run vulnerability scan +# docker buildx build . --file ./build/linux/Dockerfile -t $(LINUX_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/metadata.json +# fi +# workingDirectory: $(Build.SourcesDirectory)/otelcollector/ +# displayName: "Build: build and push image to dev ACR" + +# - bash: | +# curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin +# trivy image --ignore-unfixed --no-progress --severity HIGH,CRITICAL,MEDIUM --exit-code 1 $(LINUX_FULL_IMAGE_NAME) +# trivy image --ignore-unfixed --no-progress --severity HIGH,CRITICAL,MEDIUM --exit-code 1 $(KUBE_STATE_METRICS_IMAGE) +# trivy image --ignore-unfixed --no-progress --severity HIGH,CRITICAL,MEDIUM --exit-code 1 $(NODE_EXPORTER_IMAGE) +# workingDirectory: $(Build.SourcesDirectory) +# displayName: "Build: run trivy scan" + +# - task: CodeQL3000Finalize@0 +# displayName: 'SDL: run codeql' +# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + +# - task: ComponentGovernanceComponentDetection@0 +# displayName: "SDL: run component governance" +# condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) +# inputs: +# scanType: 'Register' +# verbosity: 'Verbose' +# dockerImagesToScan: '$(LINUX_FULL_IMAGE_NAME)' +# alertWarningLevel: 'High' + +# - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 +# displayName: "Ev2: Generate image artifacts" +# condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) +# inputs: +# BuildDropPath: '$(Build.ArtifactStagingDirectory)/linux' +# DockerImagesToScan: '$(LINUX_FULL_IMAGE_NAME)' + +# - task: SdtReport@2 +# displayName: 'SDL: generate report' +# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) +# inputs: +# GdnExportAllTools: false +# GdnExportGdnToolBinSkim: true +# GdnExportGdnToolBinSkimSeverity: 'Note' +# GdnExportGdnToolGosec: true +# GdnExportGdnToolGosecSeverity: 'Note' +# GdnExportGdnToolSemmle: true +# GdnExportGdnToolSemmleSeverity: 'Note' + +# - task: PublishSecurityAnalysisLogs@3 +# displayName: 'SDL: publish report' +# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) +# inputs: +# ArtifactName: 'CodeAnalysisLogs' +# ArtifactType: 'Container' +# PublishProcessedResults: true +# AllTools: true +# ToolLogsNotFoundAction: 'Standard' + +# - task: PublishBuildArtifacts@1 +# displayName: "Ev2: Publish image artifacts" +# condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) +# inputs: +# pathToPublish: '$(Build.ArtifactStagingDirectory)' +# artifactName: drop + +# - task: PostAnalysis@2 +# displayName: 'SDL: Post-Build Analysis' +# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) +# inputs: +# GdnBreakAllTools: false +# GdnBreakGdnToolBinSkim: true +# GdnBreakGdnToolBinSkimSeverity: 'Warning' +# GdnBreakGdnToolGosec: true +# GdnBreakGdnToolGosecSeverity: 'Warning' +# GdnBreakGdnToolSemmle: true +# GdnBreakGdnToolSemmleSeverity: 'Warning' + +# - job: TargetAllocator +# displayName: Build target allocator image +# pool: +# name: Azure-Pipelines-CI-Test-EO +# dependsOn: common +# variables: +# TARGET_ALLOCATOR_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.TARGET_ALLOCATOR_FULL_IMAGE_NAME'] ] +# # This is necessary because of: https://github.com/moby/moby/issues/37965 +# DOCKER_BUILDKIT: 1 +# steps: +# - checkout: self +# submodules: recursive +# persistCredentials: true +# - bash: | +# mkdir -p $(Build.ArtifactStagingDirectory)/targetallocator + +# # Necessary due to necessary due to https://stackoverflow.com/questions/60080264/docker-cannot-build-multi-platform-images-with-docker-buildx +# sudo apt-get update && sudo apt-get -y install qemu binfmt-support qemu-user-static +# docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + +# docker buildx create --name dockerbuilder +# docker buildx use dockerbuilder +# docker login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) +# if [ "$(Build.Reason)" != "PullRequest" ]; then +# docker buildx build . --platform=linux/amd64,linux/arm64 --file Dockerfile -t $(TARGET_ALLOCATOR_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/targetallocator/metadata.json --push +# docker pull $(TARGET_ALLOCATOR_FULL_IMAGE_NAME) +# else + +# # Build multiarch image to make sure there are no issues +# docker buildx build . --platform=linux/amd64,linux/arm64 --file Dockerfile -t $(TARGET_ALLOCATOR_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/targetallocator/metadata.json + +# # Load in amd64 image to run vulnerability scan +# docker buildx build . --file Dockerfile -t $(TARGET_ALLOCATOR_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/targetallocator/metadata.json +# fi +# workingDirectory: $(Build.SourcesDirectory)/otelcollector/opentelemetry-operator/cmd/otel-allocator +# displayName: "Build: build and push target allocator image to dev ACR" +# - bash: | +# curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin +# trivy image --ignore-unfixed --no-progress --severity HIGH,CRITICAL,MEDIUM --exit-code 1 $(TARGET_ALLOCATOR_FULL_IMAGE_NAME) +# workingDirectory: $(Build.SourcesDirectory) +# displayName: "Build: run trivy scan" - job: Linux_ConfigReader displayName: Build linux image for config reader @@ -418,6 +418,7 @@ jobs: - bash: | curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin trivy image --ignore-unfixed --no-progress --severity HIGH,CRITICAL,MEDIUM --exit-code 1 $(LINUX_CONFIG_READER_FULL_IMAGE_NAME) + trivy image --ignore-unfixed --no-progress --severity HIGH,CRITICAL,MEDIUM --exit-code 1 $(KUBE_STATE_METRICS_IMAGE) workingDirectory: $(Build.SourcesDirectory) displayName: "Build: run trivy scan" @@ -482,379 +483,379 @@ jobs: GdnBreakGdnToolSemmle: true GdnBreakGdnToolSemmleSeverity: 'Warning' -- job: Windows2019 - displayName: "Build windows 2019 image" - pool: - name: Azure-Pipelines-Windows-CI-Test-EO - dependsOn: - - Common - variables: - WINDOWS_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.WINDOWS_FULL_IMAGE_NAME'] ] - WINDOWS_2019_BASE_IMAGE_VERSION: $[ dependencies.common.outputs['setup.WINDOWS_2019_BASE_IMAGE_VERSION'] ] - steps: - - task: GoTool@0 - displayName: "Build: specify golang version" - inputs: - version: '1.19' - - - powershell: | - ./makefile_windows.ps1 - workingDirectory: $(Build.SourcesDirectory)/otelcollector/opentelemetry-collector-builder/ - displayName: "Build: build otelcollector, promconfigvalidator, and fluent-bit plugin" - - - powershell: | - docker build . --isolation=hyperv --file ./build/windows/Dockerfile -t $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2019_BASE_IMAGE_VERSION) --build-arg WINDOWS_VERSION=$(WINDOWS_2019_BASE_IMAGE_VERSION) - workingDirectory: $(Build.SourcesDirectory)/otelcollector/ - displayName: "Build: build WS2019 image" - - - powershell: | - docker login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) - docker push $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2019_BASE_IMAGE_VERSION) - displayName: "Build: push image to dev ACR" - - - task: ComponentGovernanceComponentDetection@0 - displayName: "SDL: run component governance" - condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) - inputs: - scanType: 'Register' - verbosity: 'Verbose' - dockerImagesToScan: '$(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2019_BASE_IMAGE_VERSION)' - -- job: Windows2022 - displayName: "Build windows 2022 image" - pool: - name: Azure-Pipelines-Windows-CI-Test-EO - dependsOn: - - Common - variables: - WINDOWS_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.WINDOWS_FULL_IMAGE_NAME'] ] - WINDOWS_2022_BASE_IMAGE_VERSION: $[ dependencies.common.outputs['setup.WINDOWS_2022_BASE_IMAGE_VERSION'] ] - steps: - - task: GoTool@0 - displayName: "Build: specify golang version" - inputs: - version: '1.19' - - - powershell: | - ./makefile_windows.ps1 - workingDirectory: $(Build.SourcesDirectory)/otelcollector/opentelemetry-collector-builder/ - displayName: "Build: build otelcollector, promconfigvalidator, and fluent-bit plugin" - - - powershell: | - docker build . --isolation=hyperv --file ./build/windows/Dockerfile -t $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2022_BASE_IMAGE_VERSION) --build-arg WINDOWS_VERSION=$(WINDOWS_2022_BASE_IMAGE_VERSION) - workingDirectory: $(Build.SourcesDirectory)/otelcollector/ - displayName: "Build: build WS2022 image" - - - powershell: | - docker login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) - docker push $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2022_BASE_IMAGE_VERSION) - displayName: "Build: push image to dev ACR" - condition: eq(variables.IS_PR, false) - - - task: ComponentGovernanceComponentDetection@0 - displayName: "SDL: run component governance" - condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) - inputs: - scanType: 'Register' - verbosity: 'Verbose' - dockerImagesToScan: '$(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2022_BASE_IMAGE_VERSION)' - alertWarningLevel: 'High' - -- job: WindowsMultiArch - displayName: "Build windows multi-arch image" - pool: - name: Azure-Pipelines-Windows-CI-Test-EO - dependsOn: - - Common - - Windows2019 - - Windows2022 - variables: - WINDOWS_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.WINDOWS_FULL_IMAGE_NAME'] ] - WINDOWS_2019_BASE_IMAGE_VERSION: $[ dependencies.common.outputs['setup.WINDOWS_2019_BASE_IMAGE_VERSION'] ] - WINDOWS_2022_BASE_IMAGE_VERSION: $[ dependencies.common.outputs['setup.WINDOWS_2022_BASE_IMAGE_VERSION'] ] - steps: - - task: GoTool@0 - displayName: "Build: specify golang version" - inputs: - version: '1.19' - - - powershell: | - New-Item -Path "$(Build.ArtifactStagingDirectory)" -Name "windows" -ItemType "directory" - @{"image.name"="$(WINDOWS_FULL_IMAGE_NAME)"} | ConvertTo-Json -Compress | Out-File -Encoding ascii $(Build.ArtifactStagingDirectory)/windows/metadata.json - docker login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) - docker manifest create $(WINDOWS_FULL_IMAGE_NAME) $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2019_BASE_IMAGE_VERSION) $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2022_BASE_IMAGE_VERSION) - docker manifest push $(WINDOWS_FULL_IMAGE_NAME) - workingDirectory: $(Build.SourcesDirectory)/otelcollector/ - displayName: "Build: Triggering manigest for multi-arc docker image" - - - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 - condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) - displayName: "Ev2: generate image artifacts" - inputs: - BuildDropPath: '$(Build.ArtifactStagingDirectory)/windows' - DockerImagesToScan: '$(WINDOWS_FULL_IMAGE_NAME)' - - - task: PublishBuildArtifacts@1 - condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) - displayName: "Ev2: publish image artifacts" - inputs: - pathToPublish: '$(Build.ArtifactStagingDirectory)' - artifactName: drop - -- job: Chart - displayName: "Package 1P helm chart" - pool: - name: Azure-Pipelines-CI-Test-EO - dependsOn: - - Common - - Linux - - WindowsMultiArch - variables: - HELM_CHART_NAME: $[ dependencies.common.outputs['setup.HELM_CHART_NAME'] ] - HELM_SEMVER: $[ dependencies.common.outputs['setup.SEMVER'] ] - IMAGE_TAG: $[ dependencies.common.outputs['setup.SEMVER'] ] - IMAGE_TAG_WINDOWS: $[ dependencies.common.outputs['setup.WINDOWS_IMAGE_TAG'] ] - HELM_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.HELM_FULL_IMAGE_NAME'] ] - steps: - - task: HelmInstaller@1 - displayName: 'Build: install Helm version' - inputs: - helmVersionToInstall: latest - - - bash: | - envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/chart/prometheus-collector/Chart-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/chart/prometheus-collector/Chart.yaml && envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/chart/prometheus-collector/values-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/chart/prometheus-collector/values.yaml - helm version - displayName: "Build: substitute chart version in Chart.yaml and values.yaml" - - - bash: | - helm dep update - workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/chart/prometheus-collector/ - displayName: "Build: update helm dependencies" - - - bash: | - helm package ./prometheus-collector/ - workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/chart/ - displayName: "Build: package helm chart" - - - bash: | - helm registry login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) - helm push $(HELM_CHART_NAME)-$(HELM_SEMVER).tgz oci://$(ACR_REGISTRY)$(ACR_REPOSITORY_HELM) - mkdir -p $(Build.ArtifactStagingDirectory)/chart - echo {\"image.name\":\"$(HELM_FULL_IMAGE_NAME)\"} > $(Build.ArtifactStagingDirectory)/chart/metadata.json - workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/chart/ - displayName: "Build: push helm chart to dev ACR" - condition: eq(variables.IS_PR, false) - -- job: ARC_Chart - displayName: "Package Arc helm chart" - pool: - name: Azure-Pipelines-CI-Test-EO - dependsOn: - - Common - - Linux - variables: - HELM_SEMVER: $[ dependencies.common.outputs['setup.SEMVER'] ] - IMAGE_TAG: $[ dependencies.common.outputs['setup.SEMVER'] ] - IMAGE_TAG_WINDOWS: $[ dependencies.common.outputs['setup.WINDOWS_IMAGE_TAG'] ] - ARC_HELM_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.ARC_HELM_FULL_IMAGE_NAME'] ] - ARC_EXTENSION: true - steps: - - task: HelmInstaller@1 - displayName: 'Build: install Helm version' - inputs: - helmVersionToInstall: latest - - - bash: | - export HELM_CHART_NAME=$ARC_HELM_CHART_NAME - envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/Chart-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/Chart.yaml && envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values.yaml - helm version - displayName: "Build: substitute chart version in Chart.yaml and values.yaml" - - - bash: | - helm dep update - workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon - displayName: "Build: update helm dependencies" - - - bash: | - helm package ./azure-monitor-metrics-addon/ - workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/ - displayName: "Build: package helm chart" - - - bash: | - helm registry login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) - helm push $(ARC_HELM_CHART_NAME)-$(HELM_SEMVER).tgz oci://$(ACR_REGISTRY)$(ACR_REPOSITORY_HELM) - mkdir -p $(Build.ArtifactStagingDirectory)/arc-chart - echo {\"image.name\":\"$(ARC_HELM_FULL_IMAGE_NAME)\"} > $(Build.ArtifactStagingDirectory)/arc-chart/metadata.json - workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/ - displayName: "Build: push helm chart to dev ACR" - condition: eq(variables.IS_PR, false) - - - task: PublishBuildArtifacts@1 - displayName: "Ev2: publish helm chart artifacts" - condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) - inputs: - pathToPublish: '$(Build.ArtifactStagingDirectory)' - artifactName: drop - -- job: DeployARC - displayName: "Deploy to ARC dev cluster" - condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) - pool: - name: Azure-Pipelines-CI-Test-EO - dependsOn: - - Common - - ARC_Chart - variables: - HELM_SEMVER: $[ dependencies.common.outputs['setup.SEMVER'] ] - steps: - - bash: | - # Create JSON request body - cat < "request.json" - { - "artifactEndpoints": [ - { - "Regions": [ - "westcentralus" - ], - "Releasetrains": [ - "pipeline" - ], - "FullPathToHelmChart": "https://mcr.microsoft.com/azuremonitor/containerinsights/cidev/ama-metrics-arc", - "ExtensionUpdateFrequencyInMinutes": 5, - "IsCustomerHidden": true, - "ReadyforRollout": true, - "RollbackVersion": null, - "PackageConfigName": "Microsoft.AzureMonitor.Containers.Metrics-Prom041823" - } - ] - } - EOF - - # Send Request - SUBSCRIPTION="b9842c7c-1a38-4385-8f39-a51314758bcf" - RESOURCE_AUDIENCE="c699bf69-fb1d-4eaf-999b-99e6b2ae4d85" - SPN_CLIENT_ID="9a4c55e9-576a-450a-88bd-53bd634db38d" - SPN_TENANT_ID="72f988bf-86f1-41af-91ab-2d7cd011db47" - METHOD="PUT" - - echo "Request parameter preparation, SUBSCRIPTION is $SUBSCRIPTION, RESOURCE_AUDIENCE is $RESOURCE_AUDIENCE, CHART_VERSION is $HELM_SEMVER, SPN_CLIENT_ID is $SPN_CLIENT_ID, SPN_TENANT_ID is $SPN_TENANT_ID" - - # MSI is not supported - echo "Login cli using spn" - az login --service-principal --username=$SPN_CLIENT_ID --password=$(ARC_SPN_SECRET) --tenant=$SPN_TENANT_ID - if [ $? -eq 0 ]; then - echo "Logged in successfully with spn" - else - echo "-e error failed to login to az with managed identity credentials" - exit 1 - fi - - ACCESS_TOKEN=$(az account get-access-token --resource $RESOURCE_AUDIENCE --query accessToken -o json) - if [ $? -eq 0 ]; then - echo "get access token from resource:$RESOURCE_AUDIENCE successfully." - else - echo "-e error get access token from resource:$RESOURCE_AUDIENCE failed." - exit 1 - fi - ACCESS_TOKEN=$(echo $ACCESS_TOKEN | tr -d '"' | tr -d '"\r\n') - - ARC_API_URL="https://eastus2euap.dp.kubernetesconfiguration.azure.com" - EXTENSION_NAME="microsoft.azuremonitor.containers.metrics" - API_VERSION="2021-05-01" - - echo "start send request" - az rest --method $METHOD --headers "{\"Authorization\": \"Bearer $ACCESS_TOKEN\", \"Content-Type\": \"application/json\"}" --body @request.json --uri $ARC_API_URL/subscriptions/$SUBSCRIPTION/extensionTypeRegistrations/$EXTENSION_NAME/versions/$HELM_SEMVER?api-version=$API_VERSION - if [ $? -eq 0 ]; then - echo "arc extension registered successfully" - else - echo "-e error failed to register arc extension" - exit 1 - fi - displayName: "Deploy: Release to dev release train" - - task: AzureCLI@2 - displayName: "Deploy: ci-dev-arc-wcus cluster" - inputs: - azureSubscription: 'ContainerInsights_Build_Subscription(9b96ebbd-c57a-42d1-bbe9-b69296e4c7fb)' - scriptType: 'bash' - scriptLocation: 'inlineScript' - inlineScript: | - az config set extension.use_dynamic_install=yes_without_prompt - az k8s-extension update --name azuremonitor-metrics --resource-group ci-dev-arc-wcus --cluster-name ci-dev-arc-wcus --cluster-type connectedClusters --version $HELM_SEMVER --release-train pipeline - -- job: Deploy - displayName: "Deploy to dev clusters" - pool: - name: Azure-Pipelines-CI-Test-EO - condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) - dependsOn: - - Common - - Chart - variables: - HELM_CHART_NAME: $[ dependencies.common.outputs['setup.HELM_CHART_NAME'] ] - HELM_SEMVER: $[ dependencies.common.outputs['setup.SEMVER'] ] - IMAGE_TAG: $[ dependencies.common.outputs['setup.SEMVER'] ] - IMAGE_TAG_WINDOWS: $[ dependencies.common.outputs['setup.WINDOWS_IMAGE_TAG'] ] - HELM_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.HELM_FULL_IMAGE_NAME'] ] - steps: - - checkout: self - submodules: true - persistCredentials: true - - - bash: | - git config --global user.name "AzureDevOps Agent" - git tag "v$(HELM_SEMVER)" - git push origin "v$(HELM_SEMVER)" - displayName: Tag commit with semver - - - task: HelmInstaller@1 - displayName: Install Helm version - inputs: - helmVersionToInstall: latest - - bash: | - for i in 1 2 3 4 5 6 7 8 9 10 - do - sleep 30 - echo $(MCR_REGISTRY)$(MCR_REPOSITORY):$(IMAGE_TAG_WINDOWS) - echo $(MCR_REGISTRY)$(MCR_REPOSITORY_HELM):$(IMAGE_TAG) - - output1=$(curl -s https://$(MCR_REGISTRY)/v2$(MCR_REPOSITORY)/tags/list) - output2=$(curl -s https://$(MCR_REGISTRY)/v2$(MCR_REPOSITORY_HELM)/tags/list) - if (echo $output1 | grep $(IMAGE_TAG_WINDOWS)) && (echo $output2 | grep $(IMAGE_TAG)) - then - echo "Images and chart are published to mcr" - exit 0 - fi - done - echo "Images and chart are not published to mcr within 5 minutes" - exit 1 - displayName: "Check images are pushed to dev MCR" - - - bash: | - helm pull oci://$(MCR_REGISTRY)$(MCR_REPOSITORY_HELM) --version $(HELM_SEMVER) - workingDirectory: $(Build.StagingDirectory) - displayName: "Pull helm chart from dev MCR" - - - bash: | - export AKS_REGION="eastus" - export AKS_RESOURCE_ID="/subscriptions/9b96ebbd-c57a-42d1-bbe9-b69296e4c7fb/resourceGroups/ci-dev-aks-mac-eus-rg/providers/Microsoft.ContainerService/managedClusters/ci-dev-aks-mac-eus" - export ARC_EXTENSION="false" - envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/Chart-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/Chart.yaml && envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values.yaml - ls $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon - cd $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon - helm dependency update - displayName: "Build: substitute chart version for 3p in Chart.yaml and values.yaml" - - - task: HelmDeploy@0 - displayName: "Deploy: ci-dev-aks-mac-eus cluster" - inputs: - connectionType: 'Azure Resource Manager' - azureSubscription: 'ContainerInsights_Build_Subscription(9b96ebbd-c57a-42d1-bbe9-b69296e4c7fb)' - azureResourceGroup: 'ci-dev-aks-mac-eus-rg' - kubernetesCluster: 'ci-dev-aks-mac-eus' - namespace: 'default' - command: 'upgrade' - chartType: 'FilePath' - chartPath: '$(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/' - releaseName: 'ama-metrics' - waitForExecution: false - arguments: --dependency-update --values $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values.yaml +# - job: Windows2019 +# displayName: "Build windows 2019 image" +# pool: +# name: Azure-Pipelines-Windows-CI-Test-EO +# dependsOn: +# - Common +# variables: +# WINDOWS_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.WINDOWS_FULL_IMAGE_NAME'] ] +# WINDOWS_2019_BASE_IMAGE_VERSION: $[ dependencies.common.outputs['setup.WINDOWS_2019_BASE_IMAGE_VERSION'] ] +# steps: +# - task: GoTool@0 +# displayName: "Build: specify golang version" +# inputs: +# version: '1.19' + +# - powershell: | +# ./makefile_windows.ps1 +# workingDirectory: $(Build.SourcesDirectory)/otelcollector/opentelemetry-collector-builder/ +# displayName: "Build: build otelcollector, promconfigvalidator, and fluent-bit plugin" + +# - powershell: | +# docker build . --isolation=hyperv --file ./build/windows/Dockerfile -t $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2019_BASE_IMAGE_VERSION) --build-arg WINDOWS_VERSION=$(WINDOWS_2019_BASE_IMAGE_VERSION) +# workingDirectory: $(Build.SourcesDirectory)/otelcollector/ +# displayName: "Build: build WS2019 image" + +# - powershell: | +# docker login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) +# docker push $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2019_BASE_IMAGE_VERSION) +# displayName: "Build: push image to dev ACR" + +# - task: ComponentGovernanceComponentDetection@0 +# displayName: "SDL: run component governance" +# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) +# inputs: +# scanType: 'Register' +# verbosity: 'Verbose' +# dockerImagesToScan: '$(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2019_BASE_IMAGE_VERSION)' + +# - job: Windows2022 +# displayName: "Build windows 2022 image" +# pool: +# name: Azure-Pipelines-Windows-CI-Test-EO +# dependsOn: +# - Common +# variables: +# WINDOWS_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.WINDOWS_FULL_IMAGE_NAME'] ] +# WINDOWS_2022_BASE_IMAGE_VERSION: $[ dependencies.common.outputs['setup.WINDOWS_2022_BASE_IMAGE_VERSION'] ] +# steps: +# - task: GoTool@0 +# displayName: "Build: specify golang version" +# inputs: +# version: '1.19' + +# - powershell: | +# ./makefile_windows.ps1 +# workingDirectory: $(Build.SourcesDirectory)/otelcollector/opentelemetry-collector-builder/ +# displayName: "Build: build otelcollector, promconfigvalidator, and fluent-bit plugin" + +# - powershell: | +# docker build . --isolation=hyperv --file ./build/windows/Dockerfile -t $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2022_BASE_IMAGE_VERSION) --build-arg WINDOWS_VERSION=$(WINDOWS_2022_BASE_IMAGE_VERSION) +# workingDirectory: $(Build.SourcesDirectory)/otelcollector/ +# displayName: "Build: build WS2022 image" + +# - powershell: | +# docker login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) +# docker push $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2022_BASE_IMAGE_VERSION) +# displayName: "Build: push image to dev ACR" +# condition: eq(variables.IS_PR, false) + +# - task: ComponentGovernanceComponentDetection@0 +# displayName: "SDL: run component governance" +# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) +# inputs: +# scanType: 'Register' +# verbosity: 'Verbose' +# dockerImagesToScan: '$(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2022_BASE_IMAGE_VERSION)' +# alertWarningLevel: 'High' + +# - job: WindowsMultiArch +# displayName: "Build windows multi-arch image" +# pool: +# name: Azure-Pipelines-Windows-CI-Test-EO +# dependsOn: +# - Common +# - Windows2019 +# - Windows2022 +# variables: +# WINDOWS_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.WINDOWS_FULL_IMAGE_NAME'] ] +# WINDOWS_2019_BASE_IMAGE_VERSION: $[ dependencies.common.outputs['setup.WINDOWS_2019_BASE_IMAGE_VERSION'] ] +# WINDOWS_2022_BASE_IMAGE_VERSION: $[ dependencies.common.outputs['setup.WINDOWS_2022_BASE_IMAGE_VERSION'] ] +# steps: +# - task: GoTool@0 +# displayName: "Build: specify golang version" +# inputs: +# version: '1.19' + +# - powershell: | +# New-Item -Path "$(Build.ArtifactStagingDirectory)" -Name "windows" -ItemType "directory" +# @{"image.name"="$(WINDOWS_FULL_IMAGE_NAME)"} | ConvertTo-Json -Compress | Out-File -Encoding ascii $(Build.ArtifactStagingDirectory)/windows/metadata.json +# docker login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) +# docker manifest create $(WINDOWS_FULL_IMAGE_NAME) $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2019_BASE_IMAGE_VERSION) $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2022_BASE_IMAGE_VERSION) +# docker manifest push $(WINDOWS_FULL_IMAGE_NAME) +# workingDirectory: $(Build.SourcesDirectory)/otelcollector/ +# displayName: "Build: Triggering manigest for multi-arc docker image" + +# - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 +# condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) +# displayName: "Ev2: generate image artifacts" +# inputs: +# BuildDropPath: '$(Build.ArtifactStagingDirectory)/windows' +# DockerImagesToScan: '$(WINDOWS_FULL_IMAGE_NAME)' + +# - task: PublishBuildArtifacts@1 +# condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) +# displayName: "Ev2: publish image artifacts" +# inputs: +# pathToPublish: '$(Build.ArtifactStagingDirectory)' +# artifactName: drop + +# - job: Chart +# displayName: "Package 1P helm chart" +# pool: +# name: Azure-Pipelines-CI-Test-EO +# dependsOn: +# - Common +# - Linux +# - WindowsMultiArch +# variables: +# HELM_CHART_NAME: $[ dependencies.common.outputs['setup.HELM_CHART_NAME'] ] +# HELM_SEMVER: $[ dependencies.common.outputs['setup.SEMVER'] ] +# IMAGE_TAG: $[ dependencies.common.outputs['setup.SEMVER'] ] +# IMAGE_TAG_WINDOWS: $[ dependencies.common.outputs['setup.WINDOWS_IMAGE_TAG'] ] +# HELM_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.HELM_FULL_IMAGE_NAME'] ] +# steps: +# - task: HelmInstaller@1 +# displayName: 'Build: install Helm version' +# inputs: +# helmVersionToInstall: latest + +# - bash: | +# envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/chart/prometheus-collector/Chart-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/chart/prometheus-collector/Chart.yaml && envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/chart/prometheus-collector/values-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/chart/prometheus-collector/values.yaml +# helm version +# displayName: "Build: substitute chart version in Chart.yaml and values.yaml" + +# - bash: | +# helm dep update +# workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/chart/prometheus-collector/ +# displayName: "Build: update helm dependencies" + +# - bash: | +# helm package ./prometheus-collector/ +# workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/chart/ +# displayName: "Build: package helm chart" + +# - bash: | +# helm registry login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) +# helm push $(HELM_CHART_NAME)-$(HELM_SEMVER).tgz oci://$(ACR_REGISTRY)$(ACR_REPOSITORY_HELM) +# mkdir -p $(Build.ArtifactStagingDirectory)/chart +# echo {\"image.name\":\"$(HELM_FULL_IMAGE_NAME)\"} > $(Build.ArtifactStagingDirectory)/chart/metadata.json +# workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/chart/ +# displayName: "Build: push helm chart to dev ACR" +# condition: eq(variables.IS_PR, false) + +# - job: ARC_Chart +# displayName: "Package Arc helm chart" +# pool: +# name: Azure-Pipelines-CI-Test-EO +# dependsOn: +# - Common +# - Linux +# variables: +# HELM_SEMVER: $[ dependencies.common.outputs['setup.SEMVER'] ] +# IMAGE_TAG: $[ dependencies.common.outputs['setup.SEMVER'] ] +# IMAGE_TAG_WINDOWS: $[ dependencies.common.outputs['setup.WINDOWS_IMAGE_TAG'] ] +# ARC_HELM_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.ARC_HELM_FULL_IMAGE_NAME'] ] +# ARC_EXTENSION: true +# steps: +# - task: HelmInstaller@1 +# displayName: 'Build: install Helm version' +# inputs: +# helmVersionToInstall: latest + +# - bash: | +# export HELM_CHART_NAME=$ARC_HELM_CHART_NAME +# envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/Chart-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/Chart.yaml && envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values.yaml +# helm version +# displayName: "Build: substitute chart version in Chart.yaml and values.yaml" + +# - bash: | +# helm dep update +# workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon +# displayName: "Build: update helm dependencies" + +# - bash: | +# helm package ./azure-monitor-metrics-addon/ +# workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/ +# displayName: "Build: package helm chart" + +# - bash: | +# helm registry login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) +# helm push $(ARC_HELM_CHART_NAME)-$(HELM_SEMVER).tgz oci://$(ACR_REGISTRY)$(ACR_REPOSITORY_HELM) +# mkdir -p $(Build.ArtifactStagingDirectory)/arc-chart +# echo {\"image.name\":\"$(ARC_HELM_FULL_IMAGE_NAME)\"} > $(Build.ArtifactStagingDirectory)/arc-chart/metadata.json +# workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/ +# displayName: "Build: push helm chart to dev ACR" +# condition: eq(variables.IS_PR, false) + +# - task: PublishBuildArtifacts@1 +# displayName: "Ev2: publish helm chart artifacts" +# condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) +# inputs: +# pathToPublish: '$(Build.ArtifactStagingDirectory)' +# artifactName: drop + +# - job: DeployARC +# displayName: "Deploy to ARC dev cluster" +# condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) +# pool: +# name: Azure-Pipelines-CI-Test-EO +# dependsOn: +# - Common +# - ARC_Chart +# variables: +# HELM_SEMVER: $[ dependencies.common.outputs['setup.SEMVER'] ] +# steps: +# - bash: | +# # Create JSON request body +# cat < "request.json" +# { +# "artifactEndpoints": [ +# { +# "Regions": [ +# "westcentralus" +# ], +# "Releasetrains": [ +# "pipeline" +# ], +# "FullPathToHelmChart": "https://mcr.microsoft.com/azuremonitor/containerinsights/cidev/ama-metrics-arc", +# "ExtensionUpdateFrequencyInMinutes": 5, +# "IsCustomerHidden": true, +# "ReadyforRollout": true, +# "RollbackVersion": null, +# "PackageConfigName": "Microsoft.AzureMonitor.Containers.Metrics-Prom041823" +# } +# ] +# } +# EOF + +# # Send Request +# SUBSCRIPTION="b9842c7c-1a38-4385-8f39-a51314758bcf" +# RESOURCE_AUDIENCE="c699bf69-fb1d-4eaf-999b-99e6b2ae4d85" +# SPN_CLIENT_ID="9a4c55e9-576a-450a-88bd-53bd634db38d" +# SPN_TENANT_ID="72f988bf-86f1-41af-91ab-2d7cd011db47" +# METHOD="PUT" + +# echo "Request parameter preparation, SUBSCRIPTION is $SUBSCRIPTION, RESOURCE_AUDIENCE is $RESOURCE_AUDIENCE, CHART_VERSION is $HELM_SEMVER, SPN_CLIENT_ID is $SPN_CLIENT_ID, SPN_TENANT_ID is $SPN_TENANT_ID" + +# # MSI is not supported +# echo "Login cli using spn" +# az login --service-principal --username=$SPN_CLIENT_ID --password=$(ARC_SPN_SECRET) --tenant=$SPN_TENANT_ID +# if [ $? -eq 0 ]; then +# echo "Logged in successfully with spn" +# else +# echo "-e error failed to login to az with managed identity credentials" +# exit 1 +# fi + +# ACCESS_TOKEN=$(az account get-access-token --resource $RESOURCE_AUDIENCE --query accessToken -o json) +# if [ $? -eq 0 ]; then +# echo "get access token from resource:$RESOURCE_AUDIENCE successfully." +# else +# echo "-e error get access token from resource:$RESOURCE_AUDIENCE failed." +# exit 1 +# fi +# ACCESS_TOKEN=$(echo $ACCESS_TOKEN | tr -d '"' | tr -d '"\r\n') + +# ARC_API_URL="https://eastus2euap.dp.kubernetesconfiguration.azure.com" +# EXTENSION_NAME="microsoft.azuremonitor.containers.metrics" +# API_VERSION="2021-05-01" + +# echo "start send request" +# az rest --method $METHOD --headers "{\"Authorization\": \"Bearer $ACCESS_TOKEN\", \"Content-Type\": \"application/json\"}" --body @request.json --uri $ARC_API_URL/subscriptions/$SUBSCRIPTION/extensionTypeRegistrations/$EXTENSION_NAME/versions/$HELM_SEMVER?api-version=$API_VERSION +# if [ $? -eq 0 ]; then +# echo "arc extension registered successfully" +# else +# echo "-e error failed to register arc extension" +# exit 1 +# fi +# displayName: "Deploy: Release to dev release train" +# - task: AzureCLI@2 +# displayName: "Deploy: ci-dev-arc-wcus cluster" +# inputs: +# azureSubscription: 'ContainerInsights_Build_Subscription(9b96ebbd-c57a-42d1-bbe9-b69296e4c7fb)' +# scriptType: 'bash' +# scriptLocation: 'inlineScript' +# inlineScript: | +# az config set extension.use_dynamic_install=yes_without_prompt +# az k8s-extension update --name azuremonitor-metrics --resource-group ci-dev-arc-wcus --cluster-name ci-dev-arc-wcus --cluster-type connectedClusters --version $HELM_SEMVER --release-train pipeline + +# - job: Deploy +# displayName: "Deploy to dev clusters" +# pool: +# name: Azure-Pipelines-CI-Test-EO +# condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) +# dependsOn: +# - Common +# - Chart +# variables: +# HELM_CHART_NAME: $[ dependencies.common.outputs['setup.HELM_CHART_NAME'] ] +# HELM_SEMVER: $[ dependencies.common.outputs['setup.SEMVER'] ] +# IMAGE_TAG: $[ dependencies.common.outputs['setup.SEMVER'] ] +# IMAGE_TAG_WINDOWS: $[ dependencies.common.outputs['setup.WINDOWS_IMAGE_TAG'] ] +# HELM_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.HELM_FULL_IMAGE_NAME'] ] +# steps: +# - checkout: self +# submodules: true +# persistCredentials: true + +# - bash: | +# git config --global user.name "AzureDevOps Agent" +# git tag "v$(HELM_SEMVER)" +# git push origin "v$(HELM_SEMVER)" +# displayName: Tag commit with semver + +# - task: HelmInstaller@1 +# displayName: Install Helm version +# inputs: +# helmVersionToInstall: latest +# - bash: | +# for i in 1 2 3 4 5 6 7 8 9 10 +# do +# sleep 30 +# echo $(MCR_REGISTRY)$(MCR_REPOSITORY):$(IMAGE_TAG_WINDOWS) +# echo $(MCR_REGISTRY)$(MCR_REPOSITORY_HELM):$(IMAGE_TAG) + +# output1=$(curl -s https://$(MCR_REGISTRY)/v2$(MCR_REPOSITORY)/tags/list) +# output2=$(curl -s https://$(MCR_REGISTRY)/v2$(MCR_REPOSITORY_HELM)/tags/list) +# if (echo $output1 | grep $(IMAGE_TAG_WINDOWS)) && (echo $output2 | grep $(IMAGE_TAG)) +# then +# echo "Images and chart are published to mcr" +# exit 0 +# fi +# done +# echo "Images and chart are not published to mcr within 5 minutes" +# exit 1 +# displayName: "Check images are pushed to dev MCR" + +# - bash: | +# helm pull oci://$(MCR_REGISTRY)$(MCR_REPOSITORY_HELM) --version $(HELM_SEMVER) +# workingDirectory: $(Build.StagingDirectory) +# displayName: "Pull helm chart from dev MCR" + +# - bash: | +# export AKS_REGION="eastus" +# export AKS_RESOURCE_ID="/subscriptions/9b96ebbd-c57a-42d1-bbe9-b69296e4c7fb/resourceGroups/ci-dev-aks-mac-eus-rg/providers/Microsoft.ContainerService/managedClusters/ci-dev-aks-mac-eus" +# export ARC_EXTENSION="false" +# envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/Chart-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/Chart.yaml && envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values.yaml +# ls $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon +# cd $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon +# helm dependency update +# displayName: "Build: substitute chart version for 3p in Chart.yaml and values.yaml" + +# - task: HelmDeploy@0 +# displayName: "Deploy: ci-dev-aks-mac-eus cluster" +# inputs: +# connectionType: 'Azure Resource Manager' +# azureSubscription: 'ContainerInsights_Build_Subscription(9b96ebbd-c57a-42d1-bbe9-b69296e4c7fb)' +# azureResourceGroup: 'ci-dev-aks-mac-eus-rg' +# kubernetesCluster: 'ci-dev-aks-mac-eus' +# namespace: 'default' +# command: 'upgrade' +# chartType: 'FilePath' +# chartPath: '$(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/' +# releaseName: 'ama-metrics' +# waitForExecution: false +# arguments: --dependency-update --values $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values.yaml From e2f21c6e67f6779f6591b3ef584e461f11936784 Mon Sep 17 00:00:00 2001 From: Rashmi Chandrashekar Date: Mon, 14 Aug 2023 16:15:39 -0700 Subject: [PATCH 015/242] uncommenting all builds --- .pipelines/azure-pipeline-build.yml | 1136 +++++++++++++-------------- 1 file changed, 568 insertions(+), 568 deletions(-) diff --git a/.pipelines/azure-pipeline-build.yml b/.pipelines/azure-pipeline-build.yml index 5fd5203b3..f23301a1e 100644 --- a/.pipelines/azure-pipeline-build.yml +++ b/.pipelines/azure-pipeline-build.yml @@ -139,198 +139,198 @@ jobs: pathToPublish: '$(Build.ArtifactStagingDirectory)' artifactName: drop -# - job: Linux -# displayName: Build linux image -# pool: -# name: Azure-Pipelines-CI-Test-EO -# dependsOn: common -# variables: -# LINUX_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.LINUX_FULL_IMAGE_NAME'] ] -# # This is necessary because of: https://github.com/moby/moby/issues/37965 -# DOCKER_BUILDKIT: 1 -# steps: -# - checkout: self -# submodules: true - -# - task: CodeQL3000Init@0 -# displayName: 'SDL: init codeql' -# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) - -# - task: GoTool@0 -# displayName: "Build: specify golang version" -# inputs: -# version: '1.19' - -# - bash: | -# sudo apt-get install build-essential -y -# make -# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) -# workingDirectory: $(Build.SourcesDirectory)/otelcollector/opentelemetry-collector-builder/ -# displayName: "SDL: build otelcollector, promconfigvalidator, targetallocator, and fluent-bit plugin for scanning" - -# - task: BinSkim@4 -# displayName: 'SDL: run binskim' -# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) -# inputs: -# InputType: 'CommandLine' -# arguments: 'analyze --rich-return-code $(Build.SourcesDirectory)/otelcollector/opentelemetry-collector-builder/otelcollector $(Build.SourcesDirectory)/otelcollector/prom-config-validator-builder/promconfigvalidator $(Build.SourcesDirectory)/otelcollector/opentelemetry-operator/cmd/otel-allocator/targetallocator $(Build.SourcesDirectory)/otelcollector/fluent-bit/src/out_appinsights.so' - -# - task: Gosec@1 -# displayName: 'SDL: run gosec' -# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) -# inputs: -# targetPattern: 'gosecPattern' -# targetGosecPattern: '$(Build.SourcesDirectory)/otelcollector' - -# - bash: | -# wget https://github.com/microsoft/DevSkim/releases/download/v0.6.9/DevSkim_linux_0.6.9.zip -# unzip DevSkim_linux_0.6.9.zip -# chmod 775 DevSkim_linux_0.6.9/devskim -# ./DevSkim_linux_0.6.9/devskim analyze $(Build.SourcesDirectory)/otelcollector --ignore-globs **/deploy/dashboard/**,**/react/static/** --severity critical,important -# displayName: 'SDL: run devskim' -# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) -# workingDirectory: $(Build.SourcesDirectory) - -# - bash: | -# sudo gem install brakeman -v 5.4.1 -# brakeman $(Build.SourcesDirectory)/otelcollector/configmapparser --force -# displayName: 'SDL: run brakeman' -# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) - -# - bash: | -# mkdir -p $(Build.ArtifactStagingDirectory)/linux - -# # Necessary due to necessary due to https://stackoverflow.com/questions/60080264/docker-cannot-build-multi-platform-images-with-docker-buildx -# sudo apt-get update && sudo apt-get -y install qemu binfmt-support qemu-user-static -# docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - -# docker buildx create --name dockerbuilder -# docker buildx use dockerbuilder -# docker login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) -# if [ "$(Build.Reason)" != "PullRequest" ]; then -# docker buildx build . --platform=linux/amd64,linux/arm64 --file ./build/linux/Dockerfile -t $(LINUX_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/metadata.json --push -# docker pull $(LINUX_FULL_IMAGE_NAME) -# else - -# # Build multiarch image to make sure there are no issues -# docker buildx build . --platform=linux/amd64,linux/arm64 --file ./build/linux/Dockerfile -t $(LINUX_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/metadata.json - -# # Load in amd64 image to run vulnerability scan -# docker buildx build . --file ./build/linux/Dockerfile -t $(LINUX_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/metadata.json -# fi -# workingDirectory: $(Build.SourcesDirectory)/otelcollector/ -# displayName: "Build: build and push image to dev ACR" - -# - bash: | -# curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin -# trivy image --ignore-unfixed --no-progress --severity HIGH,CRITICAL,MEDIUM --exit-code 1 $(LINUX_FULL_IMAGE_NAME) -# trivy image --ignore-unfixed --no-progress --severity HIGH,CRITICAL,MEDIUM --exit-code 1 $(KUBE_STATE_METRICS_IMAGE) -# trivy image --ignore-unfixed --no-progress --severity HIGH,CRITICAL,MEDIUM --exit-code 1 $(NODE_EXPORTER_IMAGE) -# workingDirectory: $(Build.SourcesDirectory) -# displayName: "Build: run trivy scan" - -# - task: CodeQL3000Finalize@0 -# displayName: 'SDL: run codeql' -# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) - -# - task: ComponentGovernanceComponentDetection@0 -# displayName: "SDL: run component governance" -# condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) -# inputs: -# scanType: 'Register' -# verbosity: 'Verbose' -# dockerImagesToScan: '$(LINUX_FULL_IMAGE_NAME)' -# alertWarningLevel: 'High' - -# - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 -# displayName: "Ev2: Generate image artifacts" -# condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) -# inputs: -# BuildDropPath: '$(Build.ArtifactStagingDirectory)/linux' -# DockerImagesToScan: '$(LINUX_FULL_IMAGE_NAME)' - -# - task: SdtReport@2 -# displayName: 'SDL: generate report' -# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) -# inputs: -# GdnExportAllTools: false -# GdnExportGdnToolBinSkim: true -# GdnExportGdnToolBinSkimSeverity: 'Note' -# GdnExportGdnToolGosec: true -# GdnExportGdnToolGosecSeverity: 'Note' -# GdnExportGdnToolSemmle: true -# GdnExportGdnToolSemmleSeverity: 'Note' - -# - task: PublishSecurityAnalysisLogs@3 -# displayName: 'SDL: publish report' -# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) -# inputs: -# ArtifactName: 'CodeAnalysisLogs' -# ArtifactType: 'Container' -# PublishProcessedResults: true -# AllTools: true -# ToolLogsNotFoundAction: 'Standard' - -# - task: PublishBuildArtifacts@1 -# displayName: "Ev2: Publish image artifacts" -# condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) -# inputs: -# pathToPublish: '$(Build.ArtifactStagingDirectory)' -# artifactName: drop - -# - task: PostAnalysis@2 -# displayName: 'SDL: Post-Build Analysis' -# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) -# inputs: -# GdnBreakAllTools: false -# GdnBreakGdnToolBinSkim: true -# GdnBreakGdnToolBinSkimSeverity: 'Warning' -# GdnBreakGdnToolGosec: true -# GdnBreakGdnToolGosecSeverity: 'Warning' -# GdnBreakGdnToolSemmle: true -# GdnBreakGdnToolSemmleSeverity: 'Warning' - -# - job: TargetAllocator -# displayName: Build target allocator image -# pool: -# name: Azure-Pipelines-CI-Test-EO -# dependsOn: common -# variables: -# TARGET_ALLOCATOR_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.TARGET_ALLOCATOR_FULL_IMAGE_NAME'] ] -# # This is necessary because of: https://github.com/moby/moby/issues/37965 -# DOCKER_BUILDKIT: 1 -# steps: -# - checkout: self -# submodules: recursive -# persistCredentials: true -# - bash: | -# mkdir -p $(Build.ArtifactStagingDirectory)/targetallocator - -# # Necessary due to necessary due to https://stackoverflow.com/questions/60080264/docker-cannot-build-multi-platform-images-with-docker-buildx -# sudo apt-get update && sudo apt-get -y install qemu binfmt-support qemu-user-static -# docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - -# docker buildx create --name dockerbuilder -# docker buildx use dockerbuilder -# docker login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) -# if [ "$(Build.Reason)" != "PullRequest" ]; then -# docker buildx build . --platform=linux/amd64,linux/arm64 --file Dockerfile -t $(TARGET_ALLOCATOR_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/targetallocator/metadata.json --push -# docker pull $(TARGET_ALLOCATOR_FULL_IMAGE_NAME) -# else - -# # Build multiarch image to make sure there are no issues -# docker buildx build . --platform=linux/amd64,linux/arm64 --file Dockerfile -t $(TARGET_ALLOCATOR_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/targetallocator/metadata.json - -# # Load in amd64 image to run vulnerability scan -# docker buildx build . --file Dockerfile -t $(TARGET_ALLOCATOR_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/targetallocator/metadata.json -# fi -# workingDirectory: $(Build.SourcesDirectory)/otelcollector/opentelemetry-operator/cmd/otel-allocator -# displayName: "Build: build and push target allocator image to dev ACR" -# - bash: | -# curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin -# trivy image --ignore-unfixed --no-progress --severity HIGH,CRITICAL,MEDIUM --exit-code 1 $(TARGET_ALLOCATOR_FULL_IMAGE_NAME) -# workingDirectory: $(Build.SourcesDirectory) -# displayName: "Build: run trivy scan" +- job: Linux + displayName: Build linux image + pool: + name: Azure-Pipelines-CI-Test-EO + dependsOn: common + variables: + LINUX_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.LINUX_FULL_IMAGE_NAME'] ] + # This is necessary because of: https://github.com/moby/moby/issues/37965 + DOCKER_BUILDKIT: 1 + steps: + - checkout: self + submodules: true + + - task: CodeQL3000Init@0 + displayName: 'SDL: init codeql' + condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + + - task: GoTool@0 + displayName: "Build: specify golang version" + inputs: + version: '1.19' + + - bash: | + sudo apt-get install build-essential -y + make + condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + workingDirectory: $(Build.SourcesDirectory)/otelcollector/opentelemetry-collector-builder/ + displayName: "SDL: build otelcollector, promconfigvalidator, targetallocator, and fluent-bit plugin for scanning" + + - task: BinSkim@4 + displayName: 'SDL: run binskim' + condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + inputs: + InputType: 'CommandLine' + arguments: 'analyze --rich-return-code $(Build.SourcesDirectory)/otelcollector/opentelemetry-collector-builder/otelcollector $(Build.SourcesDirectory)/otelcollector/prom-config-validator-builder/promconfigvalidator $(Build.SourcesDirectory)/otelcollector/opentelemetry-operator/cmd/otel-allocator/targetallocator $(Build.SourcesDirectory)/otelcollector/fluent-bit/src/out_appinsights.so' + + - task: Gosec@1 + displayName: 'SDL: run gosec' + condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + inputs: + targetPattern: 'gosecPattern' + targetGosecPattern: '$(Build.SourcesDirectory)/otelcollector' + + - bash: | + wget https://github.com/microsoft/DevSkim/releases/download/v0.6.9/DevSkim_linux_0.6.9.zip + unzip DevSkim_linux_0.6.9.zip + chmod 775 DevSkim_linux_0.6.9/devskim + ./DevSkim_linux_0.6.9/devskim analyze $(Build.SourcesDirectory)/otelcollector --ignore-globs **/deploy/dashboard/**,**/react/static/** --severity critical,important + displayName: 'SDL: run devskim' + condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + workingDirectory: $(Build.SourcesDirectory) + + - bash: | + sudo gem install brakeman -v 5.4.1 + brakeman $(Build.SourcesDirectory)/otelcollector/configmapparser --force + displayName: 'SDL: run brakeman' + condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + + - bash: | + mkdir -p $(Build.ArtifactStagingDirectory)/linux + + # Necessary due to necessary due to https://stackoverflow.com/questions/60080264/docker-cannot-build-multi-platform-images-with-docker-buildx + sudo apt-get update && sudo apt-get -y install qemu binfmt-support qemu-user-static + docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + + docker buildx create --name dockerbuilder + docker buildx use dockerbuilder + docker login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) + if [ "$(Build.Reason)" != "PullRequest" ]; then + docker buildx build . --platform=linux/amd64,linux/arm64 --file ./build/linux/Dockerfile -t $(LINUX_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/metadata.json --push + docker pull $(LINUX_FULL_IMAGE_NAME) + else + + # Build multiarch image to make sure there are no issues + docker buildx build . --platform=linux/amd64,linux/arm64 --file ./build/linux/Dockerfile -t $(LINUX_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/metadata.json + + # Load in amd64 image to run vulnerability scan + docker buildx build . --file ./build/linux/Dockerfile -t $(LINUX_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/linux/metadata.json + fi + workingDirectory: $(Build.SourcesDirectory)/otelcollector/ + displayName: "Build: build and push image to dev ACR" + + - bash: | + curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin + trivy image --ignore-unfixed --no-progress --severity HIGH,CRITICAL,MEDIUM --exit-code 1 $(LINUX_FULL_IMAGE_NAME) + trivy image --ignore-unfixed --no-progress --severity HIGH,CRITICAL,MEDIUM --exit-code 1 $(KUBE_STATE_METRICS_IMAGE) + trivy image --ignore-unfixed --no-progress --severity HIGH,CRITICAL,MEDIUM --exit-code 1 $(NODE_EXPORTER_IMAGE) + workingDirectory: $(Build.SourcesDirectory) + displayName: "Build: run trivy scan" + + - task: CodeQL3000Finalize@0 + displayName: 'SDL: run codeql' + condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + + - task: ComponentGovernanceComponentDetection@0 + displayName: "SDL: run component governance" + condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) + inputs: + scanType: 'Register' + verbosity: 'Verbose' + dockerImagesToScan: '$(LINUX_FULL_IMAGE_NAME)' + alertWarningLevel: 'High' + + - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 + displayName: "Ev2: Generate image artifacts" + condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) + inputs: + BuildDropPath: '$(Build.ArtifactStagingDirectory)/linux' + DockerImagesToScan: '$(LINUX_FULL_IMAGE_NAME)' + + - task: SdtReport@2 + displayName: 'SDL: generate report' + condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + inputs: + GdnExportAllTools: false + GdnExportGdnToolBinSkim: true + GdnExportGdnToolBinSkimSeverity: 'Note' + GdnExportGdnToolGosec: true + GdnExportGdnToolGosecSeverity: 'Note' + GdnExportGdnToolSemmle: true + GdnExportGdnToolSemmleSeverity: 'Note' + + - task: PublishSecurityAnalysisLogs@3 + displayName: 'SDL: publish report' + condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + inputs: + ArtifactName: 'CodeAnalysisLogs' + ArtifactType: 'Container' + PublishProcessedResults: true + AllTools: true + ToolLogsNotFoundAction: 'Standard' + + - task: PublishBuildArtifacts@1 + displayName: "Ev2: Publish image artifacts" + condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) + inputs: + pathToPublish: '$(Build.ArtifactStagingDirectory)' + artifactName: drop + + - task: PostAnalysis@2 + displayName: 'SDL: Post-Build Analysis' + condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + inputs: + GdnBreakAllTools: false + GdnBreakGdnToolBinSkim: true + GdnBreakGdnToolBinSkimSeverity: 'Warning' + GdnBreakGdnToolGosec: true + GdnBreakGdnToolGosecSeverity: 'Warning' + GdnBreakGdnToolSemmle: true + GdnBreakGdnToolSemmleSeverity: 'Warning' + +- job: TargetAllocator + displayName: Build target allocator image + pool: + name: Azure-Pipelines-CI-Test-EO + dependsOn: common + variables: + TARGET_ALLOCATOR_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.TARGET_ALLOCATOR_FULL_IMAGE_NAME'] ] + # This is necessary because of: https://github.com/moby/moby/issues/37965 + DOCKER_BUILDKIT: 1 + steps: + - checkout: self + submodules: recursive + persistCredentials: true + - bash: | + mkdir -p $(Build.ArtifactStagingDirectory)/targetallocator + + # Necessary due to necessary due to https://stackoverflow.com/questions/60080264/docker-cannot-build-multi-platform-images-with-docker-buildx + sudo apt-get update && sudo apt-get -y install qemu binfmt-support qemu-user-static + docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + + docker buildx create --name dockerbuilder + docker buildx use dockerbuilder + docker login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) + if [ "$(Build.Reason)" != "PullRequest" ]; then + docker buildx build . --platform=linux/amd64,linux/arm64 --file Dockerfile -t $(TARGET_ALLOCATOR_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/targetallocator/metadata.json --push + docker pull $(TARGET_ALLOCATOR_FULL_IMAGE_NAME) + else + + # Build multiarch image to make sure there are no issues + docker buildx build . --platform=linux/amd64,linux/arm64 --file Dockerfile -t $(TARGET_ALLOCATOR_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/targetallocator/metadata.json + + # Load in amd64 image to run vulnerability scan + docker buildx build . --file Dockerfile -t $(TARGET_ALLOCATOR_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/targetallocator/metadata.json + fi + workingDirectory: $(Build.SourcesDirectory)/otelcollector/opentelemetry-operator/cmd/otel-allocator + displayName: "Build: build and push target allocator image to dev ACR" + - bash: | + curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin + trivy image --ignore-unfixed --no-progress --severity HIGH,CRITICAL,MEDIUM --exit-code 1 $(TARGET_ALLOCATOR_FULL_IMAGE_NAME) + workingDirectory: $(Build.SourcesDirectory) + displayName: "Build: run trivy scan" - job: Linux_ConfigReader displayName: Build linux image for config reader @@ -483,379 +483,379 @@ jobs: GdnBreakGdnToolSemmle: true GdnBreakGdnToolSemmleSeverity: 'Warning' -# - job: Windows2019 -# displayName: "Build windows 2019 image" -# pool: -# name: Azure-Pipelines-Windows-CI-Test-EO -# dependsOn: -# - Common -# variables: -# WINDOWS_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.WINDOWS_FULL_IMAGE_NAME'] ] -# WINDOWS_2019_BASE_IMAGE_VERSION: $[ dependencies.common.outputs['setup.WINDOWS_2019_BASE_IMAGE_VERSION'] ] -# steps: -# - task: GoTool@0 -# displayName: "Build: specify golang version" -# inputs: -# version: '1.19' - -# - powershell: | -# ./makefile_windows.ps1 -# workingDirectory: $(Build.SourcesDirectory)/otelcollector/opentelemetry-collector-builder/ -# displayName: "Build: build otelcollector, promconfigvalidator, and fluent-bit plugin" - -# - powershell: | -# docker build . --isolation=hyperv --file ./build/windows/Dockerfile -t $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2019_BASE_IMAGE_VERSION) --build-arg WINDOWS_VERSION=$(WINDOWS_2019_BASE_IMAGE_VERSION) -# workingDirectory: $(Build.SourcesDirectory)/otelcollector/ -# displayName: "Build: build WS2019 image" - -# - powershell: | -# docker login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) -# docker push $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2019_BASE_IMAGE_VERSION) -# displayName: "Build: push image to dev ACR" - -# - task: ComponentGovernanceComponentDetection@0 -# displayName: "SDL: run component governance" -# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) -# inputs: -# scanType: 'Register' -# verbosity: 'Verbose' -# dockerImagesToScan: '$(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2019_BASE_IMAGE_VERSION)' - -# - job: Windows2022 -# displayName: "Build windows 2022 image" -# pool: -# name: Azure-Pipelines-Windows-CI-Test-EO -# dependsOn: -# - Common -# variables: -# WINDOWS_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.WINDOWS_FULL_IMAGE_NAME'] ] -# WINDOWS_2022_BASE_IMAGE_VERSION: $[ dependencies.common.outputs['setup.WINDOWS_2022_BASE_IMAGE_VERSION'] ] -# steps: -# - task: GoTool@0 -# displayName: "Build: specify golang version" -# inputs: -# version: '1.19' - -# - powershell: | -# ./makefile_windows.ps1 -# workingDirectory: $(Build.SourcesDirectory)/otelcollector/opentelemetry-collector-builder/ -# displayName: "Build: build otelcollector, promconfigvalidator, and fluent-bit plugin" - -# - powershell: | -# docker build . --isolation=hyperv --file ./build/windows/Dockerfile -t $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2022_BASE_IMAGE_VERSION) --build-arg WINDOWS_VERSION=$(WINDOWS_2022_BASE_IMAGE_VERSION) -# workingDirectory: $(Build.SourcesDirectory)/otelcollector/ -# displayName: "Build: build WS2022 image" - -# - powershell: | -# docker login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) -# docker push $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2022_BASE_IMAGE_VERSION) -# displayName: "Build: push image to dev ACR" -# condition: eq(variables.IS_PR, false) - -# - task: ComponentGovernanceComponentDetection@0 -# displayName: "SDL: run component governance" -# condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) -# inputs: -# scanType: 'Register' -# verbosity: 'Verbose' -# dockerImagesToScan: '$(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2022_BASE_IMAGE_VERSION)' -# alertWarningLevel: 'High' - -# - job: WindowsMultiArch -# displayName: "Build windows multi-arch image" -# pool: -# name: Azure-Pipelines-Windows-CI-Test-EO -# dependsOn: -# - Common -# - Windows2019 -# - Windows2022 -# variables: -# WINDOWS_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.WINDOWS_FULL_IMAGE_NAME'] ] -# WINDOWS_2019_BASE_IMAGE_VERSION: $[ dependencies.common.outputs['setup.WINDOWS_2019_BASE_IMAGE_VERSION'] ] -# WINDOWS_2022_BASE_IMAGE_VERSION: $[ dependencies.common.outputs['setup.WINDOWS_2022_BASE_IMAGE_VERSION'] ] -# steps: -# - task: GoTool@0 -# displayName: "Build: specify golang version" -# inputs: -# version: '1.19' - -# - powershell: | -# New-Item -Path "$(Build.ArtifactStagingDirectory)" -Name "windows" -ItemType "directory" -# @{"image.name"="$(WINDOWS_FULL_IMAGE_NAME)"} | ConvertTo-Json -Compress | Out-File -Encoding ascii $(Build.ArtifactStagingDirectory)/windows/metadata.json -# docker login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) -# docker manifest create $(WINDOWS_FULL_IMAGE_NAME) $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2019_BASE_IMAGE_VERSION) $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2022_BASE_IMAGE_VERSION) -# docker manifest push $(WINDOWS_FULL_IMAGE_NAME) -# workingDirectory: $(Build.SourcesDirectory)/otelcollector/ -# displayName: "Build: Triggering manigest for multi-arc docker image" - -# - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 -# condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) -# displayName: "Ev2: generate image artifacts" -# inputs: -# BuildDropPath: '$(Build.ArtifactStagingDirectory)/windows' -# DockerImagesToScan: '$(WINDOWS_FULL_IMAGE_NAME)' - -# - task: PublishBuildArtifacts@1 -# condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) -# displayName: "Ev2: publish image artifacts" -# inputs: -# pathToPublish: '$(Build.ArtifactStagingDirectory)' -# artifactName: drop - -# - job: Chart -# displayName: "Package 1P helm chart" -# pool: -# name: Azure-Pipelines-CI-Test-EO -# dependsOn: -# - Common -# - Linux -# - WindowsMultiArch -# variables: -# HELM_CHART_NAME: $[ dependencies.common.outputs['setup.HELM_CHART_NAME'] ] -# HELM_SEMVER: $[ dependencies.common.outputs['setup.SEMVER'] ] -# IMAGE_TAG: $[ dependencies.common.outputs['setup.SEMVER'] ] -# IMAGE_TAG_WINDOWS: $[ dependencies.common.outputs['setup.WINDOWS_IMAGE_TAG'] ] -# HELM_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.HELM_FULL_IMAGE_NAME'] ] -# steps: -# - task: HelmInstaller@1 -# displayName: 'Build: install Helm version' -# inputs: -# helmVersionToInstall: latest - -# - bash: | -# envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/chart/prometheus-collector/Chart-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/chart/prometheus-collector/Chart.yaml && envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/chart/prometheus-collector/values-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/chart/prometheus-collector/values.yaml -# helm version -# displayName: "Build: substitute chart version in Chart.yaml and values.yaml" - -# - bash: | -# helm dep update -# workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/chart/prometheus-collector/ -# displayName: "Build: update helm dependencies" - -# - bash: | -# helm package ./prometheus-collector/ -# workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/chart/ -# displayName: "Build: package helm chart" - -# - bash: | -# helm registry login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) -# helm push $(HELM_CHART_NAME)-$(HELM_SEMVER).tgz oci://$(ACR_REGISTRY)$(ACR_REPOSITORY_HELM) -# mkdir -p $(Build.ArtifactStagingDirectory)/chart -# echo {\"image.name\":\"$(HELM_FULL_IMAGE_NAME)\"} > $(Build.ArtifactStagingDirectory)/chart/metadata.json -# workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/chart/ -# displayName: "Build: push helm chart to dev ACR" -# condition: eq(variables.IS_PR, false) - -# - job: ARC_Chart -# displayName: "Package Arc helm chart" -# pool: -# name: Azure-Pipelines-CI-Test-EO -# dependsOn: -# - Common -# - Linux -# variables: -# HELM_SEMVER: $[ dependencies.common.outputs['setup.SEMVER'] ] -# IMAGE_TAG: $[ dependencies.common.outputs['setup.SEMVER'] ] -# IMAGE_TAG_WINDOWS: $[ dependencies.common.outputs['setup.WINDOWS_IMAGE_TAG'] ] -# ARC_HELM_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.ARC_HELM_FULL_IMAGE_NAME'] ] -# ARC_EXTENSION: true -# steps: -# - task: HelmInstaller@1 -# displayName: 'Build: install Helm version' -# inputs: -# helmVersionToInstall: latest - -# - bash: | -# export HELM_CHART_NAME=$ARC_HELM_CHART_NAME -# envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/Chart-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/Chart.yaml && envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values.yaml -# helm version -# displayName: "Build: substitute chart version in Chart.yaml and values.yaml" - -# - bash: | -# helm dep update -# workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon -# displayName: "Build: update helm dependencies" - -# - bash: | -# helm package ./azure-monitor-metrics-addon/ -# workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/ -# displayName: "Build: package helm chart" - -# - bash: | -# helm registry login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) -# helm push $(ARC_HELM_CHART_NAME)-$(HELM_SEMVER).tgz oci://$(ACR_REGISTRY)$(ACR_REPOSITORY_HELM) -# mkdir -p $(Build.ArtifactStagingDirectory)/arc-chart -# echo {\"image.name\":\"$(ARC_HELM_FULL_IMAGE_NAME)\"} > $(Build.ArtifactStagingDirectory)/arc-chart/metadata.json -# workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/ -# displayName: "Build: push helm chart to dev ACR" -# condition: eq(variables.IS_PR, false) - -# - task: PublishBuildArtifacts@1 -# displayName: "Ev2: publish helm chart artifacts" -# condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) -# inputs: -# pathToPublish: '$(Build.ArtifactStagingDirectory)' -# artifactName: drop - -# - job: DeployARC -# displayName: "Deploy to ARC dev cluster" -# condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) -# pool: -# name: Azure-Pipelines-CI-Test-EO -# dependsOn: -# - Common -# - ARC_Chart -# variables: -# HELM_SEMVER: $[ dependencies.common.outputs['setup.SEMVER'] ] -# steps: -# - bash: | -# # Create JSON request body -# cat < "request.json" -# { -# "artifactEndpoints": [ -# { -# "Regions": [ -# "westcentralus" -# ], -# "Releasetrains": [ -# "pipeline" -# ], -# "FullPathToHelmChart": "https://mcr.microsoft.com/azuremonitor/containerinsights/cidev/ama-metrics-arc", -# "ExtensionUpdateFrequencyInMinutes": 5, -# "IsCustomerHidden": true, -# "ReadyforRollout": true, -# "RollbackVersion": null, -# "PackageConfigName": "Microsoft.AzureMonitor.Containers.Metrics-Prom041823" -# } -# ] -# } -# EOF - -# # Send Request -# SUBSCRIPTION="b9842c7c-1a38-4385-8f39-a51314758bcf" -# RESOURCE_AUDIENCE="c699bf69-fb1d-4eaf-999b-99e6b2ae4d85" -# SPN_CLIENT_ID="9a4c55e9-576a-450a-88bd-53bd634db38d" -# SPN_TENANT_ID="72f988bf-86f1-41af-91ab-2d7cd011db47" -# METHOD="PUT" - -# echo "Request parameter preparation, SUBSCRIPTION is $SUBSCRIPTION, RESOURCE_AUDIENCE is $RESOURCE_AUDIENCE, CHART_VERSION is $HELM_SEMVER, SPN_CLIENT_ID is $SPN_CLIENT_ID, SPN_TENANT_ID is $SPN_TENANT_ID" - -# # MSI is not supported -# echo "Login cli using spn" -# az login --service-principal --username=$SPN_CLIENT_ID --password=$(ARC_SPN_SECRET) --tenant=$SPN_TENANT_ID -# if [ $? -eq 0 ]; then -# echo "Logged in successfully with spn" -# else -# echo "-e error failed to login to az with managed identity credentials" -# exit 1 -# fi - -# ACCESS_TOKEN=$(az account get-access-token --resource $RESOURCE_AUDIENCE --query accessToken -o json) -# if [ $? -eq 0 ]; then -# echo "get access token from resource:$RESOURCE_AUDIENCE successfully." -# else -# echo "-e error get access token from resource:$RESOURCE_AUDIENCE failed." -# exit 1 -# fi -# ACCESS_TOKEN=$(echo $ACCESS_TOKEN | tr -d '"' | tr -d '"\r\n') - -# ARC_API_URL="https://eastus2euap.dp.kubernetesconfiguration.azure.com" -# EXTENSION_NAME="microsoft.azuremonitor.containers.metrics" -# API_VERSION="2021-05-01" - -# echo "start send request" -# az rest --method $METHOD --headers "{\"Authorization\": \"Bearer $ACCESS_TOKEN\", \"Content-Type\": \"application/json\"}" --body @request.json --uri $ARC_API_URL/subscriptions/$SUBSCRIPTION/extensionTypeRegistrations/$EXTENSION_NAME/versions/$HELM_SEMVER?api-version=$API_VERSION -# if [ $? -eq 0 ]; then -# echo "arc extension registered successfully" -# else -# echo "-e error failed to register arc extension" -# exit 1 -# fi -# displayName: "Deploy: Release to dev release train" -# - task: AzureCLI@2 -# displayName: "Deploy: ci-dev-arc-wcus cluster" -# inputs: -# azureSubscription: 'ContainerInsights_Build_Subscription(9b96ebbd-c57a-42d1-bbe9-b69296e4c7fb)' -# scriptType: 'bash' -# scriptLocation: 'inlineScript' -# inlineScript: | -# az config set extension.use_dynamic_install=yes_without_prompt -# az k8s-extension update --name azuremonitor-metrics --resource-group ci-dev-arc-wcus --cluster-name ci-dev-arc-wcus --cluster-type connectedClusters --version $HELM_SEMVER --release-train pipeline - -# - job: Deploy -# displayName: "Deploy to dev clusters" -# pool: -# name: Azure-Pipelines-CI-Test-EO -# condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) -# dependsOn: -# - Common -# - Chart -# variables: -# HELM_CHART_NAME: $[ dependencies.common.outputs['setup.HELM_CHART_NAME'] ] -# HELM_SEMVER: $[ dependencies.common.outputs['setup.SEMVER'] ] -# IMAGE_TAG: $[ dependencies.common.outputs['setup.SEMVER'] ] -# IMAGE_TAG_WINDOWS: $[ dependencies.common.outputs['setup.WINDOWS_IMAGE_TAG'] ] -# HELM_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.HELM_FULL_IMAGE_NAME'] ] -# steps: -# - checkout: self -# submodules: true -# persistCredentials: true - -# - bash: | -# git config --global user.name "AzureDevOps Agent" -# git tag "v$(HELM_SEMVER)" -# git push origin "v$(HELM_SEMVER)" -# displayName: Tag commit with semver - -# - task: HelmInstaller@1 -# displayName: Install Helm version -# inputs: -# helmVersionToInstall: latest -# - bash: | -# for i in 1 2 3 4 5 6 7 8 9 10 -# do -# sleep 30 -# echo $(MCR_REGISTRY)$(MCR_REPOSITORY):$(IMAGE_TAG_WINDOWS) -# echo $(MCR_REGISTRY)$(MCR_REPOSITORY_HELM):$(IMAGE_TAG) - -# output1=$(curl -s https://$(MCR_REGISTRY)/v2$(MCR_REPOSITORY)/tags/list) -# output2=$(curl -s https://$(MCR_REGISTRY)/v2$(MCR_REPOSITORY_HELM)/tags/list) -# if (echo $output1 | grep $(IMAGE_TAG_WINDOWS)) && (echo $output2 | grep $(IMAGE_TAG)) -# then -# echo "Images and chart are published to mcr" -# exit 0 -# fi -# done -# echo "Images and chart are not published to mcr within 5 minutes" -# exit 1 -# displayName: "Check images are pushed to dev MCR" - -# - bash: | -# helm pull oci://$(MCR_REGISTRY)$(MCR_REPOSITORY_HELM) --version $(HELM_SEMVER) -# workingDirectory: $(Build.StagingDirectory) -# displayName: "Pull helm chart from dev MCR" - -# - bash: | -# export AKS_REGION="eastus" -# export AKS_RESOURCE_ID="/subscriptions/9b96ebbd-c57a-42d1-bbe9-b69296e4c7fb/resourceGroups/ci-dev-aks-mac-eus-rg/providers/Microsoft.ContainerService/managedClusters/ci-dev-aks-mac-eus" -# export ARC_EXTENSION="false" -# envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/Chart-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/Chart.yaml && envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values.yaml -# ls $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon -# cd $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon -# helm dependency update -# displayName: "Build: substitute chart version for 3p in Chart.yaml and values.yaml" - -# - task: HelmDeploy@0 -# displayName: "Deploy: ci-dev-aks-mac-eus cluster" -# inputs: -# connectionType: 'Azure Resource Manager' -# azureSubscription: 'ContainerInsights_Build_Subscription(9b96ebbd-c57a-42d1-bbe9-b69296e4c7fb)' -# azureResourceGroup: 'ci-dev-aks-mac-eus-rg' -# kubernetesCluster: 'ci-dev-aks-mac-eus' -# namespace: 'default' -# command: 'upgrade' -# chartType: 'FilePath' -# chartPath: '$(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/' -# releaseName: 'ama-metrics' -# waitForExecution: false -# arguments: --dependency-update --values $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values.yaml +- job: Windows2019 + displayName: "Build windows 2019 image" + pool: + name: Azure-Pipelines-Windows-CI-Test-EO + dependsOn: + - Common + variables: + WINDOWS_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.WINDOWS_FULL_IMAGE_NAME'] ] + WINDOWS_2019_BASE_IMAGE_VERSION: $[ dependencies.common.outputs['setup.WINDOWS_2019_BASE_IMAGE_VERSION'] ] + steps: + - task: GoTool@0 + displayName: "Build: specify golang version" + inputs: + version: '1.19' + + - powershell: | + ./makefile_windows.ps1 + workingDirectory: $(Build.SourcesDirectory)/otelcollector/opentelemetry-collector-builder/ + displayName: "Build: build otelcollector, promconfigvalidator, and fluent-bit plugin" + + - powershell: | + docker build . --isolation=hyperv --file ./build/windows/Dockerfile -t $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2019_BASE_IMAGE_VERSION) --build-arg WINDOWS_VERSION=$(WINDOWS_2019_BASE_IMAGE_VERSION) + workingDirectory: $(Build.SourcesDirectory)/otelcollector/ + displayName: "Build: build WS2019 image" + + - powershell: | + docker login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) + docker push $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2019_BASE_IMAGE_VERSION) + displayName: "Build: push image to dev ACR" + + - task: ComponentGovernanceComponentDetection@0 + displayName: "SDL: run component governance" + condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + inputs: + scanType: 'Register' + verbosity: 'Verbose' + dockerImagesToScan: '$(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2019_BASE_IMAGE_VERSION)' + +- job: Windows2022 + displayName: "Build windows 2022 image" + pool: + name: Azure-Pipelines-Windows-CI-Test-EO + dependsOn: + - Common + variables: + WINDOWS_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.WINDOWS_FULL_IMAGE_NAME'] ] + WINDOWS_2022_BASE_IMAGE_VERSION: $[ dependencies.common.outputs['setup.WINDOWS_2022_BASE_IMAGE_VERSION'] ] + steps: + - task: GoTool@0 + displayName: "Build: specify golang version" + inputs: + version: '1.19' + + - powershell: | + ./makefile_windows.ps1 + workingDirectory: $(Build.SourcesDirectory)/otelcollector/opentelemetry-collector-builder/ + displayName: "Build: build otelcollector, promconfigvalidator, and fluent-bit plugin" + + - powershell: | + docker build . --isolation=hyperv --file ./build/windows/Dockerfile -t $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2022_BASE_IMAGE_VERSION) --build-arg WINDOWS_VERSION=$(WINDOWS_2022_BASE_IMAGE_VERSION) + workingDirectory: $(Build.SourcesDirectory)/otelcollector/ + displayName: "Build: build WS2022 image" + + - powershell: | + docker login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) + docker push $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2022_BASE_IMAGE_VERSION) + displayName: "Build: push image to dev ACR" + condition: eq(variables.IS_PR, false) + + - task: ComponentGovernanceComponentDetection@0 + displayName: "SDL: run component governance" + condition: or(eq(variables.IS_PR, true), eq(variables.IS_MAIN_BRANCH, true)) + inputs: + scanType: 'Register' + verbosity: 'Verbose' + dockerImagesToScan: '$(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2022_BASE_IMAGE_VERSION)' + alertWarningLevel: 'High' + +- job: WindowsMultiArch + displayName: "Build windows multi-arch image" + pool: + name: Azure-Pipelines-Windows-CI-Test-EO + dependsOn: + - Common + - Windows2019 + - Windows2022 + variables: + WINDOWS_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.WINDOWS_FULL_IMAGE_NAME'] ] + WINDOWS_2019_BASE_IMAGE_VERSION: $[ dependencies.common.outputs['setup.WINDOWS_2019_BASE_IMAGE_VERSION'] ] + WINDOWS_2022_BASE_IMAGE_VERSION: $[ dependencies.common.outputs['setup.WINDOWS_2022_BASE_IMAGE_VERSION'] ] + steps: + - task: GoTool@0 + displayName: "Build: specify golang version" + inputs: + version: '1.19' + + - powershell: | + New-Item -Path "$(Build.ArtifactStagingDirectory)" -Name "windows" -ItemType "directory" + @{"image.name"="$(WINDOWS_FULL_IMAGE_NAME)"} | ConvertTo-Json -Compress | Out-File -Encoding ascii $(Build.ArtifactStagingDirectory)/windows/metadata.json + docker login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) + docker manifest create $(WINDOWS_FULL_IMAGE_NAME) $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2019_BASE_IMAGE_VERSION) $(WINDOWS_FULL_IMAGE_NAME)-$(WINDOWS_2022_BASE_IMAGE_VERSION) + docker manifest push $(WINDOWS_FULL_IMAGE_NAME) + workingDirectory: $(Build.SourcesDirectory)/otelcollector/ + displayName: "Build: Triggering manigest for multi-arc docker image" + + - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 + condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) + displayName: "Ev2: generate image artifacts" + inputs: + BuildDropPath: '$(Build.ArtifactStagingDirectory)/windows' + DockerImagesToScan: '$(WINDOWS_FULL_IMAGE_NAME)' + + - task: PublishBuildArtifacts@1 + condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) + displayName: "Ev2: publish image artifacts" + inputs: + pathToPublish: '$(Build.ArtifactStagingDirectory)' + artifactName: drop + +- job: Chart + displayName: "Package 1P helm chart" + pool: + name: Azure-Pipelines-CI-Test-EO + dependsOn: + - Common + - Linux + - WindowsMultiArch + variables: + HELM_CHART_NAME: $[ dependencies.common.outputs['setup.HELM_CHART_NAME'] ] + HELM_SEMVER: $[ dependencies.common.outputs['setup.SEMVER'] ] + IMAGE_TAG: $[ dependencies.common.outputs['setup.SEMVER'] ] + IMAGE_TAG_WINDOWS: $[ dependencies.common.outputs['setup.WINDOWS_IMAGE_TAG'] ] + HELM_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.HELM_FULL_IMAGE_NAME'] ] + steps: + - task: HelmInstaller@1 + displayName: 'Build: install Helm version' + inputs: + helmVersionToInstall: latest + + - bash: | + envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/chart/prometheus-collector/Chart-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/chart/prometheus-collector/Chart.yaml && envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/chart/prometheus-collector/values-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/chart/prometheus-collector/values.yaml + helm version + displayName: "Build: substitute chart version in Chart.yaml and values.yaml" + + - bash: | + helm dep update + workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/chart/prometheus-collector/ + displayName: "Build: update helm dependencies" + + - bash: | + helm package ./prometheus-collector/ + workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/chart/ + displayName: "Build: package helm chart" + + - bash: | + helm registry login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) + helm push $(HELM_CHART_NAME)-$(HELM_SEMVER).tgz oci://$(ACR_REGISTRY)$(ACR_REPOSITORY_HELM) + mkdir -p $(Build.ArtifactStagingDirectory)/chart + echo {\"image.name\":\"$(HELM_FULL_IMAGE_NAME)\"} > $(Build.ArtifactStagingDirectory)/chart/metadata.json + workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/chart/ + displayName: "Build: push helm chart to dev ACR" + condition: eq(variables.IS_PR, false) + +- job: ARC_Chart + displayName: "Package Arc helm chart" + pool: + name: Azure-Pipelines-CI-Test-EO + dependsOn: + - Common + - Linux + variables: + HELM_SEMVER: $[ dependencies.common.outputs['setup.SEMVER'] ] + IMAGE_TAG: $[ dependencies.common.outputs['setup.SEMVER'] ] + IMAGE_TAG_WINDOWS: $[ dependencies.common.outputs['setup.WINDOWS_IMAGE_TAG'] ] + ARC_HELM_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.ARC_HELM_FULL_IMAGE_NAME'] ] + ARC_EXTENSION: true + steps: + - task: HelmInstaller@1 + displayName: 'Build: install Helm version' + inputs: + helmVersionToInstall: latest + + - bash: | + export HELM_CHART_NAME=$ARC_HELM_CHART_NAME + envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/Chart-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/Chart.yaml && envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values.yaml + helm version + displayName: "Build: substitute chart version in Chart.yaml and values.yaml" + + - bash: | + helm dep update + workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon + displayName: "Build: update helm dependencies" + + - bash: | + helm package ./azure-monitor-metrics-addon/ + workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/ + displayName: "Build: package helm chart" + + - bash: | + helm registry login containerinsightsprod.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) + helm push $(ARC_HELM_CHART_NAME)-$(HELM_SEMVER).tgz oci://$(ACR_REGISTRY)$(ACR_REPOSITORY_HELM) + mkdir -p $(Build.ArtifactStagingDirectory)/arc-chart + echo {\"image.name\":\"$(ARC_HELM_FULL_IMAGE_NAME)\"} > $(Build.ArtifactStagingDirectory)/arc-chart/metadata.json + workingDirectory: $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/ + displayName: "Build: push helm chart to dev ACR" + condition: eq(variables.IS_PR, false) + + - task: PublishBuildArtifacts@1 + displayName: "Ev2: publish helm chart artifacts" + condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) + inputs: + pathToPublish: '$(Build.ArtifactStagingDirectory)' + artifactName: drop + +- job: DeployARC + displayName: "Deploy to ARC dev cluster" + condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) + pool: + name: Azure-Pipelines-CI-Test-EO + dependsOn: + - Common + - ARC_Chart + variables: + HELM_SEMVER: $[ dependencies.common.outputs['setup.SEMVER'] ] + steps: + - bash: | + # Create JSON request body + cat < "request.json" + { + "artifactEndpoints": [ + { + "Regions": [ + "westcentralus" + ], + "Releasetrains": [ + "pipeline" + ], + "FullPathToHelmChart": "https://mcr.microsoft.com/azuremonitor/containerinsights/cidev/ama-metrics-arc", + "ExtensionUpdateFrequencyInMinutes": 5, + "IsCustomerHidden": true, + "ReadyforRollout": true, + "RollbackVersion": null, + "PackageConfigName": "Microsoft.AzureMonitor.Containers.Metrics-Prom041823" + } + ] + } + EOF + + # Send Request + SUBSCRIPTION="b9842c7c-1a38-4385-8f39-a51314758bcf" + RESOURCE_AUDIENCE="c699bf69-fb1d-4eaf-999b-99e6b2ae4d85" + SPN_CLIENT_ID="9a4c55e9-576a-450a-88bd-53bd634db38d" + SPN_TENANT_ID="72f988bf-86f1-41af-91ab-2d7cd011db47" + METHOD="PUT" + + echo "Request parameter preparation, SUBSCRIPTION is $SUBSCRIPTION, RESOURCE_AUDIENCE is $RESOURCE_AUDIENCE, CHART_VERSION is $HELM_SEMVER, SPN_CLIENT_ID is $SPN_CLIENT_ID, SPN_TENANT_ID is $SPN_TENANT_ID" + + # MSI is not supported + echo "Login cli using spn" + az login --service-principal --username=$SPN_CLIENT_ID --password=$(ARC_SPN_SECRET) --tenant=$SPN_TENANT_ID + if [ $? -eq 0 ]; then + echo "Logged in successfully with spn" + else + echo "-e error failed to login to az with managed identity credentials" + exit 1 + fi + + ACCESS_TOKEN=$(az account get-access-token --resource $RESOURCE_AUDIENCE --query accessToken -o json) + if [ $? -eq 0 ]; then + echo "get access token from resource:$RESOURCE_AUDIENCE successfully." + else + echo "-e error get access token from resource:$RESOURCE_AUDIENCE failed." + exit 1 + fi + ACCESS_TOKEN=$(echo $ACCESS_TOKEN | tr -d '"' | tr -d '"\r\n') + + ARC_API_URL="https://eastus2euap.dp.kubernetesconfiguration.azure.com" + EXTENSION_NAME="microsoft.azuremonitor.containers.metrics" + API_VERSION="2021-05-01" + + echo "start send request" + az rest --method $METHOD --headers "{\"Authorization\": \"Bearer $ACCESS_TOKEN\", \"Content-Type\": \"application/json\"}" --body @request.json --uri $ARC_API_URL/subscriptions/$SUBSCRIPTION/extensionTypeRegistrations/$EXTENSION_NAME/versions/$HELM_SEMVER?api-version=$API_VERSION + if [ $? -eq 0 ]; then + echo "arc extension registered successfully" + else + echo "-e error failed to register arc extension" + exit 1 + fi + displayName: "Deploy: Release to dev release train" + - task: AzureCLI@2 + displayName: "Deploy: ci-dev-arc-wcus cluster" + inputs: + azureSubscription: 'ContainerInsights_Build_Subscription(9b96ebbd-c57a-42d1-bbe9-b69296e4c7fb)' + scriptType: 'bash' + scriptLocation: 'inlineScript' + inlineScript: | + az config set extension.use_dynamic_install=yes_without_prompt + az k8s-extension update --name azuremonitor-metrics --resource-group ci-dev-arc-wcus --cluster-name ci-dev-arc-wcus --cluster-type connectedClusters --version $HELM_SEMVER --release-train pipeline + +- job: Deploy + displayName: "Deploy to dev clusters" + pool: + name: Azure-Pipelines-CI-Test-EO + condition: and(eq(variables.IS_PR, false), eq(variables.IS_MAIN_BRANCH, true)) + dependsOn: + - Common + - Chart + variables: + HELM_CHART_NAME: $[ dependencies.common.outputs['setup.HELM_CHART_NAME'] ] + HELM_SEMVER: $[ dependencies.common.outputs['setup.SEMVER'] ] + IMAGE_TAG: $[ dependencies.common.outputs['setup.SEMVER'] ] + IMAGE_TAG_WINDOWS: $[ dependencies.common.outputs['setup.WINDOWS_IMAGE_TAG'] ] + HELM_FULL_IMAGE_NAME: $[ dependencies.common.outputs['setup.HELM_FULL_IMAGE_NAME'] ] + steps: + - checkout: self + submodules: true + persistCredentials: true + + - bash: | + git config --global user.name "AzureDevOps Agent" + git tag "v$(HELM_SEMVER)" + git push origin "v$(HELM_SEMVER)" + displayName: Tag commit with semver + + - task: HelmInstaller@1 + displayName: Install Helm version + inputs: + helmVersionToInstall: latest + - bash: | + for i in 1 2 3 4 5 6 7 8 9 10 + do + sleep 30 + echo $(MCR_REGISTRY)$(MCR_REPOSITORY):$(IMAGE_TAG_WINDOWS) + echo $(MCR_REGISTRY)$(MCR_REPOSITORY_HELM):$(IMAGE_TAG) + + output1=$(curl -s https://$(MCR_REGISTRY)/v2$(MCR_REPOSITORY)/tags/list) + output2=$(curl -s https://$(MCR_REGISTRY)/v2$(MCR_REPOSITORY_HELM)/tags/list) + if (echo $output1 | grep $(IMAGE_TAG_WINDOWS)) && (echo $output2 | grep $(IMAGE_TAG)) + then + echo "Images and chart are published to mcr" + exit 0 + fi + done + echo "Images and chart are not published to mcr within 5 minutes" + exit 1 + displayName: "Check images are pushed to dev MCR" + + - bash: | + helm pull oci://$(MCR_REGISTRY)$(MCR_REPOSITORY_HELM) --version $(HELM_SEMVER) + workingDirectory: $(Build.StagingDirectory) + displayName: "Pull helm chart from dev MCR" + + - bash: | + export AKS_REGION="eastus" + export AKS_RESOURCE_ID="/subscriptions/9b96ebbd-c57a-42d1-bbe9-b69296e4c7fb/resourceGroups/ci-dev-aks-mac-eus-rg/providers/Microsoft.ContainerService/managedClusters/ci-dev-aks-mac-eus" + export ARC_EXTENSION="false" + envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/Chart-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/Chart.yaml && envsubst < $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values-template.yaml > $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values.yaml + ls $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon + cd $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon + helm dependency update + displayName: "Build: substitute chart version for 3p in Chart.yaml and values.yaml" + + - task: HelmDeploy@0 + displayName: "Deploy: ci-dev-aks-mac-eus cluster" + inputs: + connectionType: 'Azure Resource Manager' + azureSubscription: 'ContainerInsights_Build_Subscription(9b96ebbd-c57a-42d1-bbe9-b69296e4c7fb)' + azureResourceGroup: 'ci-dev-aks-mac-eus-rg' + kubernetesCluster: 'ci-dev-aks-mac-eus' + namespace: 'default' + command: 'upgrade' + chartType: 'FilePath' + chartPath: '$(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/' + releaseName: 'ama-metrics' + waitForExecution: false + arguments: --dependency-update --values $(Build.SourcesDirectory)/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values.yaml From ca120c31595f803e87563f838b16980fd756124b Mon Sep 17 00:00:00 2001 From: Rashmi Chandrashekar Date: Mon, 14 Aug 2023 17:47:52 -0700 Subject: [PATCH 016/242] removing $$ since TA doesnt support env var substitution --- otelcollector/prom-config-validator-builder/main.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/otelcollector/prom-config-validator-builder/main.go b/otelcollector/prom-config-validator-builder/main.go index 500b27f02..0eeefbe64 100644 --- a/otelcollector/prom-config-validator-builder/main.go +++ b/otelcollector/prom-config-validator-builder/main.go @@ -123,7 +123,6 @@ func generateOtelConfig(promFilePath string, outputFilePath string, otelConfigTe if _, isString := relabelConfig["regex"].(string); isString { regexString := relabelConfig["regex"].(string) modifiedRegexString := strings.ReplaceAll(regexString, "$$", "$") - modifiedRegexString = strings.ReplaceAll(modifiedRegexString, "$", "$$") relabelConfig["regex"] = modifiedRegexString } } @@ -131,7 +130,6 @@ func generateOtelConfig(promFilePath string, outputFilePath string, otelConfigTe if relabelConfig["replacement"] != nil { replacement := relabelConfig["replacement"].(string) modifiedReplacementString := strings.ReplaceAll(replacement, "$$", "$") - modifiedReplacementString = strings.ReplaceAll(modifiedReplacementString, "$", "$$") relabelConfig["replacement"] = modifiedReplacementString } } From 27e62410175d276446bfad80f1b1f70756b5790f Mon Sep 17 00:00:00 2001 From: Rashmi Chandrashekar Date: Mon, 14 Aug 2023 18:26:35 -0700 Subject: [PATCH 017/242] adding $ manipulation for ds and rs --- .../prom-config-validator-builder/main.go | 18 ++++++++++++++++-- otelcollector/scripts/main-configreader.sh | 1 - 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/otelcollector/prom-config-validator-builder/main.go b/otelcollector/prom-config-validator-builder/main.go index 0eeefbe64..cf45608a2 100644 --- a/otelcollector/prom-config-validator-builder/main.go +++ b/otelcollector/prom-config-validator-builder/main.go @@ -48,6 +48,8 @@ type OtelConfig struct { var RESET = "\033[0m" var RED = "\033[31m" +const daemonSetControllerType = "DaemonSet" + func logFatalError(message string) { // Do not set env var if customer is running outside of agent to just validate config if os.Getenv("CONFIG_VALIDATOR_RUNNING_IN_AGENT") == "true" { @@ -102,6 +104,8 @@ func generateOtelConfig(promFilePath string, outputFilePath string, otelConfigTe return err } + controllerType := os.Getenv("CONTROLLER_TYPE") + var prometheusConfig map[string]interface{} err = yaml.Unmarshal([]byte(promConfigFileContents), &prometheusConfig) if err != nil { @@ -123,6 +127,9 @@ func generateOtelConfig(promFilePath string, outputFilePath string, otelConfigTe if _, isString := relabelConfig["regex"].(string); isString { regexString := relabelConfig["regex"].(string) modifiedRegexString := strings.ReplaceAll(regexString, "$$", "$") + if strings.EqualFold(controllerType, daemonSetControllerType) { + modifiedRegexString = strings.ReplaceAll(modifiedRegexString, "$", "$$") + } relabelConfig["regex"] = modifiedRegexString } } @@ -130,6 +137,9 @@ func generateOtelConfig(promFilePath string, outputFilePath string, otelConfigTe if relabelConfig["replacement"] != nil { replacement := relabelConfig["replacement"].(string) modifiedReplacementString := strings.ReplaceAll(replacement, "$$", "$") + if strings.EqualFold(controllerType, daemonSetControllerType) { + modifiedReplacementString = strings.ReplaceAll(modifiedReplacementString, "$", "$$") + } relabelConfig["replacement"] = modifiedReplacementString } } @@ -145,7 +155,9 @@ func generateOtelConfig(promFilePath string, outputFilePath string, otelConfigTe if _, isString := metricRelabelConfig["regex"].(string); isString { regexString := metricRelabelConfig["regex"].(string) modifiedRegexString := strings.ReplaceAll(regexString, "$$", "$") - modifiedRegexString = strings.ReplaceAll(modifiedRegexString, "$", "$$") + if strings.EqualFold(controllerType, daemonSetControllerType) { + modifiedRegexString = strings.ReplaceAll(modifiedRegexString, "$", "$$") + } metricRelabelConfig["regex"] = modifiedRegexString } } @@ -154,7 +166,9 @@ func generateOtelConfig(promFilePath string, outputFilePath string, otelConfigTe if metricRelabelConfig["replacement"] != nil { replacement := metricRelabelConfig["replacement"].(string) modifiedReplacementString := strings.ReplaceAll(replacement, "$$", "$") - modifiedReplacementString = strings.ReplaceAll(modifiedReplacementString, "$", "$$") + if strings.EqualFold(controllerType, daemonSetControllerType) { + modifiedReplacementString = strings.ReplaceAll(modifiedReplacementString, "$", "$$") + } metricRelabelConfig["replacement"] = modifiedReplacementString } } diff --git a/otelcollector/scripts/main-configreader.sh b/otelcollector/scripts/main-configreader.sh index c8d1d6f75..ba653754e 100644 --- a/otelcollector/scripts/main-configreader.sh +++ b/otelcollector/scripts/main-configreader.sh @@ -22,7 +22,6 @@ source /opt/configmap-parser.sh # Run configreader to update the configmap for TargetAllocator -# Add this error handling - if [ $? -ne 0 ] after running the configurationreader exe if [ "$AZMON_USE_DEFAULT_PROMETHEUS_CONFIG" = "true" ] && [ -e "/opt/microsoft/otelcollector/collector-config-default.yml" ] ; then echo_warning "Running config reader with only default scrape configs enabled" /opt/configurationreader --config /opt/microsoft/otelcollector/collector-config-default.yml From f0f7de32fcf55ca54a81702e3f7f0bdf14ae8f87 Mon Sep 17 00:00:00 2001 From: Rashmi Chandrashekar Date: Tue, 15 Aug 2023 16:08:45 -0700 Subject: [PATCH 018/242] Updating operator submodules --- otelcollector/opentelemetry-operator | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/otelcollector/opentelemetry-operator b/otelcollector/opentelemetry-operator index 2b60c8996..47ae93615 160000 --- a/otelcollector/opentelemetry-operator +++ b/otelcollector/opentelemetry-operator @@ -1 +1 @@ -Subproject commit 2b60c8996e374480b008986e5eb68522b53da58e +Subproject commit 47ae93615e97b1b09d2eade17e95ac86730c03e4 From bbedb0996d2b8cd5f1f9a5e31368d4c356183faa Mon Sep 17 00:00:00 2001 From: Rashmi Chandrashekar Date: Wed, 16 Aug 2023 16:37:15 -0700 Subject: [PATCH 019/242] adding affinity --- .../ama-metrics-targetallocator.yaml | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-targetallocator.yaml b/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-targetallocator.yaml index 558ea2132..063216ffc 100644 --- a/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-targetallocator.yaml +++ b/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-targetallocator.yaml @@ -51,6 +51,7 @@ spec: - name: PROMETHEUS_OPERATOR_V1_CUSTOM_GROUP value: "azmonitoring.coreos.com" image: "mcr.microsoft.com{{ .Values.AzureMonitorMetrics.ImageRepository }}:{{ .Values.AzureMonitorMetrics.ImageTagTargetAllocator }}" + #image: "docker.io/rashmichandrashekarms/ta:prom-op-39" imagePullPolicy: IfNotPresent name: targetallocator resources: @@ -160,6 +161,45 @@ spec: serviceAccount: ama-metrics-serviceaccount serviceAccountName: ama-metrics-serviceaccount terminationGracePeriodSeconds: 30 + affinity: + nodeAffinity: + # affinity to schedule on to ephemeral os node if its available + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 100 + preference: + matchExpressions: + - key: kubernetes.azure.com/mode + operator: In + values: + - system + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/os + operator: In + values: + - linux + - key: type + operator: NotIn + values: + - virtual-kubelet + {{- if not .Values.AzureMonitorMetrics.ArcExtension }} + - key: kubernetes.azure.com/cluster + operator: Exists + {{- end }} + tolerations: + - key: CriticalAddonsOnly + operator: Exists + - operator: "Exists" + effect: NoExecute + - operator: "Exists" + effect: NoSchedule + - key: node-role.kubernetes.io/control-plane + operator: Exists + effect: NoSchedule + - key: node-role.kubernetes.io/master + operator: Exists + effect: NoSchedule volumes: - name: settings-vol-config configMap: From 05cc5659e3dfa70230563879efc65abc66b9de20 Mon Sep 17 00:00:00 2001 From: Rashmi Chandrashekar Date: Wed, 16 Aug 2023 16:37:34 -0700 Subject: [PATCH 020/242] removing comment --- .../templates/ama-metrics-targetallocator.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-targetallocator.yaml b/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-targetallocator.yaml index 063216ffc..e3cd03214 100644 --- a/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-targetallocator.yaml +++ b/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-targetallocator.yaml @@ -51,7 +51,6 @@ spec: - name: PROMETHEUS_OPERATOR_V1_CUSTOM_GROUP value: "azmonitoring.coreos.com" image: "mcr.microsoft.com{{ .Values.AzureMonitorMetrics.ImageRepository }}:{{ .Values.AzureMonitorMetrics.ImageTagTargetAllocator }}" - #image: "docker.io/rashmichandrashekarms/ta:prom-op-39" imagePullPolicy: IfNotPresent name: targetallocator resources: From 7c7e342ff0c32bced85f9a736325993a57484620 Mon Sep 17 00:00:00 2001 From: bragi92 Date: Thu, 31 Aug 2023 11:10:52 -0700 Subject: [PATCH 021/242] example service monitor CR and update reference app with label (#580) --- .../prometheus-reference-app.yaml | 2 ++ .../service-monitor-reference-app.yaml | 22 +++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 otelcollector/deploy/example-custom-resources/service-monitor/service-monitor-reference-app.yaml diff --git a/internal/referenceapp/prometheus-reference-app.yaml b/internal/referenceapp/prometheus-reference-app.yaml index b7e93c282..4b297ad70 100644 --- a/internal/referenceapp/prometheus-reference-app.yaml +++ b/internal/referenceapp/prometheus-reference-app.yaml @@ -39,6 +39,8 @@ apiVersion: v1 kind: Service metadata: name: prometheus-reference-service + labels: + app: prometheus-reference-app spec: selector: app: prometheus-reference-app diff --git a/otelcollector/deploy/example-custom-resources/service-monitor/service-monitor-reference-app.yaml b/otelcollector/deploy/example-custom-resources/service-monitor/service-monitor-reference-app.yaml new file mode 100644 index 000000000..d2f0b98cc --- /dev/null +++ b/otelcollector/deploy/example-custom-resources/service-monitor/service-monitor-reference-app.yaml @@ -0,0 +1,22 @@ +apiVersion: azmonitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + name: prometheus-reference-app-monitor +spec: + selector: + matchLabels: + app: prometheus-reference-app + endpoints: + - port: weather-app + interval: 30s + path: /metrics + scheme: http + - port: untyped-metrics + interval: 30s + path: /metrics + scheme: http + - port: python-client + interval: 30s + path: /metrics + scheme: http + \ No newline at end of file From da272c2af9511d8daf41065599374866b8adc820 Mon Sep 17 00:00:00 2001 From: rashmichandrashekar Date: Fri, 1 Sep 2023 10:57:06 -0700 Subject: [PATCH 022/242] TA fix for not detecting collector instances up from 0 to 1 (#581) --- otelcollector/configuration-reader-builder/main.go | 1 + otelcollector/opentelemetry-operator | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/otelcollector/configuration-reader-builder/main.go b/otelcollector/configuration-reader-builder/main.go index f69dcb6e6..dbfb53458 100644 --- a/otelcollector/configuration-reader-builder/main.go +++ b/otelcollector/configuration-reader-builder/main.go @@ -70,6 +70,7 @@ func updateTAConfigFile(configFilePath string) { promScrapeConfig = otelConfig.Receivers.Prometheus.Config targetAllocatorConfig := Config{ + AllocationStrategy: "consistent-hashing", LabelSelector: map[string]string{ "rsName": "ama-metrics", "kubernetes.azure.com/managedby": "aks", diff --git a/otelcollector/opentelemetry-operator b/otelcollector/opentelemetry-operator index 47ae93615..6eeb7cbed 160000 --- a/otelcollector/opentelemetry-operator +++ b/otelcollector/opentelemetry-operator @@ -1 +1 @@ -Subproject commit 47ae93615e97b1b09d2eade17e95ac86730c03e4 +Subproject commit 6eeb7cbed032c72d3ab8150b57613ed403a79f43 From 9a4062846b83215c8ea176ce45e74bf1fc0fcf81 Mon Sep 17 00:00:00 2001 From: rashmichandrashekar Date: Thu, 7 Sep 2023 10:35:16 -0700 Subject: [PATCH 023/242] Changes for fallback toggle and cfgmap (#586) --- .../prometheus-config-merger-with-operator.rb | 592 ++++++++++++++++++ .../prometheus-config-merger.rb | 67 +- ...omlparser-prometheus-collector-settings.rb | 33 +- .../templates/ama-metrics-deployment.yaml | 2 + .../ama-metrics-targetallocator.yaml | 27 +- .../values-template.yaml | 6 +- .../prom-config-validator-builder/main.go | 9 +- otelcollector/scripts/configmap-parser.sh | 6 +- otelcollector/scripts/main.sh | 2 +- .../telegraf-prometheus-collector.conf | 1 + 10 files changed, 669 insertions(+), 76 deletions(-) create mode 100644 otelcollector/configmapparser/prometheus-config-merger-with-operator.rb diff --git a/otelcollector/configmapparser/prometheus-config-merger-with-operator.rb b/otelcollector/configmapparser/prometheus-config-merger-with-operator.rb new file mode 100644 index 000000000..b3f674b51 --- /dev/null +++ b/otelcollector/configmapparser/prometheus-config-merger-with-operator.rb @@ -0,0 +1,592 @@ +#!/usr/local/bin/ruby +# frozen_string_literal: true + +require "tomlrb" +require "deep_merge" +require "yaml" +require_relative "ConfigParseErrorLogger" + +LOGGING_PREFIX = "prometheus-config-merger-with-operator" +@configMapMountPath = "/etc/config/settings/prometheus/prometheus-config" +@promMergedConfigPath = "/opt/promMergedConfig.yml" +@mergedDefaultConfigPath = "/opt/defaultsMergedConfig.yml" +@replicasetControllerType = "replicaset" +@daemonsetControllerType = "daemonset" +@configReaderSidecarContainerType = "configreadersidecar" +@supportedSchemaVersion = true +@defaultPromConfigPathPrefix = "/opt/microsoft/otelcollector/default-prom-configs/" +@regexHashFile = "/opt/microsoft/configmapparser/config_def_targets_metrics_keep_list_hash" +@regexHash = {} +@sendDSUpMetric = false +@intervalHashFile = "/opt/microsoft/configmapparser/config_def_targets_scrape_intervals_hash" +@intervalHash = {} + +@kubeletDefaultFileRsSimple = @defaultPromConfigPathPrefix + "kubeletDefaultRsSimple.yml" +@kubeletDefaultFileRsAdvanced = @defaultPromConfigPathPrefix + "kubeletDefaultRsAdvanced.yml" +@kubeletDefaultFileDs = @defaultPromConfigPathPrefix + "kubeletDefaultDs.yml" +@kubeletDefaultFileRsAdvancedWindowsDaemonset = @defaultPromConfigPathPrefix + "kubeletDefaultRsAdvancedWindowsDaemonset.yml" +@corednsDefaultFile = @defaultPromConfigPathPrefix + "corednsDefault.yml" +@cadvisorDefaultFileRsSimple = @defaultPromConfigPathPrefix + "cadvisorDefaultRsSimple.yml" +@cadvisorDefaultFileRsAdvanced = @defaultPromConfigPathPrefix + "cadvisorDefaultRsAdvanced.yml" +@cadvisorDefaultFileDs = @defaultPromConfigPathPrefix + "cadvisorDefaultDs.yml" +@kubeproxyDefaultFile = @defaultPromConfigPathPrefix + "kubeproxyDefault.yml" +@apiserverDefaultFile = @defaultPromConfigPathPrefix + "apiserverDefault.yml" +@kubestateDefaultFile = @defaultPromConfigPathPrefix + "kubestateDefault.yml" +@nodeexporterDefaultFileRsSimple = @defaultPromConfigPathPrefix + "nodeexporterDefaultRsSimple.yml" +@nodeexporterDefaultFileRsAdvanced = @defaultPromConfigPathPrefix + "nodeexporterDefaultRsAdvanced.yml" +@nodeexporterDefaultFileDs = @defaultPromConfigPathPrefix + "nodeexporterDefaultDs.yml" +@prometheusCollectorHealthDefaultFile = @defaultPromConfigPathPrefix + "prometheusCollectorHealth.yml" +@windowsexporterDefaultRsSimpleFile = @defaultPromConfigPathPrefix + "windowsexporterDefaultRsSimple.yml" +@windowsexporterDefaultDsFile = @defaultPromConfigPathPrefix + "windowsexporterDefaultDs.yml" +@windowskubeproxyDefaultFileRsSimpleFile = @defaultPromConfigPathPrefix + "windowskubeproxyDefaultRsSimple.yml" +@windowskubeproxyDefaultDsFile = @defaultPromConfigPathPrefix + "windowskubeproxyDefaultDs.yml" +@podannotationsDefaultFile = @defaultPromConfigPathPrefix + "podannotationsDefault.yml" +@windowskubeproxyDefaultRsAdvancedFile = @defaultPromConfigPathPrefix + "windowskubeproxyDefaultRsAdvanced.yml" +@kappiebasicDefaultFileDs = @defaultPromConfigPathPrefix + "kappieBasicDefaultDs.yml" + +def parseConfigMap + begin + # Check to see if config map is created + if (File.file?(@configMapMountPath)) + ConfigParseErrorLogger.log(LOGGING_PREFIX, "Custom prometheus config exists") + config = File.read(@configMapMountPath) + ConfigParseErrorLogger.log(LOGGING_PREFIX, "Successfully parsed configmap for prometheus config") + return config + else + ConfigParseErrorLogger.logWarning(LOGGING_PREFIX, "Custom prometheus config does not exist, using only default scrape targets if they are enabled") + return "" + end + rescue => errorStr + ConfigParseErrorLogger.logError(LOGGING_PREFIX, "Exception while parsing configmap for prometheus config: #{errorStr}. Custom prometheus config will not be used. Please check configmap for errors") + return "" + end +end + +def loadRegexHash + begin + @regexHash = YAML.load_file(@regexHashFile) + rescue => errorStr + ConfigParseErrorLogger.logError(LOGGING_PREFIX, "Exception in loadRegexHash for prometheus config: #{errorStr}. Keep list regexes will not be used") + end +end + +def loadIntervalHash + begin + @intervalHash = YAML.load_file(@intervalHashFile) + rescue => errorStr + ConfigParseErrorLogger.logError(LOGGING_PREFIX, "Exception in loadIntervalHash for prometheus config: #{errorStr}. Scrape interval will not be used") + end +end + +def isConfigReaderSidecar + if !ENV["CONTAINER_TYPE"].nil? && !ENV["CONTAINER_TYPE"].empty? + currentContainerType = ENV["CONTAINER_TYPE"].strip.downcase + if !currentContainerType.nil? && currentContainerType == @configReaderSidecarContainerType + return true + end + end + return false +end + +def UpdateScrapeIntervalConfig(yamlConfigFile, scrapeIntervalSetting) + begin + ConfigParseErrorLogger.log(LOGGING_PREFIX, "Updating scrape interval config for #{yamlConfigFile}") + config = YAML.load(File.read(yamlConfigFile)) + scrapeIntervalConfig = scrapeIntervalSetting + + # Iterate through each scrape config and update scrape interval config + if !config.nil? + scrapeConfigs = config["scrape_configs"] + if !scrapeConfigs.nil? && !scrapeConfigs.empty? + scrapeConfigs.each { |scfg| + scrapeCfgs = scfg["scrape_interval"] + if !scrapeCfgs.nil? + scfg["scrape_interval"] = scrapeIntervalConfig + end + } + cfgYamlWithScrapeConfig = YAML::dump(config) + File.open(yamlConfigFile, "w") { |file| file.puts cfgYamlWithScrapeConfig } + end + end + rescue => errorStr + ConfigParseErrorLogger.logError(LOGGING_PREFIX, "Exception while updating scrape interval config in default target file - #{yamlConfigFile} : #{errorStr}. The Scrape interval will not be used") + end +end + +def AppendMetricRelabelConfig(yamlConfigFile, keepListRegex) + begin + ConfigParseErrorLogger.log(LOGGING_PREFIX, "Adding keep list regex or minimal ingestion regex for #{yamlConfigFile}") + config = YAML.load(File.read(yamlConfigFile)) + keepListMetricRelabelConfig = [{ "source_labels" => ["__name__"], "action" => "keep", "regex" => keepListRegex }] + + # Iterate through each scrape config and append metric relabel config for keep list + if !config.nil? + scrapeConfigs = config["scrape_configs"] + if !scrapeConfigs.nil? && !scrapeConfigs.empty? + scrapeConfigs.each { |scfg| + metricRelabelCfgs = scfg["metric_relabel_configs"] + if metricRelabelCfgs.nil? + scfg["metric_relabel_configs"] = keepListMetricRelabelConfig + else + scfg["metric_relabel_configs"] = metricRelabelCfgs.concat(keepListMetricRelabelConfig) + end + } + cfgYamlWithMetricRelabelConfig = YAML::dump(config) + File.open(yamlConfigFile, "w") { |file| file.puts cfgYamlWithMetricRelabelConfig } + end + end + rescue => errorStr + ConfigParseErrorLogger.logError(LOGGING_PREFIX, "Exception while appending metric relabel config in default target file - #{yamlConfigFile} : #{errorStr}. The keep list regex will not be used") + end +end + +def AppendRelabelConfig(yamlConfigFile, relabelConfig, keepRegex) + begin + ConfigParseErrorLogger.log(LOGGING_PREFIX, "Adding relabel config for #{yamlConfigFile}") + config = YAML.load(File.read(yamlConfigFile)) + + # Iterate through each scrape config and append metric relabel config for keep list + if !config.nil? + scrapeConfigs = config["scrape_configs"] + if !scrapeConfigs.nil? && !scrapeConfigs.empty? + scrapeConfigs.each { |scfg| + relabelCfgs = scfg["relabel_configs"] + if relabelCfgs.nil? + scfg["relabel_configs"] = relabelConfig + else + scfg["relabel_configs"] = relabelCfgs.concat(relabelConfig) + end + } + cfgYamlWithRelabelConfig = YAML::dump(config) + File.open(yamlConfigFile, "w") { |file| file.puts cfgYamlWithRelabelConfig } + end + end + rescue => errorStr + ConfigParseErrorLogger.logError(LOGGING_PREFIX, "Exception while appending relabel config in default target file - #{yamlConfigFile} : #{errorStr}. The keep list regex will not be used") + end +end + +# Get the list of default configs to be included in the otel's prometheus config +def populateDefaultPrometheusConfig + begin + # check if running in daemonset or replicaset + currentControllerType = "" + if !ENV["CONTROLLER_TYPE"].nil? && !ENV["CONTROLLER_TYPE"].empty? + currentControllerType = ENV["CONTROLLER_TYPE"].strip.downcase + end + advancedMode = false #default is false + windowsDaemonset = false #default is false + + # get current mode (advanced or not...) + if !ENV["MODE"].nil? && !ENV["MODE"].empty? + currentMode = ENV["MODE"].strip.downcase + if currentMode == "advanced" + advancedMode = true + end + end + + # get if windowsdaemonset is enabled or not (ie. WINMODE env = advanced or not...) + if !ENV["WINMODE"].nil? && !ENV["WINMODE"].empty? + winMode = ENV["WINMODE"].strip.downcase + if winMode == "advanced" + windowsDaemonset = true + end + end + + defaultConfigs = [] + if !ENV["AZMON_PROMETHEUS_KUBELET_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_KUBELET_SCRAPING_ENABLED"].downcase == "true" + kubeletMetricsKeepListRegex = @regexHash["KUBELET_METRICS_KEEP_LIST_REGEX"] + kubeletScrapeInterval = @intervalHash["KUBELET_SCRAPE_INTERVAL"] + if isConfigReaderSidecar + if advancedMode == false + UpdateScrapeIntervalConfig(@kubeletDefaultFileRsSimple, kubeletScrapeInterval) + if !kubeletMetricsKeepListRegex.nil? && !kubeletMetricsKeepListRegex.empty? + AppendMetricRelabelConfig(@kubeletDefaultFileRsSimple, kubeletMetricsKeepListRegex) + end + defaultConfigs.push(@kubeletDefaultFileRsSimple) + elsif windowsDaemonset == true && @sendDSUpMetric == true + UpdateScrapeIntervalConfig(@kubeletDefaultFileRsAdvancedWindowsDaemonset, kubeletScrapeInterval) + defaultConfigs.push(@kubeletDefaultFileRsAdvancedWindowsDaemonset) + elsif @sendDSUpMetric == true + UpdateScrapeIntervalConfig(@kubeletDefaultFileRsAdvanced, kubeletScrapeInterval) + defaultConfigs.push(@kubeletDefaultFileRsAdvanced) + end + else + if advancedMode == true && currentControllerType == @daemonsetControllerType && (windowsDaemonset == true || ENV["OS_TYPE"].downcase == "linux") + UpdateScrapeIntervalConfig(@kubeletDefaultFileDs, kubeletScrapeInterval) + if !kubeletMetricsKeepListRegex.nil? && !kubeletMetricsKeepListRegex.empty? + AppendMetricRelabelConfig(@kubeletDefaultFileDs, kubeletMetricsKeepListRegex) + end + contents = File.read(@kubeletDefaultFileDs) + contents = contents.gsub("$$NODE_IP$$", ENV["NODE_IP"]) + contents = contents.gsub("$$NODE_NAME$$", ENV["NODE_NAME"]) + contents = contents.gsub("$$OS_TYPE$$", ENV["OS_TYPE"]) + File.open(@kubeletDefaultFileDs, "w") { |file| file.puts contents } + defaultConfigs.push(@kubeletDefaultFileDs) + end + end + end + if !ENV["AZMON_PROMETHEUS_COREDNS_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_COREDNS_SCRAPING_ENABLED"].downcase == "true" && isConfigReaderSidecar + corednsMetricsKeepListRegex = @regexHash["COREDNS_METRICS_KEEP_LIST_REGEX"] + corednsScrapeInterval = @intervalHash["COREDNS_SCRAPE_INTERVAL"] + UpdateScrapeIntervalConfig(@corednsDefaultFile, corednsScrapeInterval) + if !corednsMetricsKeepListRegex.nil? && !corednsMetricsKeepListRegex.empty? + AppendMetricRelabelConfig(@corednsDefaultFile, corednsMetricsKeepListRegex) + end + defaultConfigs.push(@corednsDefaultFile) + end + if !ENV["AZMON_PROMETHEUS_CADVISOR_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_CADVISOR_SCRAPING_ENABLED"].downcase == "true" + cadvisorMetricsKeepListRegex = @regexHash["CADVISOR_METRICS_KEEP_LIST_REGEX"] + cadvisorScrapeInterval = @intervalHash["CADVISOR_SCRAPE_INTERVAL"] + if isConfigReaderSidecar + if advancedMode == false + UpdateScrapeIntervalConfig(@cadvisorDefaultFileRsSimple, cadvisorScrapeInterval) + if !cadvisorMetricsKeepListRegex.nil? && !cadvisorMetricsKeepListRegex.empty? + AppendMetricRelabelConfig(@cadvisorDefaultFileRsSimple, cadvisorMetricsKeepListRegex) + end + defaultConfigs.push(@cadvisorDefaultFileRsSimple) + elsif @sendDSUpMetric == true + UpdateScrapeIntervalConfig(@cadvisorDefaultFileRsAdvanced, cadvisorScrapeInterval) + defaultConfigs.push(@cadvisorDefaultFileRsAdvanced) + end + else + if advancedMode == true && ENV["OS_TYPE"].downcase == "linux" && currentControllerType == @daemonsetControllerType + UpdateScrapeIntervalConfig(@cadvisorDefaultFileDs, cadvisorScrapeInterval) + if !cadvisorMetricsKeepListRegex.nil? && !cadvisorMetricsKeepListRegex.empty? + AppendMetricRelabelConfig(@cadvisorDefaultFileDs, cadvisorMetricsKeepListRegex) + end + contents = File.read(@cadvisorDefaultFileDs) + contents = contents.gsub("$$NODE_IP$$", ENV["NODE_IP"]) + contents = contents.gsub("$$NODE_NAME$$", ENV["NODE_NAME"]) + File.open(@cadvisorDefaultFileDs, "w") { |file| file.puts contents } + defaultConfigs.push(@cadvisorDefaultFileDs) + end + end + end + if !ENV["AZMON_PROMETHEUS_KUBEPROXY_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_KUBEPROXY_SCRAPING_ENABLED"].downcase == "true" && isConfigReaderSidecar + kubeproxyMetricsKeepListRegex = @regexHash["KUBEPROXY_METRICS_KEEP_LIST_REGEX"] + kubeproxyScrapeInterval = @intervalHash["KUBEPROXY_SCRAPE_INTERVAL"] + UpdateScrapeIntervalConfig(@kubeproxyDefaultFile, kubeproxyScrapeInterval) + if !kubeproxyMetricsKeepListRegex.nil? && !kubeproxyMetricsKeepListRegex.empty? + AppendMetricRelabelConfig(@kubeproxyDefaultFile, kubeproxyMetricsKeepListRegex) + end + defaultConfigs.push(@kubeproxyDefaultFile) + end + if !ENV["AZMON_PROMETHEUS_APISERVER_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_APISERVER_SCRAPING_ENABLED"].downcase == "true" && isConfigReaderSidecar + apiserverMetricsKeepListRegex = @regexHash["APISERVER_METRICS_KEEP_LIST_REGEX"] + apiserverScrapeInterval = @intervalHash["APISERVER_SCRAPE_INTERVAL"] + UpdateScrapeIntervalConfig(@apiserverDefaultFile, apiserverScrapeInterval) + if !apiserverMetricsKeepListRegex.nil? && !apiserverMetricsKeepListRegex.empty? + AppendMetricRelabelConfig(@apiserverDefaultFile, apiserverMetricsKeepListRegex) + end + defaultConfigs.push(@apiserverDefaultFile) + end + if !ENV["AZMON_PROMETHEUS_KUBESTATE_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_KUBESTATE_SCRAPING_ENABLED"].downcase == "true" && isConfigReaderSidecar + kubestateMetricsKeepListRegex = @regexHash["KUBESTATE_METRICS_KEEP_LIST_REGEX"] + kubestateScrapeInterval = @intervalHash["KUBESTATE_SCRAPE_INTERVAL"] + UpdateScrapeIntervalConfig(@kubestateDefaultFile, kubestateScrapeInterval) + if !kubestateMetricsKeepListRegex.nil? && !kubestateMetricsKeepListRegex.empty? + AppendMetricRelabelConfig(@kubestateDefaultFile, kubestateMetricsKeepListRegex) + end + contents = File.read(@kubestateDefaultFile) + contents = contents.gsub("$$KUBE_STATE_NAME$$", ENV["KUBE_STATE_NAME"]) + contents = contents.gsub("$$POD_NAMESPACE$$", ENV["POD_NAMESPACE"]) + File.open(@kubestateDefaultFile, "w") { |file| file.puts contents } + defaultConfigs.push(@kubestateDefaultFile) + end + if !ENV["AZMON_PROMETHEUS_NODEEXPORTER_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_NODEEXPORTER_SCRAPING_ENABLED"].downcase == "true" + nodeexporterMetricsKeepListRegex = @regexHash["NODEEXPORTER_METRICS_KEEP_LIST_REGEX"] + nodeexporterScrapeInterval = @intervalHash["NODEEXPORTER_SCRAPE_INTERVAL"] + if isConfigReaderSidecar + if advancedMode == true && @sendDSUpMetric == true + UpdateScrapeIntervalConfig(@nodeexporterDefaultFileRsAdvanced, nodeexporterScrapeInterval) + contents = File.read(@nodeexporterDefaultFileRsAdvanced) + contents = contents.gsub("$$NODE_EXPORTER_NAME$$", ENV["NODE_EXPORTER_NAME"]) + contents = contents.gsub("$$POD_NAMESPACE$$", ENV["POD_NAMESPACE"]) + File.open(@nodeexporterDefaultFileRsAdvanced, "w") { |file| file.puts contents } + defaultConfigs.push(@nodeexporterDefaultFileRsAdvanced) + elsif advancedMode == false + UpdateScrapeIntervalConfig(@nodeexporterDefaultFileRsSimple, nodeexporterScrapeInterval) + if !nodeexporterMetricsKeepListRegex.nil? && !nodeexporterMetricsKeepListRegex.empty? + AppendMetricRelabelConfig(@nodeexporterDefaultFileRsSimple, nodeexporterMetricsKeepListRegex) + end + contents = File.read(@nodeexporterDefaultFileRsSimple) + contents = contents.gsub("$$NODE_EXPORTER_NAME$$", ENV["NODE_EXPORTER_NAME"]) + contents = contents.gsub("$$POD_NAMESPACE$$", ENV["POD_NAMESPACE"]) + File.open(@nodeexporterDefaultFileRsSimple, "w") { |file| file.puts contents } + defaultConfigs.push(@nodeexporterDefaultFileRsSimple) + end + else + if advancedMode == true && ENV["OS_TYPE"].downcase == "linux" && currentControllerType == @daemonsetControllerType + UpdateScrapeIntervalConfig(@nodeexporterDefaultFileDs, nodeexporterScrapeInterval) + if !nodeexporterMetricsKeepListRegex.nil? && !nodeexporterMetricsKeepListRegex.empty? + AppendMetricRelabelConfig(@nodeexporterDefaultFileDs, nodeexporterMetricsKeepListRegex) + end + contents = File.read(@nodeexporterDefaultFileDs) + contents = contents.gsub("$$NODE_IP$$", ENV["NODE_IP"]) + contents = contents.gsub("$$NODE_EXPORTER_TARGETPORT$$", ENV["NODE_EXPORTER_TARGETPORT"]) + contents = contents.gsub("$$NODE_NAME$$", ENV["NODE_NAME"]) + File.open(@nodeexporterDefaultFileDs, "w") { |file| file.puts contents } + defaultConfigs.push(@nodeexporterDefaultFileDs) + end + end + end + + if !ENV["AZMON_PROMETHEUS_KAPPIEBASIC_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_KAPPIEBASIC_SCRAPING_ENABLED"].downcase == "true" + kappiebasicMetricsKeepListRegex = @regexHash["KAPPIEBASIC_METRICS_KEEP_LIST_REGEX"] + kappiebasicScrapeInterval = @intervalHash["KAPPIEBASIC_SCRAPE_INTERVAL"] + if isConfigReaderSidecar + #do nothing -- kappie is not supported to be scrapped automatically outside ds. if needed, customer can disable this ds target, and enable rs scraping thru custom config map + elsif currentControllerType == @daemonsetControllerType #kappie scraping will be turned ON by default only when in MAC/addon mode (for both windows & linux) + if advancedMode == true && !ENV["MAC"].nil? && !ENV["MAC"].empty? && ENV["MAC"].strip.downcase == "true" #&& ENV["OS_TYPE"].downcase == "linux" + UpdateScrapeIntervalConfig(@kappiebasicDefaultFileDs, kappiebasicScrapeInterval) + if !kappiebasicMetricsKeepListRegex.nil? && !kappiebasicMetricsKeepListRegex.empty? + AppendMetricRelabelConfig(@kappiebasicDefaultFileDs, kappiebasicMetricsKeepListRegex) + end + contents = File.read(@kappiebasicDefaultFileDs) + contents = contents.gsub("$$NODE_IP$$", ENV["NODE_IP"]) + contents = contents.gsub("$$NODE_NAME$$", ENV["NODE_NAME"]) + File.open(@kappiebasicDefaultFileDs, "w") { |file| file.puts contents } + defaultConfigs.push(@kappiebasicDefaultFileDs) + end + end + end + + # Collector health config should be enabled or disabled for both replicaset and daemonset + if !ENV["AZMON_PROMETHEUS_COLLECTOR_HEALTH_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_COLLECTOR_HEALTH_SCRAPING_ENABLED"].downcase == "true" + prometheusCollectorHealthInterval = @intervalHash["PROMETHEUS_COLLECTOR_HEALTH_SCRAPE_INTERVAL"] + UpdateScrapeIntervalConfig(@prometheusCollectorHealthDefaultFile, prometheusCollectorHealthInterval) + defaultConfigs.push(@prometheusCollectorHealthDefaultFile) + end + + if !ENV["AZMON_PROMETHEUS_WINDOWSEXPORTER_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_WINDOWSEXPORTER_SCRAPING_ENABLED"].downcase == "true" + winexporterMetricsKeepListRegex = @regexHash["WINDOWSEXPORTER_METRICS_KEEP_LIST_REGEX"] + windowsexporterScrapeInterval = @intervalHash["WINDOWSEXPORTER_SCRAPE_INTERVAL"] + # Not adding the isConfigReaderSidecar check instead of replicaset check since this is legacy 1P chart path and not relevant anymore. + if currentControllerType == @replicasetControllerType && advancedMode == false && ENV["OS_TYPE"].downcase == "linux" + UpdateScrapeIntervalConfig(@windowsexporterDefaultRsSimpleFile, windowsexporterScrapeInterval) + if !winexporterMetricsKeepListRegex.nil? && !winexporterMetricsKeepListRegex.empty? + AppendMetricRelabelConfig(@windowsexporterDefaultRsSimpleFile, winexporterMetricsKeepListRegex) + end + contents = File.read(@windowsexporterDefaultRsSimpleFile) + contents = contents.gsub("$$NODE_IP$$", ENV["NODE_IP"]) + contents = contents.gsub("$$NODE_NAME$$", ENV["NODE_NAME"]) + File.open(@windowsexporterDefaultRsSimpleFile, "w") { |file| file.puts contents } + defaultConfigs.push(@windowsexporterDefaultRsSimpleFile) + elsif currentControllerType == @daemonsetControllerType && advancedMode == true && windowsDaemonset == true && ENV["OS_TYPE"].downcase == "windows" + UpdateScrapeIntervalConfig(@windowsexporterDefaultDsFile, windowsexporterScrapeInterval) + if !winexporterMetricsKeepListRegex.nil? && !winexporterMetricsKeepListRegex.empty? + AppendMetricRelabelConfig(@windowsexporterDefaultDsFile, winexporterMetricsKeepListRegex) + end + contents = File.read(@windowsexporterDefaultDsFile) + contents = contents.gsub("$$NODE_IP$$", ENV["NODE_IP"]) + contents = contents.gsub("$$NODE_NAME$$", ENV["NODE_NAME"]) + File.open(@windowsexporterDefaultDsFile, "w") { |file| file.puts contents } + defaultConfigs.push(@windowsexporterDefaultDsFile) + + # If advanced mode is enabled, but not the windows daemonset, scrape windows kubelet from the replicaset as if it's simple mode + elsif isConfigReaderSidecar + UpdateScrapeIntervalConfig(@windowsexporterDefaultRsSimpleFile, windowsexporterScrapeInterval) + if !winexporterMetricsKeepListRegex.nil? && !winexporterMetricsKeepListRegex.empty? + AppendMetricRelabelConfig(@windowsexporterDefaultRsSimpleFile, winexporterMetricsKeepListRegex) + end + defaultConfigs.push(@windowsexporterDefaultRsSimpleFile) + end + end + + if !ENV["AZMON_PROMETHEUS_WINDOWSKUBEPROXY_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_WINDOWSKUBEPROXY_SCRAPING_ENABLED"].downcase == "true" + winkubeproxyMetricsKeepListRegex = @regexHash["WINDOWSKUBEPROXY_METRICS_KEEP_LIST_REGEX"] + windowskubeproxyScrapeInterval = @intervalHash["WINDOWSKUBEPROXY_SCRAPE_INTERVAL"] + # Not adding the isConfigReaderSidecar check instead of replicaset check since this is legacy 1P chart path and not relevant anymore. + if currentControllerType == @replicasetControllerType && advancedMode == false && ENV["OS_TYPE"].downcase == "linux" + UpdateScrapeIntervalConfig(@windowskubeproxyDefaultFileRsSimpleFile, windowskubeproxyScrapeInterval) + if !winkubeproxyMetricsKeepListRegex.nil? && !winkubeproxyMetricsKeepListRegex.empty? + AppendMetricRelabelConfig(@windowskubeproxyDefaultFileRsSimpleFile, winkubeproxyMetricsKeepListRegex) + end + contents = File.read(@windowskubeproxyDefaultFileRsSimpleFile) + contents = contents.gsub("$$NODE_IP$$", ENV["NODE_IP"]) + contents = contents.gsub("$$NODE_NAME$$", ENV["NODE_NAME"]) + File.open(@windowskubeproxyDefaultFileRsSimpleFile, "w") { |file| file.puts contents } + defaultConfigs.push(@windowskubeproxyDefaultFileRsSimpleFile) + elsif currentControllerType == @daemonsetControllerType && advancedMode == true && windowsDaemonset == true && ENV["OS_TYPE"].downcase == "windows" + UpdateScrapeIntervalConfig(@windowskubeproxyDefaultDsFile, windowskubeproxyScrapeInterval) + if !winkubeproxyMetricsKeepListRegex.nil? && !winkubeproxyMetricsKeepListRegex.empty? + AppendMetricRelabelConfig(@windowskubeproxyDefaultDsFile, winkubeproxyMetricsKeepListRegex) + end + contents = File.read(@windowskubeproxyDefaultDsFile) + contents = contents.gsub("$$NODE_IP$$", ENV["NODE_IP"]) + contents = contents.gsub("$$NODE_NAME$$", ENV["NODE_NAME"]) + File.open(@windowskubeproxyDefaultDsFile, "w") { |file| file.puts contents } + defaultConfigs.push(@windowskubeproxyDefaultDsFile) + + # If advanced mode is enabled, but not the windows daemonset, scrape windows kubelet from the replicaset as if it's simple mode + elsif isConfigReaderSidecar + UpdateScrapeIntervalConfig(@windowskubeproxyDefaultFileRsSimpleFile, windowskubeproxyScrapeInterval) + if !winkubeproxyMetricsKeepListRegex.nil? && !winkubeproxyMetricsKeepListRegex.empty? + AppendMetricRelabelConfig(@windowskubeproxyDefaultFileRsSimpleFile, winkubeproxyMetricsKeepListRegex) + end + defaultConfigs.push(@windowskubeproxyDefaultFileRsSimpleFile) + end + end + + if !ENV["AZMON_PROMETHEUS_POD_ANNOTATION_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_POD_ANNOTATION_SCRAPING_ENABLED"].downcase == "true" && isConfigReaderSidecar + podannotationNamespacesRegex = ENV["AZMON_PROMETHEUS_POD_ANNOTATION_NAMESPACES_REGEX"] + podannotationMetricsKeepListRegex = @regexHash["POD_ANNOTATION_METRICS_KEEP_LIST_REGEX"] + podannotationScrapeInterval = @intervalHash["POD_ANNOTATION_SCRAPE_INTERVAL"] + UpdateScrapeIntervalConfig(@podannotationsDefaultFile, podannotationScrapeInterval) + if !podannotationMetricsKeepListRegex.nil? && !podannotationMetricsKeepListRegex.empty? + AppendMetricRelabelConfig(@podannotationsDefaultFile, podannotationMetricsKeepListRegex) + end + if !podannotationNamespacesRegex.nil? && !podannotationNamespacesRegex.empty? + relabelConfig = [{ "source_labels" => ["__meta_kubernetes_namespace"], "action" => "keep", "regex" => podannotationNamespacesRegex }] + AppendRelabelConfig(@podannotationsDefaultFile, relabelConfig, podannotationNamespacesRegex) + end + defaultConfigs.push(@podannotationsDefaultFile) + end + + @mergedDefaultConfigs = mergeDefaultScrapeConfigs(defaultConfigs) + rescue => errorStr + ConfigParseErrorLogger.logError(LOGGING_PREFIX, "Exception while merging default scrape targets - #{errorStr}. No default scrape targets will be included") + @mergedDefaultConfigs = "" + end +end + +def mergeDefaultScrapeConfigs(defaultScrapeConfigs) + mergedDefaultConfigs = "" + begin + if defaultScrapeConfigs.length > 0 + mergedDefaultConfigs = YAML.load("scrape_configs:") + # Load each of the default scrape configs and merge them + defaultScrapeConfigs.each { |defaultScrapeConfig| + # Load yaml from default config + defaultConfigYaml = YAML.load(File.read(defaultScrapeConfig)) + mergedDefaultConfigs = mergedDefaultConfigs.deep_merge!(defaultConfigYaml) + } + end + ConfigParseErrorLogger.log(LOGGING_PREFIX, "Done merging #{defaultScrapeConfigs.length} default prometheus config(s)") + rescue => errorStr + ConfigParseErrorLogger.logError(LOGGING_PREFIX, "Exception while adding default scrape config- #{errorStr}. No default scrape targets will be included") + mergedDefaultConfigs = "" + end + return mergedDefaultConfigs +end + +def mergeDefaultAndCustomScrapeConfigs(customPromConfig) + mergedConfigYaml = "" + begin + if !@mergedDefaultConfigs.nil? && !@mergedDefaultConfigs.empty? + ConfigParseErrorLogger.log(LOGGING_PREFIX, "Merging default and custom scrape configs") + customPrometheusConfig = YAML.load(customPromConfig) + mergedConfigs = @mergedDefaultConfigs.deep_merge!(customPrometheusConfig) + mergedConfigYaml = YAML::dump(mergedConfigs) + ConfigParseErrorLogger.log(LOGGING_PREFIX, "Done merging default scrape config(s) with custom prometheus config, writing them to file") + else + ConfigParseErrorLogger.logWarning(LOGGING_PREFIX, "The merged default scrape config is nil or empty, using only custom scrape config") + mergedConfigYaml = customPromConfig + end + File.open(@promMergedConfigPath, "w") { |file| file.puts mergedConfigYaml } + rescue => errorStr + ConfigParseErrorLogger.logError(LOGGING_PREFIX, "Exception while merging default and custom scrape configs- #{errorStr}") + end +end + +#this will enforce num labels, label name length & label value length for every scrape job to be with-in azure monitor supported limits +# by injecting these into every custom scrape job's config. For default scrape jobs, this is already included in them. We do this here, so the config validation can happen after we inject these into the custom scrape jobs . +def setLabelLimitsPerScrape(prometheusConfigString) + customConfig = prometheusConfigString + ConfigParseErrorLogger.log(LOGGING_PREFIX, "setLabelLimitsPerScrape()") + begin + if !customConfig.nil? && !customConfig.empty? + limitedCustomConfig = YAML.load(customConfig) + limitedCustomscrapes = limitedCustomConfig["scrape_configs"] + if !limitedCustomscrapes.nil? && !limitedCustomscrapes.empty? + limitedCustomscrapes.each { |scrape| + scrape["label_limit"] = 63 + scrape["label_name_length_limit"] = 511 + scrape["label_value_length_limit"] = 1023 + ConfigParseErrorLogger.log(LOGGING_PREFIX, " Successfully set label limits in custom scrape config for job #{scrape["job_name"]}") + } + ConfigParseErrorLogger.log(LOGGING_PREFIX, "Done setting label limits for custom scrape config ...") + return YAML::dump(limitedCustomConfig) + else + ConfigParseErrorLogger.logWarning(LOGGING_PREFIX, "No Jobs found to set label limits while processing custom scrape config") + return prometheusConfigString + end + else + ConfigParseErrorLogger.logWarning(LOGGING_PREFIX, "Nothing to set for label limits while processing custom scrape config") + return prometheusConfigString + end + rescue => errStr + ConfigParseErrorLogger.logError(LOGGING_PREFIX, "Exception when setting label limits while processing custom scrape config - #{errStr}") + return prometheusConfigString + end +end + +# Populate default scrape config(s) if AZMON_PROMETHEUS_NO_DEFAULT_SCRAPING_ENABLED is set to false +# and write them as a collector config file, in case the custom config validation fails, +# and we need to fall back to defaults +def writeDefaultScrapeTargetsFile() + ConfigParseErrorLogger.logSection(LOGGING_PREFIX, "Start Merging Default and Custom Prometheus Config") + if !ENV["AZMON_PROMETHEUS_NO_DEFAULT_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_NO_DEFAULT_SCRAPING_ENABLED"].downcase == "false" + begin + loadRegexHash + loadIntervalHash + populateDefaultPrometheusConfig + if !@mergedDefaultConfigs.nil? && !@mergedDefaultConfigs.empty? + ConfigParseErrorLogger.log(LOGGING_PREFIX, "Starting to merge default prometheus config values in collector template as backup") + mergedDefaultConfigYaml = YAML::dump(@mergedDefaultConfigs) + File.open(@mergedDefaultConfigPath, "w") { |file| file.puts mergedDefaultConfigYaml } + end + rescue => errorStr + ConfigParseErrorLogger.logError(LOGGING_PREFIX, "Error while populating default scrape targets and writing them to the default scrape targets file") + end + end +end + +def setDefaultFileScrapeInterval(scrapeInterval) + defaultFilesArray = [ + @kubeletDefaultFileRsSimple, @kubeletDefaultFileRsAdvanced, @kubeletDefaultFileDs, @kubeletDefaultFileRsAdvancedWindowsDaemonset, + @corednsDefaultFile, @cadvisorDefaultFileRsSimple, @cadvisorDefaultFileRsAdvanced, @cadvisorDefaultFileDs, @kubeproxyDefaultFile, + @apiserverDefaultFile, @kubestateDefaultFile, @nodeexporterDefaultFileRsSimple, @nodeexporterDefaultFileRsAdvanced, @nodeexporterDefaultFileDs, + @prometheusCollectorHealthDefaultFile, @windowsexporterDefaultRsSimpleFile, @windowsexporterDefaultDsFile, + @windowskubeproxyDefaultFileRsSimpleFile, @windowskubeproxyDefaultDsFile, @podannotationsDefaultFile, + ] + + defaultFilesArray.each { |currentFile| + contents = File.read(currentFile) + contents = contents.gsub("$$SCRAPE_INTERVAL$$", scrapeInterval) + File.open(currentFile, "w") { |file| file.puts contents } + } +end + +def setGlobalScrapeConfigInDefaultFilesIfExists(configString) + customConfig = YAML.load(configString) + # set scrape interval to 30s for updating the default merged config + scrapeInterval = "30s" + if customConfig.has_key?("global") && customConfig["global"].has_key?("scrape_interval") + scrapeInterval = customConfig["global"]["scrape_interval"] + # Checking to see if the duration matches the pattern specified in the prometheus config + # Link to documenation with regex pattern -> https://prometheus.io/docs/prometheus/latest/configuration/configuration/#configuration-file + matched = /^((([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?|0)$/.match(scrapeInterval) + if !matched + # set default global scrape interval to 1m if its not in the proper format + customConfig["global"]["scrape_interval"] = "1m" + scrapeInterval = "30s" + end + end + setDefaultFileScrapeInterval(scrapeInterval) + return YAML::dump(customConfig) +end + +prometheusConfigString = parseConfigMap +if !prometheusConfigString.nil? && !prometheusConfigString.empty? + modifiedPrometheusConfigString = setGlobalScrapeConfigInDefaultFilesIfExists(prometheusConfigString) + writeDefaultScrapeTargetsFile() + #set label limits for every custom scrape job, before merging the default & custom config + labellimitedconfigString = setLabelLimitsPerScrape(modifiedPrometheusConfigString) + mergeDefaultAndCustomScrapeConfigs(labellimitedconfigString) +else + setDefaultFileScrapeInterval("30s") + writeDefaultScrapeTargetsFile() +end +ConfigParseErrorLogger.logSection(LOGGING_PREFIX, "Done Merging Default and Custom Prometheus Config") diff --git a/otelcollector/configmapparser/prometheus-config-merger.rb b/otelcollector/configmapparser/prometheus-config-merger.rb index b465d199c..c0c9c6808 100644 --- a/otelcollector/configmapparser/prometheus-config-merger.rb +++ b/otelcollector/configmapparser/prometheus-config-merger.rb @@ -12,7 +12,6 @@ @mergedDefaultConfigPath = "/opt/defaultsMergedConfig.yml" @replicasetControllerType = "replicaset" @daemonsetControllerType = "daemonset" -@configReaderSidecarContainerType = "configreadersidecar" @supportedSchemaVersion = true @defaultPromConfigPathPrefix = "/opt/microsoft/otelcollector/default-prom-configs/" @regexHashFile = "/opt/microsoft/configmapparser/config_def_targets_metrics_keep_list_hash" @@ -78,16 +77,6 @@ def loadIntervalHash end end -def isConfigReaderSidecar - if !ENV["CONTAINER_TYPE"].nil? && !ENV["CONTAINER_TYPE"].empty? - currentContainerType = ENV["CONTAINER_TYPE"].strip.downcase - if !currentContainerType.nil? && currentContainerType == @configReaderSidecarContainerType - return true - end - end - return false -end - def UpdateScrapeIntervalConfig(yamlConfigFile, scrapeIntervalSetting) begin ConfigParseErrorLogger.log(LOGGING_PREFIX, "Updating scrape interval config for #{yamlConfigFile}") @@ -170,34 +159,28 @@ def AppendRelabelConfig(yamlConfigFile, relabelConfig, keepRegex) def populateDefaultPrometheusConfig begin # check if running in daemonset or replicaset - currentControllerType = "" - if !ENV["CONTROLLER_TYPE"].nil? && !ENV["CONTROLLER_TYPE"].empty? - currentControllerType = ENV["CONTROLLER_TYPE"].strip.downcase - end + currentControllerType = ENV["CONTROLLER_TYPE"].strip.downcase + advancedMode = false #default is false windowsDaemonset = false #default is false # get current mode (advanced or not...) - if !ENV["MODE"].nil? && !ENV["MODE"].empty? - currentMode = ENV["MODE"].strip.downcase - if currentMode == "advanced" - advancedMode = true - end + currentMode = ENV["MODE"].strip.downcase + if currentMode == "advanced" + advancedMode = true end # get if windowsdaemonset is enabled or not (ie. WINMODE env = advanced or not...) - if !ENV["WINMODE"].nil? && !ENV["WINMODE"].empty? - winMode = ENV["WINMODE"].strip.downcase - if winMode == "advanced" - windowsDaemonset = true - end + winMode = ENV["WINMODE"].strip.downcase + if winMode == "advanced" + windowsDaemonset = true end defaultConfigs = [] if !ENV["AZMON_PROMETHEUS_KUBELET_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_KUBELET_SCRAPING_ENABLED"].downcase == "true" kubeletMetricsKeepListRegex = @regexHash["KUBELET_METRICS_KEEP_LIST_REGEX"] kubeletScrapeInterval = @intervalHash["KUBELET_SCRAPE_INTERVAL"] - if isConfigReaderSidecar + if currentControllerType == @replicasetControllerType if advancedMode == false UpdateScrapeIntervalConfig(@kubeletDefaultFileRsSimple, kubeletScrapeInterval) if !kubeletMetricsKeepListRegex.nil? && !kubeletMetricsKeepListRegex.empty? @@ -212,7 +195,7 @@ def populateDefaultPrometheusConfig defaultConfigs.push(@kubeletDefaultFileRsAdvanced) end else - if advancedMode == true && currentControllerType == @daemonsetControllerType && (windowsDaemonset == true || ENV["OS_TYPE"].downcase == "linux") + if advancedMode == true && (windowsDaemonset == true || ENV["OS_TYPE"].downcase == "linux") UpdateScrapeIntervalConfig(@kubeletDefaultFileDs, kubeletScrapeInterval) if !kubeletMetricsKeepListRegex.nil? && !kubeletMetricsKeepListRegex.empty? AppendMetricRelabelConfig(@kubeletDefaultFileDs, kubeletMetricsKeepListRegex) @@ -226,7 +209,7 @@ def populateDefaultPrometheusConfig end end end - if !ENV["AZMON_PROMETHEUS_COREDNS_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_COREDNS_SCRAPING_ENABLED"].downcase == "true" && isConfigReaderSidecar + if !ENV["AZMON_PROMETHEUS_COREDNS_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_COREDNS_SCRAPING_ENABLED"].downcase == "true" && currentControllerType == @replicasetControllerType corednsMetricsKeepListRegex = @regexHash["COREDNS_METRICS_KEEP_LIST_REGEX"] corednsScrapeInterval = @intervalHash["COREDNS_SCRAPE_INTERVAL"] UpdateScrapeIntervalConfig(@corednsDefaultFile, corednsScrapeInterval) @@ -238,7 +221,7 @@ def populateDefaultPrometheusConfig if !ENV["AZMON_PROMETHEUS_CADVISOR_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_CADVISOR_SCRAPING_ENABLED"].downcase == "true" cadvisorMetricsKeepListRegex = @regexHash["CADVISOR_METRICS_KEEP_LIST_REGEX"] cadvisorScrapeInterval = @intervalHash["CADVISOR_SCRAPE_INTERVAL"] - if isConfigReaderSidecar + if currentControllerType == @replicasetControllerType if advancedMode == false UpdateScrapeIntervalConfig(@cadvisorDefaultFileRsSimple, cadvisorScrapeInterval) if !cadvisorMetricsKeepListRegex.nil? && !cadvisorMetricsKeepListRegex.empty? @@ -250,7 +233,7 @@ def populateDefaultPrometheusConfig defaultConfigs.push(@cadvisorDefaultFileRsAdvanced) end else - if advancedMode == true && ENV["OS_TYPE"].downcase == "linux" && currentControllerType == @daemonsetControllerType + if advancedMode == true && ENV["OS_TYPE"].downcase == "linux" UpdateScrapeIntervalConfig(@cadvisorDefaultFileDs, cadvisorScrapeInterval) if !cadvisorMetricsKeepListRegex.nil? && !cadvisorMetricsKeepListRegex.empty? AppendMetricRelabelConfig(@cadvisorDefaultFileDs, cadvisorMetricsKeepListRegex) @@ -263,7 +246,7 @@ def populateDefaultPrometheusConfig end end end - if !ENV["AZMON_PROMETHEUS_KUBEPROXY_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_KUBEPROXY_SCRAPING_ENABLED"].downcase == "true" && isConfigReaderSidecar + if !ENV["AZMON_PROMETHEUS_KUBEPROXY_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_KUBEPROXY_SCRAPING_ENABLED"].downcase == "true" && currentControllerType == @replicasetControllerType kubeproxyMetricsKeepListRegex = @regexHash["KUBEPROXY_METRICS_KEEP_LIST_REGEX"] kubeproxyScrapeInterval = @intervalHash["KUBEPROXY_SCRAPE_INTERVAL"] UpdateScrapeIntervalConfig(@kubeproxyDefaultFile, kubeproxyScrapeInterval) @@ -272,7 +255,7 @@ def populateDefaultPrometheusConfig end defaultConfigs.push(@kubeproxyDefaultFile) end - if !ENV["AZMON_PROMETHEUS_APISERVER_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_APISERVER_SCRAPING_ENABLED"].downcase == "true" && isConfigReaderSidecar + if !ENV["AZMON_PROMETHEUS_APISERVER_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_APISERVER_SCRAPING_ENABLED"].downcase == "true" && currentControllerType == @replicasetControllerType apiserverMetricsKeepListRegex = @regexHash["APISERVER_METRICS_KEEP_LIST_REGEX"] apiserverScrapeInterval = @intervalHash["APISERVER_SCRAPE_INTERVAL"] UpdateScrapeIntervalConfig(@apiserverDefaultFile, apiserverScrapeInterval) @@ -281,7 +264,7 @@ def populateDefaultPrometheusConfig end defaultConfigs.push(@apiserverDefaultFile) end - if !ENV["AZMON_PROMETHEUS_KUBESTATE_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_KUBESTATE_SCRAPING_ENABLED"].downcase == "true" && isConfigReaderSidecar + if !ENV["AZMON_PROMETHEUS_KUBESTATE_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_KUBESTATE_SCRAPING_ENABLED"].downcase == "true" && currentControllerType == @replicasetControllerType kubestateMetricsKeepListRegex = @regexHash["KUBESTATE_METRICS_KEEP_LIST_REGEX"] kubestateScrapeInterval = @intervalHash["KUBESTATE_SCRAPE_INTERVAL"] UpdateScrapeIntervalConfig(@kubestateDefaultFile, kubestateScrapeInterval) @@ -297,7 +280,7 @@ def populateDefaultPrometheusConfig if !ENV["AZMON_PROMETHEUS_NODEEXPORTER_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_NODEEXPORTER_SCRAPING_ENABLED"].downcase == "true" nodeexporterMetricsKeepListRegex = @regexHash["NODEEXPORTER_METRICS_KEEP_LIST_REGEX"] nodeexporterScrapeInterval = @intervalHash["NODEEXPORTER_SCRAPE_INTERVAL"] - if isConfigReaderSidecar + if currentControllerType == @replicasetControllerType if advancedMode == true && @sendDSUpMetric == true UpdateScrapeIntervalConfig(@nodeexporterDefaultFileRsAdvanced, nodeexporterScrapeInterval) contents = File.read(@nodeexporterDefaultFileRsAdvanced) @@ -317,7 +300,7 @@ def populateDefaultPrometheusConfig defaultConfigs.push(@nodeexporterDefaultFileRsSimple) end else - if advancedMode == true && ENV["OS_TYPE"].downcase == "linux" && currentControllerType == @daemonsetControllerType + if advancedMode == true && ENV["OS_TYPE"].downcase == "linux" UpdateScrapeIntervalConfig(@nodeexporterDefaultFileDs, nodeexporterScrapeInterval) if !nodeexporterMetricsKeepListRegex.nil? && !nodeexporterMetricsKeepListRegex.empty? AppendMetricRelabelConfig(@nodeexporterDefaultFileDs, nodeexporterMetricsKeepListRegex) @@ -335,10 +318,10 @@ def populateDefaultPrometheusConfig if !ENV["AZMON_PROMETHEUS_KAPPIEBASIC_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_KAPPIEBASIC_SCRAPING_ENABLED"].downcase == "true" kappiebasicMetricsKeepListRegex = @regexHash["KAPPIEBASIC_METRICS_KEEP_LIST_REGEX"] kappiebasicScrapeInterval = @intervalHash["KAPPIEBASIC_SCRAPE_INTERVAL"] - if isConfigReaderSidecar + if currentControllerType == @replicasetControllerType #do nothing -- kappie is not supported to be scrapped automatically outside ds. if needed, customer can disable this ds target, and enable rs scraping thru custom config map - elsif currentControllerType == @daemonsetControllerType #kappie scraping will be turned ON by default only when in MAC/addon mode (for both windows & linux) - if advancedMode == true && !ENV["MAC"].nil? && !ENV["MAC"].empty? && ENV["MAC"].strip.downcase == "true" #&& ENV["OS_TYPE"].downcase == "linux" + else #kappie scraping will be turned ON by default only when in MAC/addon mode (for both windows & linux) + if advancedMode == true && !ENV['MAC'].nil? && !ENV['MAC'].empty? && ENV['MAC'].strip.downcase == "true" #&& ENV["OS_TYPE"].downcase == "linux" UpdateScrapeIntervalConfig(@kappiebasicDefaultFileDs, kappiebasicScrapeInterval) if !kappiebasicMetricsKeepListRegex.nil? && !kappiebasicMetricsKeepListRegex.empty? AppendMetricRelabelConfig(@kappiebasicDefaultFileDs, kappiebasicMetricsKeepListRegex) @@ -362,7 +345,6 @@ def populateDefaultPrometheusConfig if !ENV["AZMON_PROMETHEUS_WINDOWSEXPORTER_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_WINDOWSEXPORTER_SCRAPING_ENABLED"].downcase == "true" winexporterMetricsKeepListRegex = @regexHash["WINDOWSEXPORTER_METRICS_KEEP_LIST_REGEX"] windowsexporterScrapeInterval = @intervalHash["WINDOWSEXPORTER_SCRAPE_INTERVAL"] - # Not adding the isConfigReaderSidecar check instead of replicaset check since this is legacy 1P chart path and not relevant anymore. if currentControllerType == @replicasetControllerType && advancedMode == false && ENV["OS_TYPE"].downcase == "linux" UpdateScrapeIntervalConfig(@windowsexporterDefaultRsSimpleFile, windowsexporterScrapeInterval) if !winexporterMetricsKeepListRegex.nil? && !winexporterMetricsKeepListRegex.empty? @@ -385,7 +367,7 @@ def populateDefaultPrometheusConfig defaultConfigs.push(@windowsexporterDefaultDsFile) # If advanced mode is enabled, but not the windows daemonset, scrape windows kubelet from the replicaset as if it's simple mode - elsif isConfigReaderSidecar + elsif currentControllerType == @replicasetControllerType && advancedMode == true && windowsDaemonset == false && ENV["OS_TYPE"].downcase == "linux" UpdateScrapeIntervalConfig(@windowsexporterDefaultRsSimpleFile, windowsexporterScrapeInterval) if !winexporterMetricsKeepListRegex.nil? && !winexporterMetricsKeepListRegex.empty? AppendMetricRelabelConfig(@windowsexporterDefaultRsSimpleFile, winexporterMetricsKeepListRegex) @@ -397,7 +379,6 @@ def populateDefaultPrometheusConfig if !ENV["AZMON_PROMETHEUS_WINDOWSKUBEPROXY_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_WINDOWSKUBEPROXY_SCRAPING_ENABLED"].downcase == "true" winkubeproxyMetricsKeepListRegex = @regexHash["WINDOWSKUBEPROXY_METRICS_KEEP_LIST_REGEX"] windowskubeproxyScrapeInterval = @intervalHash["WINDOWSKUBEPROXY_SCRAPE_INTERVAL"] - # Not adding the isConfigReaderSidecar check instead of replicaset check since this is legacy 1P chart path and not relevant anymore. if currentControllerType == @replicasetControllerType && advancedMode == false && ENV["OS_TYPE"].downcase == "linux" UpdateScrapeIntervalConfig(@windowskubeproxyDefaultFileRsSimpleFile, windowskubeproxyScrapeInterval) if !winkubeproxyMetricsKeepListRegex.nil? && !winkubeproxyMetricsKeepListRegex.empty? @@ -420,7 +401,7 @@ def populateDefaultPrometheusConfig defaultConfigs.push(@windowskubeproxyDefaultDsFile) # If advanced mode is enabled, but not the windows daemonset, scrape windows kubelet from the replicaset as if it's simple mode - elsif isConfigReaderSidecar + elsif currentControllerType == @replicasetControllerType && advancedMode == true && windowsDaemonset == false && ENV["OS_TYPE"].downcase == "linux" UpdateScrapeIntervalConfig(@windowskubeproxyDefaultFileRsSimpleFile, windowskubeproxyScrapeInterval) if !winkubeproxyMetricsKeepListRegex.nil? && !winkubeproxyMetricsKeepListRegex.empty? AppendMetricRelabelConfig(@windowskubeproxyDefaultFileRsSimpleFile, winkubeproxyMetricsKeepListRegex) @@ -429,7 +410,7 @@ def populateDefaultPrometheusConfig end end - if !ENV["AZMON_PROMETHEUS_POD_ANNOTATION_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_POD_ANNOTATION_SCRAPING_ENABLED"].downcase == "true" && isConfigReaderSidecar + if !ENV["AZMON_PROMETHEUS_POD_ANNOTATION_SCRAPING_ENABLED"].nil? && ENV["AZMON_PROMETHEUS_POD_ANNOTATION_SCRAPING_ENABLED"].downcase == "true" && currentControllerType == @replicasetControllerType podannotationNamespacesRegex = ENV["AZMON_PROMETHEUS_POD_ANNOTATION_NAMESPACES_REGEX"] podannotationMetricsKeepListRegex = @regexHash["POD_ANNOTATION_METRICS_KEEP_LIST_REGEX"] podannotationScrapeInterval = @intervalHash["POD_ANNOTATION_SCRAPE_INTERVAL"] diff --git a/otelcollector/configmapparser/tomlparser-prometheus-collector-settings.rb b/otelcollector/configmapparser/tomlparser-prometheus-collector-settings.rb index a5b57afb4..ab486d0e7 100644 --- a/otelcollector/configmapparser/tomlparser-prometheus-collector-settings.rb +++ b/otelcollector/configmapparser/tomlparser-prometheus-collector-settings.rb @@ -15,6 +15,7 @@ @clusterAlias = "" # user provided alias (thru config map or chart param) @clusterLabel = "" # value of the 'cluster' label in every time series scraped +@isOperatorEnabled = "" # Use parser to parse the configmap toml file to a ruby structure def parseConfigMap @@ -49,7 +50,7 @@ def populateSettingValuesFromConfigMap(parsedConfig) if !parsedConfig.nil? && !parsedConfig[:cluster_alias].nil? @clusterAlias = parsedConfig[:cluster_alias].strip ConfigParseErrorLogger.log(LOGGING_PREFIX, "Got configmap setting for cluster_alias:#{@clusterAlias}") - @clusterAlias = @clusterAlias.gsub(/[^0-9a-z]/i, '_') #replace all non alpha-numeric characters with "_" -- this is to ensure that all down stream places where this is used (like collector, telegraf config etc are keeping up with sanity) + @clusterAlias = @clusterAlias.gsub(/[^0-9a-z]/i, "_") #replace all non alpha-numeric characters with "_" -- this is to ensure that all down stream places where this is used (like collector, telegraf config etc are keeping up with sanity) ConfigParseErrorLogger.log(LOGGING_PREFIX, "After g-subing configmap setting for cluster_alias:#{@clusterAlias}") end rescue => errorStr @@ -57,6 +58,15 @@ def populateSettingValuesFromConfigMap(parsedConfig) ConfigParseErrorLogger.logError(LOGGING_PREFIX, "Exception while reading config map settings for cluster_alias in prometheus collector settings- #{errorStr}, using defaults, please check config map for errors") end + # Safeguard to fall back to non operator model + begin + if !parsedConfig.nil? && !parsedConfig[:operator_enabled].nil? + @isOperatorEnabled = parsedConfig[:operator_enabled] + ConfigParseErrorLogger.log(LOGGING_PREFIX, "Configmap setting enabling operator: #{@isOperatorEnabled}") + end + rescue => errorStr + ConfigParseErrorLogger.logError(LOGGING_PREFIX, "Exception while reading config map settings for prometheus collector settings- #{errorStr}, using defaults, please check config map for errors") + end end @configSchemaVersion = ENV["AZMON_AGENT_CFG_SCHEMA_VERSION"] @@ -74,14 +84,14 @@ def populateSettingValuesFromConfigMap(parsedConfig) # get clustername from cluster's full ARM resourceid (to be used for mac mode as 'cluster' label) begin - if !ENV['MAC'].nil? && !ENV['MAC'].empty? && ENV['MAC'].strip.downcase == "true" - resourceArray=ENV['CLUSTER'].strip.split("/") - @clusterLabel=resourceArray[resourceArray.length - 1] + if !ENV["MAC"].nil? && !ENV["MAC"].empty? && ENV["MAC"].strip.downcase == "true" + resourceArray = ENV["CLUSTER"].strip.split("/") + @clusterLabel = resourceArray[resourceArray.length - 1] else - @clusterLabel=ENV['CLUSTER'] + @clusterLabel = ENV["CLUSTER"] end rescue => errorStr - @clusterLabel=ENV['CLUSTER'] + @clusterLabel = ENV["CLUSTER"] ConfigParseErrorLogger.logError(LOGGING_PREFIX, "Exception while parsing to determine cluster label from full cluster resource id in prometheus collector settings- #{errorStr}, using default as full CLUSTER passed-in '#{@clusterLabel}'") end @@ -99,16 +109,19 @@ def populateSettingValuesFromConfigMap(parsedConfig) file = File.open("/opt/microsoft/configmapparser/config_prometheus_collector_settings_env_var", "w") if !file.nil? - if !ENV['OS_TYPE'].nil? && ENV['OS_TYPE'].downcase == "linux" + if !ENV["OS_TYPE"].nil? && ENV["OS_TYPE"].downcase == "linux" file.write("export AZMON_DEFAULT_METRIC_ACCOUNT_NAME=#{@defaultMetricAccountName}\n") - file.write("export AZMON_CLUSTER_LABEL=#{@clusterLabel}\n") #used for cluster label value when scraping + file.write("export AZMON_CLUSTER_LABEL=#{@clusterLabel}\n") #used for cluster label value when scraping file.write("export AZMON_CLUSTER_ALIAS=#{@clusterAlias}\n") #used only for telemetry + if !@isOperatorEnabled.nil? && !@isOperatorEnabled.empty? && @isOperatorEnabled.length > 0 + file.write("export AZMON_OPERATOR_ENABLED=#{@isOperatorEnabled}\n") + end else file.write("AZMON_DEFAULT_METRIC_ACCOUNT_NAME=#{@defaultMetricAccountName}\n") - file.write("AZMON_CLUSTER_LABEL=#{@clusterLabel}\n") #used for cluster label value when scraping + file.write("AZMON_CLUSTER_LABEL=#{@clusterLabel}\n") #used for cluster label value when scraping file.write("AZMON_CLUSTER_ALIAS=#{@clusterAlias}\n") #used only for telemetry end - + file.close else ConfigParseErrorLogger.logError(LOGGING_PREFIX, "Exception while opening file for writing prometheus-collector config environment variables") diff --git a/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-deployment.yaml b/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-deployment.yaml index 708e74e13..5aca1f6aa 100644 --- a/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-deployment.yaml +++ b/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-deployment.yaml @@ -61,6 +61,8 @@ spec: value: "true" - name: AZMON_COLLECT_ENV value: "false" + - name: AZMON_OPERATOR_ENABLED + value: "false" - name: customEnvironment {{- if .Values.AzureMonitorMetrics.ArcExtension }} value: "{{ lower .Values.Azure.Cluster.Cloud }}" diff --git a/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-targetallocator.yaml b/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-targetallocator.yaml index e3cd03214..c5e7d8c83 100644 --- a/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-targetallocator.yaml +++ b/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/templates/ama-metrics-targetallocator.yaml @@ -13,6 +13,7 @@ spec: selector: matchLabels: rsName: ama-metrics-targetallocator + kubernetes.azure.com/managedby: aks strategy: rollingUpdate: maxSurge: 25% @@ -28,6 +29,16 @@ spec: containers: - args: - --enable-prometheus-cr-watcher + name: targetallocator + image: "mcr.microsoft.com{{ .Values.AzureMonitorMetrics.ImageRepository }}:{{ .Values.AzureMonitorMetrics.ImageTagTargetAllocator }}" + imagePullPolicy: IfNotPresent + resources: + limits: + cpu: 500m + memory: 1Gi + requests: + cpu: 10m + memory: 50Mi env: - name: OTELCOL_NAMESPACE valueFrom: @@ -50,16 +61,6 @@ spec: {{- end }} - name: PROMETHEUS_OPERATOR_V1_CUSTOM_GROUP value: "azmonitoring.coreos.com" - image: "mcr.microsoft.com{{ .Values.AzureMonitorMetrics.ImageRepository }}:{{ .Values.AzureMonitorMetrics.ImageTagTargetAllocator }}" - imagePullPolicy: IfNotPresent - name: targetallocator - resources: - limits: - cpu: 500m - memory: 1Gi - requests: - cpu: 10m - memory: 50Mi terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumeMounts: @@ -72,6 +73,9 @@ spec: initialDelaySeconds: 60 periodSeconds: 3 - name: config-reader + image: "mcr.microsoft.com{{ .Values.AzureMonitorMetrics.ImageRepository }}:{{ .Values.AzureMonitorMetrics.ImageTagCfg }}" + imagePullPolicy: IfNotPresent + resources: {} env: - name: CLUSTER {{- if .Values.AzureMonitorMetrics.ArcExtension }} @@ -131,9 +135,6 @@ spec: value: "" # WINDOWS: only supported mode is 'advanced', any other value will be the default/non-advance mode - name: MINIMAL_INGESTION_PROFILE value: "true" # only supported value is the string "true" - image: "mcr.microsoft.com{{ .Values.AzureMonitorMetrics.ImageRepository }}:{{ .Values.AzureMonitorMetrics.ImageTagCfg }}" - imagePullPolicy: IfNotPresent - resources: {} volumeMounts: - mountPath: /etc/config/settings name: settings-vol-config diff --git a/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values-template.yaml b/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values-template.yaml index e994906e2..ce0f47f81 100644 --- a/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values-template.yaml +++ b/otelcollector/deploy/addon-chart/azure-monitor-metrics-addon/values-template.yaml @@ -1,8 +1,8 @@ AzureMonitorMetrics: KubeStateMetrics: # Uncomment the below 2 settings if you want to pass in the labels and/or annotations - # MetricLabelsAllowlist: "*=[*]" - # MetricAnnotationsAllowList: "pods=[*],nodes=[*]" + #MetricLabelsAllowlist: "testlabel=[.*]" + #MetricAnnotationsAllowList: "" ImageRepository: "/oss/kubernetes/kube-state-metrics" # Kube-state-metrics ImageTag - 2.9.2, corresponds to chart version - 5.10.1 ImageTag: "v2.9.2" @@ -38,8 +38,6 @@ AzureMonitorMetrics: ImageRepository: ${MCR_REPOSITORY} ImageTag: ${IMAGE_TAG} ImageTagWin: ${IMAGE_TAG}-win - ImageTagTargetAllocator: ${IMAGE_TAG}-targetallocator - ImageTagCfg: ${IMAGE_TAG}-cfg # The below 2 settings are not Azure Monitor Metrics adapter chart. They are substituted in a different manner. # Please update these with the latest ones from here so that you get the image that is currently deployed by the AKS RP - # Repository: https://msazure.visualstudio.com/CloudNativeCompute/_git/aks-rp?path=/ccp/charts/addon-charts/azure-monitor-metrics-addon/templates/ama-metrics-daemonset.yaml&version=GBrashmi/prom-addon-arm64&line=136&lineEnd=136&lineStartColumn=56&lineEndColumn=85&lineStyle=plain&_a=contents diff --git a/otelcollector/prom-config-validator-builder/main.go b/otelcollector/prom-config-validator-builder/main.go index cf45608a2..10f730b5f 100644 --- a/otelcollector/prom-config-validator-builder/main.go +++ b/otelcollector/prom-config-validator-builder/main.go @@ -105,6 +105,7 @@ func generateOtelConfig(promFilePath string, outputFilePath string, otelConfigTe } controllerType := os.Getenv("CONTROLLER_TYPE") + isOperatorEnabled := os.Getenv("AZMON_OPERATOR_ENABLED") var prometheusConfig map[string]interface{} err = yaml.Unmarshal([]byte(promConfigFileContents), &prometheusConfig) @@ -127,7 +128,7 @@ func generateOtelConfig(promFilePath string, outputFilePath string, otelConfigTe if _, isString := relabelConfig["regex"].(string); isString { regexString := relabelConfig["regex"].(string) modifiedRegexString := strings.ReplaceAll(regexString, "$$", "$") - if strings.EqualFold(controllerType, daemonSetControllerType) { + if strings.EqualFold(controllerType, daemonSetControllerType) || strings.EqualFold(isOperatorEnabled, "false") { modifiedRegexString = strings.ReplaceAll(modifiedRegexString, "$", "$$") } relabelConfig["regex"] = modifiedRegexString @@ -137,7 +138,7 @@ func generateOtelConfig(promFilePath string, outputFilePath string, otelConfigTe if relabelConfig["replacement"] != nil { replacement := relabelConfig["replacement"].(string) modifiedReplacementString := strings.ReplaceAll(replacement, "$$", "$") - if strings.EqualFold(controllerType, daemonSetControllerType) { + if strings.EqualFold(controllerType, daemonSetControllerType) || strings.EqualFold(isOperatorEnabled, "false") { modifiedReplacementString = strings.ReplaceAll(modifiedReplacementString, "$", "$$") } relabelConfig["replacement"] = modifiedReplacementString @@ -155,7 +156,7 @@ func generateOtelConfig(promFilePath string, outputFilePath string, otelConfigTe if _, isString := metricRelabelConfig["regex"].(string); isString { regexString := metricRelabelConfig["regex"].(string) modifiedRegexString := strings.ReplaceAll(regexString, "$$", "$") - if strings.EqualFold(controllerType, daemonSetControllerType) { + if strings.EqualFold(controllerType, daemonSetControllerType) || strings.EqualFold(isOperatorEnabled, "false") { modifiedRegexString = strings.ReplaceAll(modifiedRegexString, "$", "$$") } metricRelabelConfig["regex"] = modifiedRegexString @@ -166,7 +167,7 @@ func generateOtelConfig(promFilePath string, outputFilePath string, otelConfigTe if metricRelabelConfig["replacement"] != nil { replacement := metricRelabelConfig["replacement"].(string) modifiedReplacementString := strings.ReplaceAll(replacement, "$$", "$") - if strings.EqualFold(controllerType, daemonSetControllerType) { + if strings.EqualFold(controllerType, daemonSetControllerType) || strings.EqualFold(isOperatorEnabled, "false") { modifiedReplacementString = strings.ReplaceAll(modifiedReplacementString, "$", "$$") } metricRelabelConfig["replacement"] = modifiedReplacementString diff --git a/otelcollector/scripts/configmap-parser.sh b/otelcollector/scripts/configmap-parser.sh index aaa4a29c6..b1c65e2d2 100644 --- a/otelcollector/scripts/configmap-parser.sh +++ b/otelcollector/scripts/configmap-parser.sh @@ -73,7 +73,11 @@ ruby /opt/microsoft/configmapparser/tomlparser-default-targets-metrics-keep-list ruby /opt/microsoft/configmapparser/tomlparser-scrape-interval.rb # Merge default and custom prometheus config -ruby /opt/microsoft/configmapparser/prometheus-config-merger.rb +if [ "${AZMON_OPERATOR_ENABLED}" == "true" ] || [ "${CONTAINER_TYPE}" == "ConfigReaderSidecar" ]; then + ruby /opt/microsoft/configmapparser/prometheus-config-merger-with-operator.rb +else + ruby /opt/microsoft/configmapparser/prometheus-config-merger.rb +fi echo "export AZMON_INVALID_CUSTOM_PROMETHEUS_CONFIG=false" >> ~/.bashrc export AZMON_INVALID_CUSTOM_PROMETHEUS_CONFIG=false diff --git a/otelcollector/scripts/main.sh b/otelcollector/scripts/main.sh index 654dce3f7..aeab0efa0 100644 --- a/otelcollector/scripts/main.sh +++ b/otelcollector/scripts/main.sh @@ -239,7 +239,7 @@ GOLANG_VERSION=`cat /opt/goversion.txt` echo_var "GOLANG_VERSION" "$GOLANG_VERSION" # Start otelcollector -if [ $controllerType = "replicaset" ]; then +if [ $controllerType = "replicaset" ] && [ "${AZMON_OPERATOR_ENABLED}" == "true" ]; then echo_warning "Starting otelcollector in replicaset with Target allocator settings" /opt/microsoft/otelcollector/otelcollector --config /opt/microsoft/otelcollector/collector-config-replicaset.yml &> /opt/microsoft/otelcollector/collector-log.txt & elif [ "$AZMON_USE_DEFAULT_PROMETHEUS_CONFIG" = "true" ]; then diff --git a/otelcollector/telegraf/telegraf-prometheus-collector.conf b/otelcollector/telegraf/telegraf-prometheus-collector.conf index 063ca63bd..1729b15d0 100644 --- a/otelcollector/telegraf/telegraf-prometheus-collector.conf +++ b/otelcollector/telegraf/telegraf-prometheus-collector.conf @@ -33,6 +33,7 @@ podname = "$POD_NAME" ostype = "$OS_TYPE" mip="$MINIMAL_INGESTION_PROFILE" + operatormodel="$AZMON_OPERATOR_ENABLED" # Configuration for telegraf agent [agent] From 8cb75ce6b472eafa289fe35d2a55c0b2615bcbe5 Mon Sep 17 00:00:00 2001 From: Grace Wehner Date: Thu, 7 Sep 2023 16:22:56 -0700 Subject: [PATCH 024/242] Remove submodules for TA and prom operator (#587) --- .gitmodules | 3 - .pipelines/azure-pipeline-build.yml | 3 +- .trivyignore | 1 + otelcollector/opentelemetry-operator | 1 - otelcollector/otel-allocator/Dockerfile | 44 + otelcollector/otel-allocator/Makefile | 9 + otelcollector/otel-allocator/README.md | 262 + .../allocation/allocatortest.go | 58 + .../allocation/consistent_hashing.go | 293 + .../allocation/consistent_hashing_test.go | 105 + .../allocation/least_weighted.go | 261 + .../allocation/least_weighted_test.go | 258 + .../otel-allocator/allocation/strategy.go | 133 + .../allocation/strategy_test.go | 136 + .../otel-allocator/collector/collector.go | 144 + .../collector/collector_test.go | 221 + otelcollector/otel-allocator/config/config.go | 140 + .../otel-allocator/config/config_test.go | 220 + .../config/testdata/config_test.yaml | 15 + .../config/testdata/file_sd_test.json | 18 + .../config/testdata/no_config.yaml | 0 .../testdata/pod_service_selector_test.yaml | 14 + otelcollector/otel-allocator/diff/diff.go | 63 + .../otel-allocator/diff/diff_test.go | 108 + otelcollector/otel-allocator/go.mod | 205 + otelcollector/otel-allocator/go.sum | 1127 + otelcollector/otel-allocator/header.txt | 13 + otelcollector/otel-allocator/main.go | 251 + .../otel-allocator/prehook/prehook.go | 64 + .../otel-allocator/prehook/relabel.go | 110 + .../otel-allocator/prehook/relabel_test.go | 270 + .../prometheus-operator/.editorconfig | 14 + .../prometheus-operator/.gitattributes | 1 + .../prometheus-operator/.github/CODEOWNERS | 4 + .../.github/ISSUE_TEMPLATE/bug.md | 52 + .../.github/ISSUE_TEMPLATE/config.yml | 8 + .../.github/ISSUE_TEMPLATE/feature.md | 29 + .../.github/ISSUE_TEMPLATE/support.md | 50 + .../.github/PULL_REQUEST_TEMPLATE.md | 33 + .../.github/dependabot.yml | 11 + .../prometheus-operator/.github/env | 3 + .../prometheus-operator/.github/lock.yml | 35 + .../.github/workflows/checks.yaml | 92 + .../.github/workflows/e2e.yaml | 107 + .../.github/workflows/publish.yaml | 57 + .../.github/workflows/release.yaml | 37 + .../.github/workflows/stale.yaml | 21 + .../.github/workflows/unit.yaml | 33 + .../prometheus-operator/.gitignore | 23 + .../prometheus-operator/.golangci.yml | 20 + .../prometheus-operator/.header | 13 + .../prometheus-operator/.mdox.validate.yaml | 30 + .../prometheus-operator/ADOPTERS.md | 324 + .../prometheus-operator/CHANGELOG.md | 1165 + .../otel-allocator/prometheus-operator/CNAME | 1 + .../prometheus-operator/CONTRIBUTING.md | 196 + .../otel-allocator/prometheus-operator/DCO | 36 + .../prometheus-operator/Dockerfile | 10 + .../Documentation/additional-scrape-config.md | 65 + .../prometheus-operator/Documentation/api.md | 23034 +++++++++ .../Documentation/compatibility.md | 85 + .../Documentation/custom-configuration.md | 28 + .../Documentation/design.md | 156 + .../Documentation/designs/prometheus-agent.md | 182 + .../Documentation/exposing-metrics.md | 20 + .../Documentation/high-availability.md | 34 + .../Documentation/img/architecture.png | Bin 0 -> 151171 bytes .../img/custom-metrics-elements.png | Bin 0 -> 166591 bytes .../logos/prometheus-operator-logo.png | Bin 0 -> 107555 bytes .../logos/prometheus-operator-logo.svg | 8 + .../Documentation/network-policies.md | 198 + .../Documentation/operator.md | 102 + .../proposals/202212-scrape-config.md | 166 + .../Documentation/rbac-crd.md | 55 + .../prometheus-operator/Documentation/rbac.md | 240 + .../Documentation/thanos.md | 123 + .../Documentation/troubleshooting.md | 161 + .../Documentation/user-guides/alerting.md | 345 + .../Documentation/user-guides/basic-auth.md | 44 + .../exposing-prometheus-and-alertmanager.md | 257 + .../user-guides/getting-started.md | 333 + .../Documentation/user-guides/linting.md | 46 + .../monitoring-kubernetes-ingress.md | 203 + .../user-guides/prometheus-agent.md | 177 + .../user-guides/running-exporters.md | 231 + .../user-guides/shards-and-replicas.md | 155 + .../Documentation/user-guides/storage.md | 206 + .../user-guides/strategic-merge-patch.md | 69 + .../Documentation/user-guides/webhook.md | 381 + .../prometheus-operator/LICENSE | 202 + .../prometheus-operator/MAINTAINERS.md | 49 + .../prometheus-operator/Makefile | 388 + .../otel-allocator/prometheus-operator/NOTICE | 5 + .../prometheus-operator/README.md | 235 + .../prometheus-operator/RELEASE.md | 132 + .../prometheus-operator/SECURITY.md | 5 + .../prometheus-operator/VERSION | 1 + .../prometheus-operator/bundle.yaml | 39211 ++++++++++++++++ .../cmd/admission-webhook/Dockerfile | 9 + .../cmd/admission-webhook/main.go | 257 + .../prometheus-operator/cmd/operator/main.go | 467 + .../cmd/operator/main_test.go | 46 + .../cmd/po-docgen/compatibility.go | 35 + .../prometheus-operator/cmd/po-docgen/main.go | 55 + .../prometheus-operator/cmd/po-lint/main.go | 202 + .../cmd/po-rule-migration/main.go | 132 + .../cmd/prometheus-config-reloader/Dockerfile | 9 + .../cmd/prometheus-config-reloader/main.go | 214 + .../prometheus-config-reloader/main_test.go | 83 + .../prometheus-operator/code-of-conduct.md | 40 + .../contrib/kube-prometheus/README.md | 38 + .../additional-scrape-configs.yaml | 9 + .../prometheus-additional.yaml | 3 + .../prometheus-cluster-role-binding.yaml | 12 + .../prometheus-cluster-role.yaml | 18 + .../prometheus-service-account.yaml | 4 + .../additional-scrape-configs/prometheus.yaml | 20 + .../example/admission-webhook/deployment.yaml | 77 + .../pod-disruption-budget.yaml | 13 + .../admission-webhook/service-account.yaml | 9 + .../admission-webhook/service-monitor.yaml | 16 + .../example/admission-webhook/service.yaml | 15 + .../alertmanager-crd-conversion/patch.json | 30 + .../example/alertmanager-webhook/Dockerfile | 7 + .../example/alertmanager-webhook/Makefile | 14 + .../example/alertmanager-webhook/README.md | 15 + .../example/alertmanager-webhook/main.go | 31 + .../example/mixin/alerts.yaml | 79 + .../example/networkpolicies/alertmanager.yaml | 42 + .../example/networkpolicies/grafana.yaml | 12 + .../networkpolicies/kube-state-metrics.yaml | 23 + .../networkpolicies/node-exporter.yaml | 23 + .../example/networkpolicies/prometheus.yaml | 13 + .../example/non-rbac/prometheus-operator.yaml | 48 + .../example/non-rbac/prometheus.yaml | 16 + ...toring.coreos.com_alertmanagerconfigs.yaml | 8891 ++++ .../monitoring.coreos.com_alertmanagers.yaml | 7249 +++ .../monitoring.coreos.com_podmonitors.yaml | 679 + .../monitoring.coreos.com_probes.yaml | 722 + ...onitoring.coreos.com_prometheusagents.yaml | 8265 ++++ .../monitoring.coreos.com_prometheuses.yaml | 9592 ++++ ...monitoring.coreos.com_prometheusrules.yaml | 130 + .../monitoring.coreos.com_scrapeconfigs.yaml | 356 + ...monitoring.coreos.com_servicemonitors.yaml | 709 + .../monitoring.coreos.com_thanosrulers.yaml | 6830 +++ ...toring.coreos.com_alertmanagerconfigs.yaml | 4480 ++ .../monitoring.coreos.com_alertmanagers.yaml | 7249 +++ .../monitoring.coreos.com_podmonitors.yaml | 679 + .../monitoring.coreos.com_probes.yaml | 722 + ...onitoring.coreos.com_prometheusagents.yaml | 8265 ++++ .../monitoring.coreos.com_prometheuses.yaml | 9592 ++++ ...monitoring.coreos.com_prometheusrules.yaml | 130 + .../monitoring.coreos.com_scrapeconfigs.yaml | 356 + ...monitoring.coreos.com_servicemonitors.yaml | 709 + .../monitoring.coreos.com_thanosrulers.yaml | 6830 +++ .../prometheus-cluster-role-binding.yaml | 12 + .../prometheus-cluster-role.yaml | 22 + .../prometheus-service-account.yaml | 4 + .../rbac/prometheus-agent/prometheus.yaml | 10 + ...prometheus-operator-crd-cluster-roles.yaml | 24 + ...metheus-operator-cluster-role-binding.yaml | 16 + .../prometheus-operator-cluster-role.yaml | 86 + .../prometheus-operator-deployment.yaml | 55 + .../prometheus-operator-service-account.yaml | 10 + .../prometheus-operator-service-monitor.yaml | 18 + .../prometheus-operator-service.yaml | 18 + .../prometheus-cluster-role-binding.yaml | 12 + .../prometheus/prometheus-cluster-role.yaml | 24 + .../prometheus-service-account.yaml | 4 + .../example/rbac/prometheus/prometheus.yaml | 17 + .../shards/example-app-deployment.yaml | 20 + .../shards/example-app-service-monitor.yaml | 12 + .../example/shards/example-app-service.yaml | 12 + .../prometheus-cluster-role-binding.yaml | 12 + .../shards/prometheus-cluster-role.yaml | 24 + .../shards/prometheus-service-account.yaml | 4 + .../example/shards/prometheus-service.yaml | 14 + .../example/shards/prometheus.yaml | 14 + .../example/storage/persisted-prometheus.yaml | 12 + .../example/storage/storageclass.yaml | 7 + .../prometheus-cluster-role-binding.yaml | 12 + .../thanos/prometheus-cluster-role.yaml | 27 + .../example/thanos/prometheus-rule.yaml | 15 + .../example/thanos/prometheus-service.yaml | 15 + .../thanos/prometheus-servicemonitor.yaml | 15 + .../example/thanos/prometheus.yaml | 18 + .../example/thanos/query-deployment.yaml | 32 + .../example/thanos/query-service.yaml | 14 + .../example/thanos/sidecar-service.yaml | 15 + .../example/thanos/thanos-ruler-service.yaml | 17 + .../example/thanos/thanos-ruler.yaml | 14 + .../alerting/alertmanager-config-example.yaml | 17 + ...er-example-alertmanager-configuration.yaml | 9 + .../alertmanager-example-service.yaml | 14 + .../alerting/alertmanager-example.yaml | 6 + .../alertmanager-selector-example.yaml | 9 + .../user-guides/alerting/alertmanager.yaml | 10 + ...theus-example-rule-namespace-selector.yaml | 22 + .../alerting/prometheus-example-rules.yaml | 14 + .../alerting/prometheus-example.yaml | 19 + .../example-app-deployment.yaml | 20 + .../example-app-pod-monitor.yaml | 12 + .../example-app-service-monitor.yaml | 12 + .../getting-started/example-app-service.yaml | 12 + .../getting-started/prometheus-admin-api.yaml | 13 + .../prometheus-pod-monitor.yaml | 13 + .../prometheus-service-monitor.yaml | 13 + .../getting-started/prometheus-service.yaml | 14 + .../otel-allocator/prometheus-operator/go.mod | 129 + .../otel-allocator/prometheus-operator/go.sum | 913 + .../prometheus-operator/governance.md | 191 + .../prometheus-operator/helm/README.md | 12 + .../prometheus-operator/internal/log/log.go | 95 + .../jsonnet/mixin/alerts.jsonnet | 3 + .../jsonnet/mixin/alerts/alerts.libsonnet | 128 + .../jsonnet/mixin/config.libsonnet | 7 + .../jsonnet/mixin/mixin.libsonnet | 2 + .../jsonnet/prometheus-operator/.gitignore | 2 + .../admission-webhook.libsonnet | 177 + .../alertmanagerconfigs-crd.json | 4706 ++ .../alertmanagerconfigs-v1beta1-crd.libsonnet | 4643 ++ .../alertmanagers-crd.json | 6443 +++ .../prometheus-operator/conversion.libsonnet | 39 + .../prometheus-operator/jsonnetfile.json | 4 + .../prometheus-operator/podmonitors-crd.json | 734 + .../prometheus-operator/probes-crd.json | 776 + .../prometheus-operator.libsonnet | 241 + .../prometheusagents-crd.json | 7407 +++ .../prometheus-operator/prometheuses-crd.json | 8776 ++++ .../prometheusrules-crd.json | 156 + .../scrapeconfigs-crd.json | 385 + .../servicemonitors-crd.json | 757 + .../prometheus-operator/thanosrulers-crd.json | 6036 +++ .../jsonnet/thanos/config.libsonnet | 279 + .../prometheus-operator/kustomization.yaml | 5 + .../pkg/admission/admission.go | 335 + .../pkg/admission/admission_test.go | 1201 + .../pkg/admission/admissiontypes.go | 43 + .../pkg/admission/jsonpatch.go | 55 + .../pkg/alertmanager/amcfg.go | 2054 + .../pkg/alertmanager/amcfg_test.go | 3737 ++ .../pkg/alertmanager/collector.go | 63 + .../pkg/alertmanager/operator.go | 1714 + .../pkg/alertmanager/operator_test.go | 1277 + .../pkg/alertmanager/statefulset.go | 841 + .../pkg/alertmanager/statefulset_test.go | 1194 + .../pkg/alertmanager/types.go | 398 + .../validation/v1alpha1/validation.go | 383 + .../validation/v1beta1/validation.go | 359 + .../validation/v1beta1/validation_test.go | 474 + .../pkg/alertmanager/validation/validation.go | 35 + .../validation/validation_test.go | 71 + .../pkg/apis/monitoring/go.mod | 27 + .../pkg/apis/monitoring/go.sum | 86 + .../pkg/apis/monitoring/register.go | 19 + .../apis/monitoring/v1/alertmanager_types.go | 391 + .../pkg/apis/monitoring/v1/doc.go | 18 + .../apis/monitoring/v1/podmonitor_types.go | 156 + .../monitoring/v1/podmonitor_types_test.go | 54 + .../pkg/apis/monitoring/v1/probe_types.go | 201 + .../apis/monitoring/v1/probe_types_test.go | 102 + .../apis/monitoring/v1/prometheus_types.go | 1456 + .../monitoring/v1/prometheusrule_types.go | 121 + .../pkg/apis/monitoring/v1/register.go | 78 + .../monitoring/v1/servicemonitor_types.go | 99 + .../v1/servicemonitor_types_test.go | 54 + .../pkg/apis/monitoring/v1/thanos_types.go | 294 + .../pkg/apis/monitoring/v1/types.go | 644 + .../pkg/apis/monitoring/v1/types_test.go | 275 + .../monitoring/v1/zz_generated.deepcopy.go | 2916 ++ .../alertmanager_config_conversion.go | 18 + .../v1alpha1/alertmanager_config_types.go | 1077 + .../pkg/apis/monitoring/v1alpha1/doc.go | 18 + .../v1alpha1/prometheusagent_types.go | 96 + .../pkg/apis/monitoring/v1alpha1/register.go | 59 + .../monitoring/v1alpha1/scrapeconfig_test.go | 55 + .../monitoring/v1alpha1/scrapeconfig_types.go | 153 + .../apis/monitoring/v1alpha1/validation.go | 350 + .../monitoring/v1alpha1/validation_test.go | 345 + .../v1alpha1/zz_generated.deepcopy.go | 1191 + .../v1beta1/alertmanager_config_types.go | 1079 + .../monitoring/v1beta1/conversion_from.go | 544 + .../apis/monitoring/v1beta1/conversion_to.go | 541 + .../pkg/apis/monitoring/v1beta1/doc.go | 18 + .../pkg/apis/monitoring/v1beta1/register.go | 55 + .../pkg/apis/monitoring/v1beta1/validation.go | 348 + .../monitoring/v1beta1/validation_test.go | 345 + .../v1beta1/zz_generated.deepcopy.go | 942 + .../prometheus-operator/pkg/assets/store.go | 363 + .../pkg/assets/store_test.go | 1041 + .../prometheus-operator/pkg/assets/types.go | 44 + .../prometheus-operator/pkg/assets/utils.go | 63 + .../applyconfiguration/internal/internal.go | 60 + .../monitoring/v1/alertingspec.go | 42 + .../monitoring/v1/alertmanager.go | 217 + .../v1/alertmanagerconfigmatcherstrategy.go | 37 + .../v1/alertmanagerconfiguration.go | 60 + .../monitoring/v1/alertmanagerendpoints.go | 141 + .../monitoring/v1/alertmanagerglobalconfig.go | 87 + .../monitoring/v1/alertmanagerspec.go | 488 + .../monitoring/v1/alertmanagerstatus.go | 87 + .../monitoring/v1/alertmanagerwebspec.go | 63 + .../monitoring/v1/apiserverconfig.go | 82 + .../v1/arbitraryfsaccessthroughsmsconfig.go | 37 + .../monitoring/v1/argument.go | 46 + .../monitoring/v1/attachmetadata.go | 37 + .../monitoring/v1/authorization.go | 58 + .../monitoring/v1/basicauth.go | 50 + .../monitoring/v1/commonprometheusfields.go | 691 + .../monitoring/v1/condition.go | 87 + .../monitoring/v1/embeddedobjectmetadata.go | 67 + .../v1/embeddedpersistentvolumeclaim.go | 117 + .../monitoring/v1/endpoint.go | 239 + .../monitoring/v1/exemplars.go | 37 + .../monitoring/v1/hostalias.go | 48 + .../monitoring/v1/httpconfig.go | 95 + .../monitoring/v1/metadataconfig.go | 50 + .../monitoring/v1/namespaceselector.go | 48 + .../monitoring/v1/oauth2.go | 85 + .../monitoring/v1/objectreference.go | 64 + .../monitoring/v1/podmetricsendpoint.go | 230 + .../v1/podmetricsendpointtlsconfig.go | 73 + .../monitoring/v1/podmonitor.go | 208 + .../monitoring/v1/podmonitorspec.go | 138 + .../applyconfiguration/monitoring/v1/probe.go | 208 + .../monitoring/v1/proberspec.go | 64 + .../monitoring/v1/probespec.go | 191 + .../monitoring/v1/probetargetingress.go | 65 + .../monitoring/v1/probetargets.go | 46 + .../monitoring/v1/probetargetstaticconfig.go | 72 + .../monitoring/v1/probetlsconfig.go | 73 + .../monitoring/v1/prometheus.go | 217 + .../monitoring/v1/prometheusrule.go | 208 + .../v1/prometheusruleexcludeconfig.go | 46 + .../monitoring/v1/prometheusrulespec.go | 42 + .../monitoring/v1/prometheusspec.go | 833 + .../monitoring/v1/prometheusstatus.go | 101 + .../monitoring/v1/prometheustracingconfig.go | 111 + .../monitoring/v1/prometheuswebspec.go | 63 + .../monitoring/v1/queryspec.go | 68 + .../monitoring/v1/queueconfig.go | 109 + .../monitoring/v1/relabelconfig.go | 97 + .../monitoring/v1/remotereadspec.go | 179 + .../monitoring/v1/remotewritespec.go | 196 + .../applyconfiguration/monitoring/v1/rule.go | 108 + .../monitoring/v1/rulegroup.go | 82 + .../applyconfiguration/monitoring/v1/rules.go | 37 + .../monitoring/v1/rulesalert.go | 55 + .../monitoring/v1/safeauthorization.go | 50 + .../monitoring/v1/safetlsconfig.go | 77 + .../monitoring/v1/secretorconfigmap.go | 50 + .../monitoring/v1/servicemonitor.go | 208 + .../monitoring/v1/servicemonitorspec.go | 149 + .../monitoring/v1/shardstatus.go | 73 + .../applyconfiguration/monitoring/v1/sigv4.go | 77 + .../monitoring/v1/storagespec.go | 68 + .../monitoring/v1/thanosruler.go | 217 + .../monitoring/v1/thanosrulerspec.go | 536 + .../monitoring/v1/thanosrulerstatus.go | 87 + .../monitoring/v1/thanosspec.go | 247 + .../monitoring/v1/tlsconfig.go | 100 + .../monitoring/v1/tsdbspec.go | 41 + .../monitoring/v1/webconfigfilefields.go | 46 + .../monitoring/v1/webhttpconfig.go | 46 + .../monitoring/v1/webhttpheaders.go | 73 + .../monitoring/v1/webtlsconfig.go | 117 + .../monitoring/v1alpha1/alertmanagerconfig.go | 208 + .../v1alpha1/alertmanagerconfigspec.go | 79 + .../monitoring/v1alpha1/dayofmonthrange.go | 46 + .../monitoring/v1alpha1/emailconfig.go | 164 + .../monitoring/v1alpha1/filesdconfig.go | 53 + .../monitoring/v1alpha1/httpconfig.go | 96 + .../monitoring/v1alpha1/httpsdconfig.go | 69 + .../monitoring/v1alpha1/inhibitrule.go | 67 + .../monitoring/v1alpha1/keyvalue.go | 46 + .../monitoring/v1alpha1/matcher.go | 68 + .../monitoring/v1alpha1/mutetimeinterval.go | 51 + .../monitoring/v1alpha1/opsgenieconfig.go | 177 + .../v1alpha1/opsgenieconfigresponder.go | 64 + .../monitoring/v1alpha1/pagerdutyconfig.go | 182 + .../v1alpha1/pagerdutyimageconfig.go | 55 + .../v1alpha1/pagerdutylinkconfig.go | 46 + .../monitoring/v1alpha1/prometheusagent.go | 218 + .../v1alpha1/prometheusagentspec.go | 626 + .../monitoring/v1alpha1/pushoverconfig.go | 149 + .../monitoring/v1alpha1/receiver.go | 177 + .../monitoring/v1alpha1/route.go | 135 + .../monitoring/v1alpha1/scrapeconfig.go | 208 + .../monitoring/v1alpha1/scrapeconfigspec.go | 134 + .../monitoring/v1alpha1/slackaction.go | 91 + .../monitoring/v1alpha1/slackconfig.go | 242 + .../v1alpha1/slackconfirmationfield.go | 64 + .../monitoring/v1alpha1/slackfield.go | 55 + .../monitoring/v1alpha1/snsconfig.go | 128 + .../monitoring/v1alpha1/staticconfig.go | 59 + .../monitoring/v1alpha1/telegramconfig.go | 104 + .../monitoring/v1alpha1/timeinterval.go | 93 + .../monitoring/v1alpha1/timerange.go | 50 + .../monitoring/v1alpha1/victoropsconfig.go | 127 + .../monitoring/v1alpha1/webhookconfig.go | 77 + .../monitoring/v1alpha1/wechatconfig.go | 131 + .../monitoring/v1beta1/alertmanagerconfig.go | 208 + .../v1beta1/alertmanagerconfigspec.go | 79 + .../monitoring/v1beta1/dayofmonthrange.go | 46 + .../monitoring/v1beta1/emailconfig.go | 163 + .../monitoring/v1beta1/httpconfig.go | 95 + .../monitoring/v1beta1/inhibitrule.go | 67 + .../monitoring/v1beta1/keyvalue.go | 46 + .../monitoring/v1beta1/matcher.go | 59 + .../monitoring/v1beta1/opsgenieconfig.go | 164 + .../v1beta1/opsgenieconfigresponder.go | 64 + .../monitoring/v1beta1/pagerdutyconfig.go | 178 + .../v1beta1/pagerdutyimageconfig.go | 55 + .../monitoring/v1beta1/pagerdutylinkconfig.go | 46 + .../monitoring/v1beta1/pushoverconfig.go | 145 + .../monitoring/v1beta1/receiver.go | 177 + .../monitoring/v1beta1/route.go | 135 + .../monitoring/v1beta1/secretkeyselector.go | 46 + .../monitoring/v1beta1/slackaction.go | 91 + .../monitoring/v1beta1/slackconfig.go | 238 + .../v1beta1/slackconfirmationfield.go | 64 + .../monitoring/v1beta1/slackfield.go | 55 + .../monitoring/v1beta1/snsconfig.go | 128 + .../monitoring/v1beta1/telegramconfig.go | 100 + .../monitoring/v1beta1/timeinterval.go | 51 + .../monitoring/v1beta1/timeperiod.go | 93 + .../monitoring/v1beta1/timerange.go | 50 + .../monitoring/v1beta1/victoropsconfig.go | 123 + .../monitoring/v1beta1/webhookconfig.go | 73 + .../monitoring/v1beta1/wechatconfig.go | 127 + .../pkg/client/applyconfiguration/utils.go | 315 + .../prometheus-operator/pkg/client/go.mod | 54 + .../prometheus-operator/pkg/client/go.sum | 266 + .../informers/externalversions/factory.go | 249 + .../informers/externalversions/generic.go | 86 + .../internalinterfaces/factory_interfaces.go | 38 + .../externalversions/monitoring/interface.go | 60 + .../monitoring/v1/alertmanager.go | 88 + .../monitoring/v1/interface.go | 85 + .../monitoring/v1/podmonitor.go | 88 + .../externalversions/monitoring/v1/probe.go | 88 + .../monitoring/v1/prometheus.go | 88 + .../monitoring/v1/prometheusrule.go | 88 + .../monitoring/v1/servicemonitor.go | 88 + .../monitoring/v1/thanosruler.go | 88 + .../monitoring/v1alpha1/alertmanagerconfig.go | 88 + .../monitoring/v1alpha1/interface.go | 57 + .../monitoring/v1alpha1/prometheusagent.go | 88 + .../monitoring/v1alpha1/scrapeconfig.go | 88 + .../monitoring/v1beta1/alertmanagerconfig.go | 88 + .../monitoring/v1beta1/interface.go | 43 + .../listers/monitoring/v1/alertmanager.go | 97 + .../monitoring/v1/expansion_generated.go | 73 + .../listers/monitoring/v1/podmonitor.go | 97 + .../pkg/client/listers/monitoring/v1/probe.go | 97 + .../listers/monitoring/v1/prometheus.go | 97 + .../listers/monitoring/v1/prometheusrule.go | 97 + .../listers/monitoring/v1/servicemonitor.go | 97 + .../listers/monitoring/v1/thanosruler.go | 97 + .../monitoring/v1alpha1/alertmanagerconfig.go | 97 + .../v1alpha1/expansion_generated.go | 41 + .../monitoring/v1alpha1/prometheusagent.go | 97 + .../monitoring/v1alpha1/scrapeconfig.go | 97 + .../monitoring/v1beta1/alertmanagerconfig.go | 97 + .../monitoring/v1beta1/expansion_generated.go | 25 + .../pkg/client/versioned/clientset.go | 144 + .../pkg/client/versioned/doc.go | 18 + .../versioned/fake/clientset_generated.go | 97 + .../pkg/client/versioned/fake/doc.go | 18 + .../pkg/client/versioned/fake/register.go | 58 + .../pkg/client/versioned/scheme/doc.go | 18 + .../pkg/client/versioned/scheme/register.go | 58 + .../typed/monitoring/v1/alertmanager.go | 254 + .../versioned/typed/monitoring/v1/doc.go | 18 + .../versioned/typed/monitoring/v1/fake/doc.go | 18 + .../monitoring/v1/fake/fake_alertmanager.go | 188 + .../v1/fake/fake_monitoring_client.go | 62 + .../monitoring/v1/fake/fake_podmonitor.go | 153 + .../typed/monitoring/v1/fake/fake_probe.go | 153 + .../monitoring/v1/fake/fake_prometheus.go | 188 + .../monitoring/v1/fake/fake_prometheusrule.go | 153 + .../monitoring/v1/fake/fake_servicemonitor.go | 153 + .../monitoring/v1/fake/fake_thanosruler.go | 188 + .../monitoring/v1/generated_expansion.go | 31 + .../typed/monitoring/v1/monitoring_client.go | 135 + .../typed/monitoring/v1/podmonitor.go | 206 + .../versioned/typed/monitoring/v1/probe.go | 206 + .../typed/monitoring/v1/prometheus.go | 254 + .../typed/monitoring/v1/prometheusrule.go | 206 + .../typed/monitoring/v1/servicemonitor.go | 206 + .../typed/monitoring/v1/thanosruler.go | 254 + .../monitoring/v1alpha1/alertmanagerconfig.go | 206 + .../typed/monitoring/v1alpha1/doc.go | 18 + .../typed/monitoring/v1alpha1/fake/doc.go | 18 + .../v1alpha1/fake/fake_alertmanagerconfig.go | 153 + .../v1alpha1/fake/fake_monitoring_client.go | 46 + .../v1alpha1/fake/fake_prometheusagent.go | 188 + .../v1alpha1/fake/fake_scrapeconfig.go | 153 + .../v1alpha1/generated_expansion.go | 23 + .../monitoring/v1alpha1/monitoring_client.go | 115 + .../monitoring/v1alpha1/prometheusagent.go | 254 + .../typed/monitoring/v1alpha1/scrapeconfig.go | 206 + .../monitoring/v1beta1/alertmanagerconfig.go | 206 + .../versioned/typed/monitoring/v1beta1/doc.go | 18 + .../typed/monitoring/v1beta1/fake/doc.go | 18 + .../v1beta1/fake/fake_alertmanagerconfig.go | 153 + .../v1beta1/fake/fake_monitoring_client.go | 38 + .../monitoring/v1beta1/generated_expansion.go | 19 + .../monitoring/v1beta1/monitoring_client.go | 105 + .../pkg/informers/informers.go | 180 + .../pkg/informers/informers_test.go | 247 + .../prometheus-operator/pkg/informers/kube.go | 91 + .../pkg/informers/monitoring.go | 59 + .../pkg/k8sutil/k8sutil.go | 473 + .../pkg/k8sutil/k8sutil_test.go | 567 + .../prometheus-operator/pkg/k8sutil/labels.go | 44 + .../pkg/k8sutil/labels_test.go | 130 + .../prometheus-operator/pkg/k8sutil/merge.go | 80 + .../pkg/k8sutil/merge_test.go | 161 + .../pkg/k8sutil/metrics.go | 88 + .../pkg/listwatch/listwatch.go | 148 + .../pkg/listwatch/listwatch_test.go | 53 + .../pkg/listwatch/namespace_denylist.go | 189 + .../pkg/listwatch/namespace_denylist_test.go | 348 + .../pkg/namespacelabeler/labeler.go | 151 + .../pkg/namespacelabeler/labeler_test.go | 426 + .../pkg/operator/accessor.go | 63 + .../pkg/operator/argument.go | 82 + .../pkg/operator/argument_test.go | 55 + .../pkg/operator/conditions.go | 52 + .../pkg/operator/config.go | 156 + .../pkg/operator/config_reloader.go | 285 + .../pkg/operator/config_reloader_test.go | 203 + .../pkg/operator/config_reloader_test_lib.go | 224 + .../pkg/operator/defaults.go | 79 + .../pkg/operator/gzip_config.go | 45 + .../pkg/operator/gzip_config_test.go | 35 + .../prometheus-operator/pkg/operator/image.go | 77 + .../pkg/operator/image_test.go | 74 + .../pkg/operator/operator.go | 434 + .../pkg/operator/prober.go | 27 + .../pkg/operator/prober_test.go | 82 + .../pkg/operator/resource_reconciler.go | 444 + .../prometheus-operator/pkg/operator/rules.go | 223 + .../pkg/operator/rules_test.go | 378 + .../pkg/operator/sharded_secret.go | 154 + .../pkg/operator/sharded_secret_test.go | 94 + .../pkg/operator/statefulset_reporter.go | 188 + .../pkg/operator/status.go | 57 + .../prometheus-operator/pkg/operator/types.go | 54 + .../pkg/operator/types_test.go | 60 + .../pkg/operator/validations.go | 36 + .../pkg/prometheus/agent/operator.go | 1307 + .../pkg/prometheus/agent/statefulset.go | 491 + .../pkg/prometheus/agent/statefulset_test.go | 208 + .../pkg/prometheus/collector.go | 91 + .../pkg/prometheus/operator.go | 214 + .../pkg/prometheus/operator_test.go | 151 + .../pkg/prometheus/promcfg.go | 2358 + .../pkg/prometheus/promcfg_test.go | 9117 ++++ .../pkg/prometheus/resource_selector.go | 685 + .../pkg/prometheus/resource_selector_test.go | 563 + .../pkg/prometheus/server/operator.go | 1730 + .../pkg/prometheus/server/operator_test.go | 325 + .../pkg/prometheus/server/rules.go | 284 + .../pkg/prometheus/server/rules_test.go | 81 + .../pkg/prometheus/server/statefulset.go | 841 + .../pkg/prometheus/server/statefulset_test.go | 2809 ++ .../pkg/prometheus/statefulset.go | 413 + .../prometheus-operator/pkg/server/server.go | 88 + .../pkg/server/server_test.go | 26 + .../pkg/thanos/collector.go | 63 + .../pkg/thanos/operator.go | 856 + .../pkg/thanos/operator_test.go | 28 + .../prometheus-operator/pkg/thanos/rules.go | 286 + .../pkg/thanos/statefulset.go | 550 + .../pkg/thanos/statefulset_test.go | 1091 + .../pkg/versionutil/cli.go | 65 + .../pkg/versionutil/cli_test.go | 134 + .../pkg/versionutil/doc.go | 17 + .../pkg/versionutil/operator_test.go | 43 + .../pkg/webconfig/config.go | 278 + .../pkg/webconfig/config_test.go | 381 + .../pkg/webconfig/tls_credentials.go | 243 + .../scripts/certs/generate.go | 167 + .../scripts/check_license.sh | 17 + .../scripts/docs/README.md | 13 + .../scripts/docs/config.json | 48 + .../scripts/docs/templates/members.tpl | 52 + .../scripts/docs/templates/pkg.tpl | 56 + .../scripts/docs/templates/type.tpl | 81 + .../scripts/errcheck_excludes.txt | 5 + .../scripts/generate-bundle.sh | 18 + .../scripts/generate/.gitignore | 2 + .../generate/admission-webhook.jsonnet | 14 + .../build-admission-webhook-example.sh | 13 + ...webhook-patch-for-alermanagerconfig-crd.sh | 10 + .../build-non-rbac-prometheus-operator.sh | 9 + .../build-rbac-prometheus-operator.sh | 13 + .../scripts/generate/build-thanos-example.sh | 13 + .../scripts/generate/config.jsonnet | 8 + ...ok-patch-for-alermanagerconfig-crd.jsonnet | 18 + .../scripts/generate/jsonnetfile.json | 22 + .../prometheus-operator-non-rbac.jsonnet | 14 + .../generate/prometheus-operator-rbac.jsonnet | 13 + .../scripts/generate/thanos.jsonnet | 15 + .../prometheus-operator/scripts/go.mod | 265 + .../prometheus-operator/scripts/go.sum | 1796 + .../scripts/kind-rbac.yaml | 78 + .../scripts/push-docker-image.sh | 117 + .../scripts/run-external.sh | 20 + .../scripts/tooling/Dockerfile | 40 + .../prometheus-operator/scripts/tools.go | 36 + .../prometheus-operator/test/e2e/README.md | 17 + .../alertmanager_instance_namespaces_test.go | 241 + .../test/e2e/alertmanager_test.go | 2295 + .../test/e2e/denylist_test.go | 243 + .../test/e2e/kind-conf.yaml | 7 + .../prometheus-operator/test/e2e/main_test.go | 405 + .../prometheus_instance_namespaces_test.go | 437 + .../test/e2e/prometheus_test.go | 4953 ++ .../test/e2e/prometheusagent_test.go | 71 + .../test/e2e/remote_write_certs/bad_ca.crt | 30 + .../test/e2e/remote_write_certs/bad_ca.key | 52 + .../e2e/remote_write_certs/bad_client.crt | 30 + .../e2e/remote_write_certs/bad_client.key | 52 + .../test/e2e/remote_write_certs/ca.crt | 30 + .../test/e2e/remote_write_certs/ca.key | 52 + .../test/e2e/remote_write_certs/client.crt | 30 + .../test/e2e/remote_write_certs/client.key | 52 + .../test/e2e/rules_test.go | 362 + .../test/e2e/scrapeconfig_test.go | 227 + .../test/e2e/thanosruler_test.go | 405 + .../test/e2e/upgradepath_test.go | 197 + .../test/framework/admission_webhooks.go | 133 + .../test/framework/alertmanager.go | 551 + .../test/framework/cluster_role.go | 106 + .../test/framework/cluster_role_binding.go | 86 + .../test/framework/config_map.go | 94 + .../test/framework/context.go | 73 + .../prometheus-operator/test/framework/crd.go | 152 + .../test/framework/deployment.go | 142 + .../test/framework/event.go | 38 + .../test/framework/framework.go | 755 + .../test/framework/helpers.go | 251 + .../test/framework/ingress.go | 150 + .../test/framework/namespace.go | 113 + .../prometheus-operator/test/framework/pod.go | 173 + .../test/framework/probe.go | 188 + .../test/framework/prometheus.go | 728 + .../test/framework/prometheus_rule.go | 152 + .../test/framework/prometheusagent.go | 129 + .../test/framework/replication_controller.go | 87 + ...lertmanager-config-validating-webhook.yaml | 27 + .../resources/alertmanager-main-secret.yaml | 8 + .../resources/basic-auth-app-deployment.yaml | 25 + .../default-http-backend-service.yml | 14 + .../resources/default-http-backend.yml | 36 + .../resources/nxginx-ingress-controller.yml | 55 + .../prometheus-operator-mutatingwebhook.yaml | 26 + .../prometheus-operator-role-binding.yaml | 11 + ...prometheus-operator-validatingwebhook.yaml | 30 + .../resources/prometheus-role-binding.yml | 11 + .../test/framework/role_binding.go | 110 + .../test/framework/scrapeconfig.go | 91 + .../test/framework/secret.go | 64 + .../test/framework/service.go | 114 + .../test/framework/service_account.go | 77 + .../test/framework/status.go | 105 + .../test/framework/thanosruler.go | 275 + .../test/instrumented-sample-app/.gitignore | 2 + .../test/instrumented-sample-app/Dockerfile | 9 + .../test/instrumented-sample-app/Makefile | 24 + .../test/instrumented-sample-app/README.md | 15 + .../test/instrumented-sample-app/VERSION | 1 + .../test/instrumented-sample-app/main.go | 140 + .../otel-allocator/server/bench_test.go | 270 + .../otel-allocator/server/mocks_test.go | 38 + otelcollector/otel-allocator/server/server.go | 222 + .../otel-allocator/server/server_test.go | 541 + .../otel-allocator/target/discovery.go | 135 + .../otel-allocator/target/discovery_test.go | 413 + otelcollector/otel-allocator/target/target.go | 55 + .../otel-allocator/target/testdata/test.yaml | 17 + .../target/testdata/test_update.yaml | 14 + otelcollector/otel-allocator/watcher/file.go | 88 + .../otel-allocator/watcher/promOperator.go | 316 + .../watcher/promOperator_test.go | 345 + .../otel-allocator/watcher/watcher.go | 51 + 689 files changed, 312212 insertions(+), 6 deletions(-) delete mode 160000 otelcollector/opentelemetry-operator create mode 100644 otelcollector/otel-allocator/Dockerfile create mode 100644 otelcollector/otel-allocator/Makefile create mode 100644 otelcollector/otel-allocator/README.md create mode 100644 otelcollector/otel-allocator/allocation/allocatortest.go create mode 100644 otelcollector/otel-allocator/allocation/consistent_hashing.go create mode 100644 otelcollector/otel-allocator/allocation/consistent_hashing_test.go create mode 100644 otelcollector/otel-allocator/allocation/least_weighted.go create mode 100644 otelcollector/otel-allocator/allocation/least_weighted_test.go create mode 100644 otelcollector/otel-allocator/allocation/strategy.go create mode 100644 otelcollector/otel-allocator/allocation/strategy_test.go create mode 100644 otelcollector/otel-allocator/collector/collector.go create mode 100644 otelcollector/otel-allocator/collector/collector_test.go create mode 100644 otelcollector/otel-allocator/config/config.go create mode 100644 otelcollector/otel-allocator/config/config_test.go create mode 100644 otelcollector/otel-allocator/config/testdata/config_test.yaml create mode 100644 otelcollector/otel-allocator/config/testdata/file_sd_test.json create mode 100644 otelcollector/otel-allocator/config/testdata/no_config.yaml create mode 100644 otelcollector/otel-allocator/config/testdata/pod_service_selector_test.yaml create mode 100644 otelcollector/otel-allocator/diff/diff.go create mode 100644 otelcollector/otel-allocator/diff/diff_test.go create mode 100644 otelcollector/otel-allocator/go.mod create mode 100644 otelcollector/otel-allocator/go.sum create mode 100644 otelcollector/otel-allocator/header.txt create mode 100644 otelcollector/otel-allocator/main.go create mode 100644 otelcollector/otel-allocator/prehook/prehook.go create mode 100644 otelcollector/otel-allocator/prehook/relabel.go create mode 100644 otelcollector/otel-allocator/prehook/relabel_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/.editorconfig create mode 100644 otelcollector/otel-allocator/prometheus-operator/.gitattributes create mode 100644 otelcollector/otel-allocator/prometheus-operator/.github/CODEOWNERS create mode 100644 otelcollector/otel-allocator/prometheus-operator/.github/ISSUE_TEMPLATE/bug.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/.github/ISSUE_TEMPLATE/config.yml create mode 100644 otelcollector/otel-allocator/prometheus-operator/.github/ISSUE_TEMPLATE/feature.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/.github/ISSUE_TEMPLATE/support.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/.github/dependabot.yml create mode 100644 otelcollector/otel-allocator/prometheus-operator/.github/env create mode 100644 otelcollector/otel-allocator/prometheus-operator/.github/lock.yml create mode 100644 otelcollector/otel-allocator/prometheus-operator/.github/workflows/checks.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/.github/workflows/e2e.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/.github/workflows/publish.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/.github/workflows/release.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/.github/workflows/stale.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/.github/workflows/unit.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/.gitignore create mode 100644 otelcollector/otel-allocator/prometheus-operator/.golangci.yml create mode 100644 otelcollector/otel-allocator/prometheus-operator/.header create mode 100644 otelcollector/otel-allocator/prometheus-operator/.mdox.validate.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/ADOPTERS.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/CHANGELOG.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/CNAME create mode 100644 otelcollector/otel-allocator/prometheus-operator/CONTRIBUTING.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/DCO create mode 100644 otelcollector/otel-allocator/prometheus-operator/Dockerfile create mode 100644 otelcollector/otel-allocator/prometheus-operator/Documentation/additional-scrape-config.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/Documentation/api.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/Documentation/compatibility.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/Documentation/custom-configuration.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/Documentation/design.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/Documentation/designs/prometheus-agent.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/Documentation/exposing-metrics.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/Documentation/high-availability.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/Documentation/img/architecture.png create mode 100644 otelcollector/otel-allocator/prometheus-operator/Documentation/img/custom-metrics-elements.png create mode 100644 otelcollector/otel-allocator/prometheus-operator/Documentation/logos/prometheus-operator-logo.png create mode 100644 otelcollector/otel-allocator/prometheus-operator/Documentation/logos/prometheus-operator-logo.svg create mode 100644 otelcollector/otel-allocator/prometheus-operator/Documentation/network-policies.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/Documentation/operator.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/Documentation/proposals/202212-scrape-config.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/Documentation/rbac-crd.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/Documentation/rbac.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/Documentation/thanos.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/Documentation/troubleshooting.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/Documentation/user-guides/alerting.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/Documentation/user-guides/basic-auth.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/Documentation/user-guides/exposing-prometheus-and-alertmanager.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/Documentation/user-guides/getting-started.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/Documentation/user-guides/linting.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/Documentation/user-guides/monitoring-kubernetes-ingress.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/Documentation/user-guides/prometheus-agent.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/Documentation/user-guides/running-exporters.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/Documentation/user-guides/shards-and-replicas.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/Documentation/user-guides/storage.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/Documentation/user-guides/strategic-merge-patch.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/Documentation/user-guides/webhook.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/LICENSE create mode 100644 otelcollector/otel-allocator/prometheus-operator/MAINTAINERS.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/Makefile create mode 100644 otelcollector/otel-allocator/prometheus-operator/NOTICE create mode 100644 otelcollector/otel-allocator/prometheus-operator/README.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/RELEASE.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/SECURITY.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/VERSION create mode 100644 otelcollector/otel-allocator/prometheus-operator/bundle.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/cmd/admission-webhook/Dockerfile create mode 100644 otelcollector/otel-allocator/prometheus-operator/cmd/admission-webhook/main.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/cmd/operator/main.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/cmd/operator/main_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/cmd/po-docgen/compatibility.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/cmd/po-docgen/main.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/cmd/po-lint/main.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/cmd/po-rule-migration/main.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/cmd/prometheus-config-reloader/Dockerfile create mode 100644 otelcollector/otel-allocator/prometheus-operator/cmd/prometheus-config-reloader/main.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/cmd/prometheus-config-reloader/main_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/code-of-conduct.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/contrib/kube-prometheus/README.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/additional-scrape-configs/additional-scrape-configs.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/additional-scrape-configs/prometheus-additional.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/additional-scrape-configs/prometheus-cluster-role-binding.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/additional-scrape-configs/prometheus-cluster-role.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/additional-scrape-configs/prometheus-service-account.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/additional-scrape-configs/prometheus.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/admission-webhook/deployment.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/admission-webhook/pod-disruption-budget.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/admission-webhook/service-account.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/admission-webhook/service-monitor.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/admission-webhook/service.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/alertmanager-crd-conversion/patch.json create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/alertmanager-webhook/Dockerfile create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/alertmanager-webhook/Makefile create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/alertmanager-webhook/README.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/alertmanager-webhook/main.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/mixin/alerts.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/networkpolicies/alertmanager.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/networkpolicies/grafana.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/networkpolicies/kube-state-metrics.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/networkpolicies/node-exporter.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/networkpolicies/prometheus.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/non-rbac/prometheus-operator.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/non-rbac/prometheus.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/prometheus-operator-crd-full/monitoring.coreos.com_alertmanagerconfigs.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/prometheus-operator-crd-full/monitoring.coreos.com_alertmanagers.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/prometheus-operator-crd-full/monitoring.coreos.com_podmonitors.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/prometheus-operator-crd-full/monitoring.coreos.com_probes.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/prometheus-operator-crd-full/monitoring.coreos.com_prometheusagents.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/prometheus-operator-crd-full/monitoring.coreos.com_prometheuses.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/prometheus-operator-crd-full/monitoring.coreos.com_prometheusrules.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/prometheus-operator-crd-full/monitoring.coreos.com_scrapeconfigs.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/prometheus-operator-crd-full/monitoring.coreos.com_servicemonitors.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/prometheus-operator-crd-full/monitoring.coreos.com_thanosrulers.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagerconfigs.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagers.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/prometheus-operator-crd/monitoring.coreos.com_podmonitors.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/prometheus-operator-crd/monitoring.coreos.com_probes.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/prometheus-operator-crd/monitoring.coreos.com_prometheusagents.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/prometheus-operator-crd/monitoring.coreos.com_prometheuses.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/prometheus-operator-crd/monitoring.coreos.com_prometheusrules.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/prometheus-operator-crd/monitoring.coreos.com_scrapeconfigs.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/prometheus-operator-crd/monitoring.coreos.com_servicemonitors.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/prometheus-operator-crd/monitoring.coreos.com_thanosrulers.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/rbac/prometheus-agent/prometheus-cluster-role-binding.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/rbac/prometheus-agent/prometheus-cluster-role.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/rbac/prometheus-agent/prometheus-service-account.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/rbac/prometheus-agent/prometheus.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/rbac/prometheus-operator-crd/prometheus-operator-crd-cluster-roles.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/rbac/prometheus-operator/prometheus-operator-cluster-role-binding.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/rbac/prometheus-operator/prometheus-operator-cluster-role.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/rbac/prometheus-operator/prometheus-operator-deployment.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/rbac/prometheus-operator/prometheus-operator-service-account.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/rbac/prometheus-operator/prometheus-operator-service-monitor.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/rbac/prometheus-operator/prometheus-operator-service.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/rbac/prometheus/prometheus-cluster-role-binding.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/rbac/prometheus/prometheus-cluster-role.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/rbac/prometheus/prometheus-service-account.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/rbac/prometheus/prometheus.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/shards/example-app-deployment.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/shards/example-app-service-monitor.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/shards/example-app-service.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/shards/prometheus-cluster-role-binding.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/shards/prometheus-cluster-role.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/shards/prometheus-service-account.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/shards/prometheus-service.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/shards/prometheus.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/storage/persisted-prometheus.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/storage/storageclass.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/thanos/prometheus-cluster-role-binding.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/thanos/prometheus-cluster-role.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/thanos/prometheus-rule.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/thanos/prometheus-service.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/thanos/prometheus-servicemonitor.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/thanos/prometheus.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/thanos/query-deployment.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/thanos/query-service.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/thanos/sidecar-service.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/thanos/thanos-ruler-service.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/thanos/thanos-ruler.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/user-guides/alerting/alertmanager-config-example.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/user-guides/alerting/alertmanager-example-alertmanager-configuration.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/user-guides/alerting/alertmanager-example-service.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/user-guides/alerting/alertmanager-example.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/user-guides/alerting/alertmanager-selector-example.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/user-guides/alerting/alertmanager.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/user-guides/alerting/prometheus-example-rule-namespace-selector.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/user-guides/alerting/prometheus-example-rules.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/user-guides/alerting/prometheus-example.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/user-guides/getting-started/example-app-deployment.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/user-guides/getting-started/example-app-pod-monitor.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/user-guides/getting-started/example-app-service-monitor.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/user-guides/getting-started/example-app-service.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/user-guides/getting-started/prometheus-admin-api.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/user-guides/getting-started/prometheus-pod-monitor.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/user-guides/getting-started/prometheus-service-monitor.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/example/user-guides/getting-started/prometheus-service.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/go.mod create mode 100644 otelcollector/otel-allocator/prometheus-operator/go.sum create mode 100644 otelcollector/otel-allocator/prometheus-operator/governance.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/helm/README.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/internal/log/log.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/jsonnet/mixin/alerts.jsonnet create mode 100644 otelcollector/otel-allocator/prometheus-operator/jsonnet/mixin/alerts/alerts.libsonnet create mode 100644 otelcollector/otel-allocator/prometheus-operator/jsonnet/mixin/config.libsonnet create mode 100644 otelcollector/otel-allocator/prometheus-operator/jsonnet/mixin/mixin.libsonnet create mode 100644 otelcollector/otel-allocator/prometheus-operator/jsonnet/prometheus-operator/.gitignore create mode 100644 otelcollector/otel-allocator/prometheus-operator/jsonnet/prometheus-operator/admission-webhook.libsonnet create mode 100644 otelcollector/otel-allocator/prometheus-operator/jsonnet/prometheus-operator/alertmanagerconfigs-crd.json create mode 100644 otelcollector/otel-allocator/prometheus-operator/jsonnet/prometheus-operator/alertmanagerconfigs-v1beta1-crd.libsonnet create mode 100644 otelcollector/otel-allocator/prometheus-operator/jsonnet/prometheus-operator/alertmanagers-crd.json create mode 100644 otelcollector/otel-allocator/prometheus-operator/jsonnet/prometheus-operator/conversion.libsonnet create mode 100644 otelcollector/otel-allocator/prometheus-operator/jsonnet/prometheus-operator/jsonnetfile.json create mode 100644 otelcollector/otel-allocator/prometheus-operator/jsonnet/prometheus-operator/podmonitors-crd.json create mode 100644 otelcollector/otel-allocator/prometheus-operator/jsonnet/prometheus-operator/probes-crd.json create mode 100644 otelcollector/otel-allocator/prometheus-operator/jsonnet/prometheus-operator/prometheus-operator.libsonnet create mode 100644 otelcollector/otel-allocator/prometheus-operator/jsonnet/prometheus-operator/prometheusagents-crd.json create mode 100644 otelcollector/otel-allocator/prometheus-operator/jsonnet/prometheus-operator/prometheuses-crd.json create mode 100644 otelcollector/otel-allocator/prometheus-operator/jsonnet/prometheus-operator/prometheusrules-crd.json create mode 100644 otelcollector/otel-allocator/prometheus-operator/jsonnet/prometheus-operator/scrapeconfigs-crd.json create mode 100644 otelcollector/otel-allocator/prometheus-operator/jsonnet/prometheus-operator/servicemonitors-crd.json create mode 100644 otelcollector/otel-allocator/prometheus-operator/jsonnet/prometheus-operator/thanosrulers-crd.json create mode 100644 otelcollector/otel-allocator/prometheus-operator/jsonnet/thanos/config.libsonnet create mode 100644 otelcollector/otel-allocator/prometheus-operator/kustomization.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/admission/admission.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/admission/admission_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/admission/admissiontypes.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/admission/jsonpatch.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/alertmanager/amcfg.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/alertmanager/amcfg_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/alertmanager/collector.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/alertmanager/operator.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/alertmanager/operator_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/alertmanager/statefulset.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/alertmanager/statefulset_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/alertmanager/types.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/alertmanager/validation/v1alpha1/validation.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/alertmanager/validation/v1beta1/validation.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/alertmanager/validation/v1beta1/validation_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/alertmanager/validation/validation.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/alertmanager/validation/validation_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/apis/monitoring/go.mod create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/apis/monitoring/go.sum create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/apis/monitoring/register.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/apis/monitoring/v1/alertmanager_types.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/apis/monitoring/v1/doc.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/apis/monitoring/v1/podmonitor_types.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/apis/monitoring/v1/podmonitor_types_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/apis/monitoring/v1/probe_types.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/apis/monitoring/v1/probe_types_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/apis/monitoring/v1/prometheus_types.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/apis/monitoring/v1/prometheusrule_types.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/apis/monitoring/v1/register.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/apis/monitoring/v1/servicemonitor_types.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/apis/monitoring/v1/servicemonitor_types_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/apis/monitoring/v1/thanos_types.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/apis/monitoring/v1/types.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/apis/monitoring/v1/types_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/apis/monitoring/v1/zz_generated.deepcopy.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/apis/monitoring/v1alpha1/alertmanager_config_conversion.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/apis/monitoring/v1alpha1/alertmanager_config_types.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/apis/monitoring/v1alpha1/doc.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/apis/monitoring/v1alpha1/prometheusagent_types.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/apis/monitoring/v1alpha1/register.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/apis/monitoring/v1alpha1/scrapeconfig_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/apis/monitoring/v1alpha1/scrapeconfig_types.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/apis/monitoring/v1alpha1/validation.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/apis/monitoring/v1alpha1/validation_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/apis/monitoring/v1alpha1/zz_generated.deepcopy.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/apis/monitoring/v1beta1/alertmanager_config_types.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/apis/monitoring/v1beta1/conversion_from.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/apis/monitoring/v1beta1/conversion_to.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/apis/monitoring/v1beta1/doc.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/apis/monitoring/v1beta1/register.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/apis/monitoring/v1beta1/validation.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/apis/monitoring/v1beta1/validation_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/apis/monitoring/v1beta1/zz_generated.deepcopy.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/assets/store.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/assets/store_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/assets/types.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/assets/utils.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/internal/internal.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/alertingspec.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/alertmanager.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/alertmanagerconfigmatcherstrategy.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/alertmanagerconfiguration.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/alertmanagerendpoints.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/alertmanagerglobalconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/alertmanagerspec.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/alertmanagerstatus.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/alertmanagerwebspec.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/apiserverconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/arbitraryfsaccessthroughsmsconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/argument.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/attachmetadata.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/authorization.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/basicauth.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/commonprometheusfields.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/condition.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/embeddedobjectmetadata.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/embeddedpersistentvolumeclaim.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/endpoint.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/exemplars.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/hostalias.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/httpconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/metadataconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/namespaceselector.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/oauth2.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/objectreference.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/podmetricsendpoint.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/podmetricsendpointtlsconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/podmonitor.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/podmonitorspec.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/probe.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/proberspec.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/probespec.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/probetargetingress.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/probetargets.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/probetargetstaticconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/probetlsconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/prometheus.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/prometheusrule.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/prometheusruleexcludeconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/prometheusrulespec.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/prometheusspec.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/prometheusstatus.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/prometheustracingconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/prometheuswebspec.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/queryspec.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/queueconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/relabelconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/remotereadspec.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/remotewritespec.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/rule.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/rulegroup.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/rules.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/rulesalert.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/safeauthorization.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/safetlsconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/secretorconfigmap.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/servicemonitor.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/servicemonitorspec.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/shardstatus.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/sigv4.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/storagespec.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/thanosruler.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/thanosrulerspec.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/thanosrulerstatus.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/thanosspec.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/tlsconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/tsdbspec.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/webconfigfilefields.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/webhttpconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/webhttpheaders.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1/webtlsconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1alpha1/alertmanagerconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1alpha1/alertmanagerconfigspec.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1alpha1/dayofmonthrange.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1alpha1/emailconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1alpha1/filesdconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1alpha1/httpconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1alpha1/httpsdconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1alpha1/inhibitrule.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1alpha1/keyvalue.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1alpha1/matcher.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1alpha1/mutetimeinterval.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1alpha1/opsgenieconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1alpha1/opsgenieconfigresponder.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1alpha1/pagerdutyconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1alpha1/pagerdutyimageconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1alpha1/pagerdutylinkconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1alpha1/prometheusagent.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1alpha1/prometheusagentspec.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1alpha1/pushoverconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1alpha1/receiver.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1alpha1/route.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1alpha1/scrapeconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1alpha1/scrapeconfigspec.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1alpha1/slackaction.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1alpha1/slackconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1alpha1/slackconfirmationfield.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1alpha1/slackfield.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1alpha1/snsconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1alpha1/staticconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1alpha1/telegramconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1alpha1/timeinterval.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1alpha1/timerange.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1alpha1/victoropsconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1alpha1/webhookconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1alpha1/wechatconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1beta1/alertmanagerconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1beta1/alertmanagerconfigspec.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1beta1/dayofmonthrange.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1beta1/emailconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1beta1/httpconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1beta1/inhibitrule.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1beta1/keyvalue.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1beta1/matcher.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1beta1/opsgenieconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1beta1/opsgenieconfigresponder.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1beta1/pagerdutyconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1beta1/pagerdutyimageconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1beta1/pagerdutylinkconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1beta1/pushoverconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1beta1/receiver.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1beta1/route.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1beta1/secretkeyselector.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1beta1/slackaction.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1beta1/slackconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1beta1/slackconfirmationfield.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1beta1/slackfield.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1beta1/snsconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1beta1/telegramconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1beta1/timeinterval.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1beta1/timeperiod.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1beta1/timerange.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1beta1/victoropsconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1beta1/webhookconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/monitoring/v1beta1/wechatconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/applyconfiguration/utils.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/go.mod create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/go.sum create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/informers/externalversions/factory.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/informers/externalversions/generic.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/informers/externalversions/internalinterfaces/factory_interfaces.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/informers/externalversions/monitoring/interface.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/informers/externalversions/monitoring/v1/alertmanager.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/informers/externalversions/monitoring/v1/interface.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/informers/externalversions/monitoring/v1/podmonitor.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/informers/externalversions/monitoring/v1/probe.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/informers/externalversions/monitoring/v1/prometheus.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/informers/externalversions/monitoring/v1/prometheusrule.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/informers/externalversions/monitoring/v1/servicemonitor.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/informers/externalversions/monitoring/v1/thanosruler.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/informers/externalversions/monitoring/v1alpha1/alertmanagerconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/informers/externalversions/monitoring/v1alpha1/interface.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/informers/externalversions/monitoring/v1alpha1/prometheusagent.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/informers/externalversions/monitoring/v1alpha1/scrapeconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/informers/externalversions/monitoring/v1beta1/alertmanagerconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/informers/externalversions/monitoring/v1beta1/interface.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/listers/monitoring/v1/alertmanager.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/listers/monitoring/v1/expansion_generated.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/listers/monitoring/v1/podmonitor.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/listers/monitoring/v1/probe.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/listers/monitoring/v1/prometheus.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/listers/monitoring/v1/prometheusrule.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/listers/monitoring/v1/servicemonitor.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/listers/monitoring/v1/thanosruler.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/listers/monitoring/v1alpha1/alertmanagerconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/listers/monitoring/v1alpha1/expansion_generated.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/listers/monitoring/v1alpha1/prometheusagent.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/listers/monitoring/v1alpha1/scrapeconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/listers/monitoring/v1beta1/alertmanagerconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/listers/monitoring/v1beta1/expansion_generated.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/versioned/clientset.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/versioned/doc.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/versioned/fake/clientset_generated.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/versioned/fake/doc.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/versioned/fake/register.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/versioned/scheme/doc.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/versioned/scheme/register.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/versioned/typed/monitoring/v1/alertmanager.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/versioned/typed/monitoring/v1/doc.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/versioned/typed/monitoring/v1/fake/doc.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/versioned/typed/monitoring/v1/fake/fake_alertmanager.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/versioned/typed/monitoring/v1/fake/fake_monitoring_client.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/versioned/typed/monitoring/v1/fake/fake_podmonitor.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/versioned/typed/monitoring/v1/fake/fake_probe.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/versioned/typed/monitoring/v1/fake/fake_prometheus.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/versioned/typed/monitoring/v1/fake/fake_prometheusrule.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/versioned/typed/monitoring/v1/fake/fake_servicemonitor.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/versioned/typed/monitoring/v1/fake/fake_thanosruler.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/versioned/typed/monitoring/v1/generated_expansion.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/versioned/typed/monitoring/v1/monitoring_client.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/versioned/typed/monitoring/v1/podmonitor.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/versioned/typed/monitoring/v1/probe.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/versioned/typed/monitoring/v1/prometheus.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/versioned/typed/monitoring/v1/prometheusrule.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/versioned/typed/monitoring/v1/servicemonitor.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/versioned/typed/monitoring/v1/thanosruler.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/versioned/typed/monitoring/v1alpha1/alertmanagerconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/versioned/typed/monitoring/v1alpha1/doc.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/versioned/typed/monitoring/v1alpha1/fake/doc.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/versioned/typed/monitoring/v1alpha1/fake/fake_alertmanagerconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/versioned/typed/monitoring/v1alpha1/fake/fake_monitoring_client.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/versioned/typed/monitoring/v1alpha1/fake/fake_prometheusagent.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/versioned/typed/monitoring/v1alpha1/fake/fake_scrapeconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/versioned/typed/monitoring/v1alpha1/generated_expansion.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/versioned/typed/monitoring/v1alpha1/monitoring_client.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/versioned/typed/monitoring/v1alpha1/prometheusagent.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/versioned/typed/monitoring/v1alpha1/scrapeconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/versioned/typed/monitoring/v1beta1/alertmanagerconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/versioned/typed/monitoring/v1beta1/doc.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/versioned/typed/monitoring/v1beta1/fake/doc.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/versioned/typed/monitoring/v1beta1/fake/fake_alertmanagerconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/versioned/typed/monitoring/v1beta1/fake/fake_monitoring_client.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/versioned/typed/monitoring/v1beta1/generated_expansion.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/client/versioned/typed/monitoring/v1beta1/monitoring_client.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/informers/informers.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/informers/informers_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/informers/kube.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/informers/monitoring.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/k8sutil/k8sutil.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/k8sutil/k8sutil_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/k8sutil/labels.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/k8sutil/labels_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/k8sutil/merge.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/k8sutil/merge_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/k8sutil/metrics.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/listwatch/listwatch.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/listwatch/listwatch_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/listwatch/namespace_denylist.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/listwatch/namespace_denylist_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/namespacelabeler/labeler.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/namespacelabeler/labeler_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/operator/accessor.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/operator/argument.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/operator/argument_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/operator/conditions.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/operator/config.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/operator/config_reloader.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/operator/config_reloader_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/operator/config_reloader_test_lib.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/operator/defaults.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/operator/gzip_config.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/operator/gzip_config_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/operator/image.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/operator/image_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/operator/operator.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/operator/prober.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/operator/prober_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/operator/resource_reconciler.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/operator/rules.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/operator/rules_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/operator/sharded_secret.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/operator/sharded_secret_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/operator/statefulset_reporter.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/operator/status.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/operator/types.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/operator/types_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/operator/validations.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/prometheus/agent/operator.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/prometheus/agent/statefulset.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/prometheus/agent/statefulset_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/prometheus/collector.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/prometheus/operator.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/prometheus/operator_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/prometheus/promcfg.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/prometheus/promcfg_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/prometheus/resource_selector.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/prometheus/resource_selector_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/prometheus/server/operator.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/prometheus/server/operator_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/prometheus/server/rules.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/prometheus/server/rules_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/prometheus/server/statefulset.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/prometheus/server/statefulset_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/prometheus/statefulset.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/server/server.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/server/server_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/thanos/collector.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/thanos/operator.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/thanos/operator_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/thanos/rules.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/thanos/statefulset.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/thanos/statefulset_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/versionutil/cli.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/versionutil/cli_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/versionutil/doc.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/versionutil/operator_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/webconfig/config.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/webconfig/config_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/pkg/webconfig/tls_credentials.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/scripts/certs/generate.go create mode 100755 otelcollector/otel-allocator/prometheus-operator/scripts/check_license.sh create mode 100644 otelcollector/otel-allocator/prometheus-operator/scripts/docs/README.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/scripts/docs/config.json create mode 100644 otelcollector/otel-allocator/prometheus-operator/scripts/docs/templates/members.tpl create mode 100644 otelcollector/otel-allocator/prometheus-operator/scripts/docs/templates/pkg.tpl create mode 100644 otelcollector/otel-allocator/prometheus-operator/scripts/docs/templates/type.tpl create mode 100644 otelcollector/otel-allocator/prometheus-operator/scripts/errcheck_excludes.txt create mode 100755 otelcollector/otel-allocator/prometheus-operator/scripts/generate-bundle.sh create mode 100644 otelcollector/otel-allocator/prometheus-operator/scripts/generate/.gitignore create mode 100644 otelcollector/otel-allocator/prometheus-operator/scripts/generate/admission-webhook.jsonnet create mode 100755 otelcollector/otel-allocator/prometheus-operator/scripts/generate/build-admission-webhook-example.sh create mode 100755 otelcollector/otel-allocator/prometheus-operator/scripts/generate/build-conversion-webhook-patch-for-alermanagerconfig-crd.sh create mode 100755 otelcollector/otel-allocator/prometheus-operator/scripts/generate/build-non-rbac-prometheus-operator.sh create mode 100755 otelcollector/otel-allocator/prometheus-operator/scripts/generate/build-rbac-prometheus-operator.sh create mode 100755 otelcollector/otel-allocator/prometheus-operator/scripts/generate/build-thanos-example.sh create mode 100644 otelcollector/otel-allocator/prometheus-operator/scripts/generate/config.jsonnet create mode 100644 otelcollector/otel-allocator/prometheus-operator/scripts/generate/conversion-webhook-patch-for-alermanagerconfig-crd.jsonnet create mode 100644 otelcollector/otel-allocator/prometheus-operator/scripts/generate/jsonnetfile.json create mode 100644 otelcollector/otel-allocator/prometheus-operator/scripts/generate/prometheus-operator-non-rbac.jsonnet create mode 100644 otelcollector/otel-allocator/prometheus-operator/scripts/generate/prometheus-operator-rbac.jsonnet create mode 100644 otelcollector/otel-allocator/prometheus-operator/scripts/generate/thanos.jsonnet create mode 100644 otelcollector/otel-allocator/prometheus-operator/scripts/go.mod create mode 100644 otelcollector/otel-allocator/prometheus-operator/scripts/go.sum create mode 100644 otelcollector/otel-allocator/prometheus-operator/scripts/kind-rbac.yaml create mode 100755 otelcollector/otel-allocator/prometheus-operator/scripts/push-docker-image.sh create mode 100755 otelcollector/otel-allocator/prometheus-operator/scripts/run-external.sh create mode 100644 otelcollector/otel-allocator/prometheus-operator/scripts/tooling/Dockerfile create mode 100644 otelcollector/otel-allocator/prometheus-operator/scripts/tools.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/e2e/README.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/e2e/alertmanager_instance_namespaces_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/e2e/alertmanager_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/e2e/denylist_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/e2e/kind-conf.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/e2e/main_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/e2e/prometheus_instance_namespaces_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/e2e/prometheus_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/e2e/prometheusagent_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/e2e/remote_write_certs/bad_ca.crt create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/e2e/remote_write_certs/bad_ca.key create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/e2e/remote_write_certs/bad_client.crt create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/e2e/remote_write_certs/bad_client.key create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/e2e/remote_write_certs/ca.crt create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/e2e/remote_write_certs/ca.key create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/e2e/remote_write_certs/client.crt create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/e2e/remote_write_certs/client.key create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/e2e/rules_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/e2e/scrapeconfig_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/e2e/thanosruler_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/e2e/upgradepath_test.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/framework/admission_webhooks.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/framework/alertmanager.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/framework/cluster_role.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/framework/cluster_role_binding.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/framework/config_map.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/framework/context.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/framework/crd.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/framework/deployment.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/framework/event.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/framework/framework.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/framework/helpers.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/framework/ingress.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/framework/namespace.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/framework/pod.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/framework/probe.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/framework/prometheus.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/framework/prometheus_rule.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/framework/prometheusagent.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/framework/replication_controller.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/framework/resources/alertmanager-config-validating-webhook.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/framework/resources/alertmanager-main-secret.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/framework/resources/basic-auth-app-deployment.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/framework/resources/default-http-backend-service.yml create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/framework/resources/default-http-backend.yml create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/framework/resources/nxginx-ingress-controller.yml create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/framework/resources/prometheus-operator-mutatingwebhook.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/framework/resources/prometheus-operator-role-binding.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/framework/resources/prometheus-operator-validatingwebhook.yaml create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/framework/resources/prometheus-role-binding.yml create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/framework/role_binding.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/framework/scrapeconfig.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/framework/secret.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/framework/service.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/framework/service_account.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/framework/status.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/framework/thanosruler.go create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/instrumented-sample-app/.gitignore create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/instrumented-sample-app/Dockerfile create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/instrumented-sample-app/Makefile create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/instrumented-sample-app/README.md create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/instrumented-sample-app/VERSION create mode 100644 otelcollector/otel-allocator/prometheus-operator/test/instrumented-sample-app/main.go create mode 100644 otelcollector/otel-allocator/server/bench_test.go create mode 100644 otelcollector/otel-allocator/server/mocks_test.go create mode 100644 otelcollector/otel-allocator/server/server.go create mode 100644 otelcollector/otel-allocator/server/server_test.go create mode 100644 otelcollector/otel-allocator/target/discovery.go create mode 100644 otelcollector/otel-allocator/target/discovery_test.go create mode 100644 otelcollector/otel-allocator/target/target.go create mode 100644 otelcollector/otel-allocator/target/testdata/test.yaml create mode 100644 otelcollector/otel-allocator/target/testdata/test_update.yaml create mode 100644 otelcollector/otel-allocator/watcher/file.go create mode 100644 otelcollector/otel-allocator/watcher/promOperator.go create mode 100644 otelcollector/otel-allocator/watcher/promOperator_test.go create mode 100644 otelcollector/otel-allocator/watcher/watcher.go diff --git a/.gitmodules b/.gitmodules index 9410581a2..e69de29bb 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +0,0 @@ -[submodule "otelcollector/opentelemetry-operator"] - path = otelcollector/opentelemetry-operator - url = https://github.com/gracewehner/opentelemetry-operator diff --git a/.pipelines/azure-pipeline-build.yml b/.pipelines/azure-pipeline-build.yml index 1cd874d55..07f237c4d 100644 --- a/.pipelines/azure-pipeline-build.yml +++ b/.pipelines/azure-pipeline-build.yml @@ -345,7 +345,6 @@ jobs: DOCKER_BUILDKIT: 1 steps: - checkout: self - submodules: recursive persistCredentials: true - bash: | mkdir -p $(Build.ArtifactStagingDirectory)/targetallocator @@ -368,7 +367,7 @@ jobs: # Load in amd64 image to run vulnerability scan docker buildx build . --file Dockerfile -t $(TARGET_ALLOCATOR_FULL_IMAGE_NAME) --metadata-file $(Build.ArtifactStagingDirectory)/targetallocator/metadata.json fi - workingDirectory: $(Build.SourcesDirectory)/otelcollector/opentelemetry-operator/cmd/otel-allocator + workingDirectory: $(Build.SourcesDirectory)/otelcollector/otel-allocator displayName: "Build: build and push target allocator image to dev ACR" - bash: | curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin diff --git a/.trivyignore b/.trivyignore index c56d3a54d..323ae6200 100644 --- a/.trivyignore +++ b/.trivyignore @@ -31,3 +31,4 @@ CVE-2022-46146 CVE-2022-41721 # target-allocator CVE-2023-29401 +CVE-2023-40577 diff --git a/otelcollector/opentelemetry-operator b/otelcollector/opentelemetry-operator deleted file mode 160000 index 6eeb7cbed..000000000 --- a/otelcollector/opentelemetry-operator +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 6eeb7cbed032c72d3ab8150b57613ed403a79f43 diff --git a/otelcollector/otel-allocator/Dockerfile b/otelcollector/otel-allocator/Dockerfile new file mode 100644 index 000000000..72c453b0e --- /dev/null +++ b/otelcollector/otel-allocator/Dockerfile @@ -0,0 +1,44 @@ +# Build the otel-allocator binary +FROM mcr.microsoft.com/oss/go/microsoft/golang:1.20 as builder + +WORKDIR /app +# Copy prometheus-operator repo files +COPY ./prometheus-operator/go.mod ./prometheus-operator/go.sum ./prometheus-operator/ + +WORKDIR /app +COPY ./prometheus-operator/pkg/apis/monitoring/go.mod ./prometheus-operator/pkg/apis/monitoring/go.sum ./prometheus-operator/pkg/apis/monitoring/ +WORKDIR /app/prometheus-operator/pkg/apis/monitoring/ +RUN go mod download + + +WORKDIR /app +COPY ./prometheus-operator/pkg/client/go.mod ./prometheus-operator/pkg/client/go.sum ./prometheus-operator/pkg/client/ +WORKDIR /app/prometheus-operator/pkg/client/ +RUN go mod download + +WORKDIR /app/prometheus-operator/ +RUN go mod download + +WORKDIR /app + +COPY ./prometheus-operator /app/prometheus-operator + +# Copy go mod and sum files +COPY go.mod go.sum ./ + +RUN go mod download + +COPY . . + +ARG TARGETOS TARGETARCH +# Build the Go app +RUN if [ "$TARGETARCH" = "arm64" ] ; then CC=aarch64-linux-gnu-gcc CGO_ENABLED=1 GOOS=$TARGETOS GOARCH=$TARGETARCH go build -a -installsuffix -buildmode=pie -ldflags '-linkmode external -extldflags=-Wl,-z,now' -o main . ; else CGO_ENABLED=1 GOOS=$TARGETOS GOARCH=$TARGETARCH go build -a -installsuffix -buildmode=pie -ldflags '-linkmode external -extldflags=-Wl,-z,now' -o main . ; fi + +######## Start a new stage from scratch ####### +FROM mcr.microsoft.com/cbl-mariner/distroless/debug:2.0 +WORKDIR /root/ + +# Copy the pre-built binary file from the previous stage +COPY --from=builder /app/main . + +ENTRYPOINT ["./main"] diff --git a/otelcollector/otel-allocator/Makefile b/otelcollector/otel-allocator/Makefile new file mode 100644 index 000000000..9099ca392 --- /dev/null +++ b/otelcollector/otel-allocator/Makefile @@ -0,0 +1,9 @@ +.PHONY: targetallocator +targetallocator: + @echo "========================= Building targetallocator =========================" + @echo "========================= cleanup existing targetallocator =========================" + rm -rf targetallocator + @echo "========================= go get =========================" + go get + @echo "========================= go build =========================" + go build -buildmode=pie -ldflags '-linkmode external -extldflags=-Wl,-z,now' -o targetallocator . \ No newline at end of file diff --git a/otelcollector/otel-allocator/README.md b/otelcollector/otel-allocator/README.md new file mode 100644 index 000000000..e46fcd684 --- /dev/null +++ b/otelcollector/otel-allocator/README.md @@ -0,0 +1,262 @@ +# Target Allocator + +The TargetAllocator is an optional separately deployed component of an OpenTelemetry Collector setup, which is used to +distribute targets of the PrometheusReceiver on all deployed Collector instances. The release version matches the +operator's most recent release as well. + +In essence, Prometheus Receiver configs are overridden with a http_sd_configs directive that points to the +Allocator, these are then loadbalanced/sharded to the collectors. The Prometheus Receiver configs that are overridden +are what will be distributed with the same name. In addition to picking up receiver configs, the TargetAllocator +can discover targets via Prometheus CRs (currently ServiceMonitor, PodMonitor) which it presents as scrape configs +and jobs on the `/scrape_configs` and `/jobs` endpoints respectively. + +# Usage +The `spec.targetAllocator:` controls the TargetAllocator general properties. Full API spec can be found here: [api.md#opentelemetrycollectorspectargetallocator](../../docs/api.md#opentelemetrycollectorspectargetallocator) + +A basic example that deploys. +```yaml +apiVersion: opentelemetry.io/v1alpha1 +kind: OpenTelemetryCollector +metadata: + name: collector-with-ta +spec: + mode: statefulset + targetAllocator: + enabled: true + config: | + receivers: + prometheus: + config: + scrape_configs: + - job_name: 'otel-collector' + scrape_interval: 10s + static_configs: + - targets: [ '0.0.0.0:8888' ] + + exporters: + logging: + + service: + pipelines: + metrics: + receivers: [prometheus] + processors: [] + exporters: [logging] +``` + +## PrometheusCR specifics +TargetAllocator discovery of PrometheusCRs can be turned on by setting +`.spec.targetAllocator.prometheusCR.enabled` to `true` + +The CRs can be filtered by labels as documented here: [api.md#opentelemetrycollectorspectargetallocatorprometheuscr](../../docs/api.md#opentelemetrycollectorspectargetallocatorprometheuscr) + +The prometheus receiver in the deployed collector also has to know where the Allocator service exists. This is done by a +OpenTelemetry Collector operator specific config. +```yaml + config: | + receivers: + prometheus: + config: + scrape_configs: + - job_name: 'otel-collector' + target_allocator: + endpoint: http://my-targetallocator-service + interval: 30s + collector_id: "${POD_NAME}" +``` +Upstream documentation here: [Prometheusreceiver](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/receiver/prometheusreceiver#opentelemetry-operator) + +The TargetAllocator service is named based on the OpenTelemetryCollector CR name. `collector_id` should be unique per +collector instance, such as the pod name. The `POD_NAME` environment variable is convenient since this is supplied +to collector instance pods by default. + +The Prometheus CRDs also have to exist for the Allocator to pick them up. The best place to get them is from +prometheus-operator: [Releases](https://github.com/prometheus-operator/prometheus-operator/releases). Only the CRDs for +CRs that the Allocator watches for need to be deployed. They can be picked out from the bundle.yaml file. + +### RBAC +The ServiceAccount that the TargetAllocator runs as, has to have access to the CRs. A role like this will provide that +access. +```yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: opentelemetry-targetallocator-cr-role +rules: +- apiGroups: + - monitoring.coreos.com + resources: + - servicemonitors + - podmonitors + verbs: + - '*' +``` +In addition, the TargetAllocator needs the same permissions as a Prometheus instance would to find the matching targets +from the CR instances. +```yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: opentelemetry-targetallocator-role +rules: +- apiGroups: [""] + resources: + - nodes + - nodes/metrics + - services + - endpoints + - pods + verbs: ["get", "list", "watch"] +- apiGroups: [""] + resources: + - configmaps + verbs: ["get"] +- apiGroups: + - discovery.k8s.io + resources: + - endpointslices + verbs: ["get", "list", "watch"] +- apiGroups: + - networking.k8s.io + resources: + - ingresses + verbs: ["get", "list", "watch"] +- nonResourceURLs: ["/metrics"] + verbs: ["get"] +``` +These roles can be combined. + +A ServiceAccount bound with the above permissions in the namespaces that are to be monitored can then be referenced in +the `targetAllocator:` part of the OpenTelemetryCollector CR. +```yaml + targetAllocator: + enabled: true + serviceAccount: opentelemetry-targetallocator-sa + prometheusCR: + enabled: true +``` +**Note**: The Collector part of this same CR *also* has a serviceAccount key which only affects the collector and *not* +the TargetAllocator. + +### Service / Pod monitor endpoint credentials + +If your service or pod monitor endpoints require credentials or other supported form of authentication (bearer token, basic auth, OAuth2 etc.), you need to ensure that the collector has access to this information. Due to some limitations in how the endpoints configuration is handled, target allocator currently does **not** support credentials provided via secrets. It is only possible to provide credentials in a file (for more details see issue https://github.com/open-telemetry/opentelemetry-operator/issues/1669). + +In order to ensure your endpoints can be scraped, your collector instance needs to have the particular secret mounted as a file at the correct path. + + +# Design + +If the Allocator is activated, all Prometheus configurations will be transferred in a separate ConfigMap which get in +turn mounted to the Allocator. +This configuration will be resolved to target configurations and then split across all OpenTelemetryCollector instances. + +TargetAllocators expose the results as [HTTP_SD endpoints](https://prometheus.io/docs/prometheus/latest/http_sd/) +split by collector. + +Currently, the Target Allocator handles the sharding of targets. The operator sets the `$SHARD` variable to 0 to allow +collectors to keep targets generated by a Prometheus CRD. Using Prometheus sharding and target allocator sharding is not +recommended currently and may lead to unknown results. +[See this thread for more information](https://github.com/open-telemetry/opentelemetry-operator/pull/1124#discussion_r984683577) + +#### Endpoints +`/scrape_configs`: + +```json +{ + "job1": { + "follow_redirects": true, + "honor_timestamps": true, + "job_name": "job1", + "metric_relabel_configs": [], + "metrics_path": "/metrics", + "scheme": "http", + "scrape_interval": "1m", + "scrape_timeout": "10s", + "static_configs": [] + }, + "job2": { + "follow_redirects": true, + "honor_timestamps": true, + "job_name": "job2", + "metric_relabel_configs": [], + "metrics_path": "/metrics", + "relabel_configs": [], + "scheme": "http", + "scrape_interval": "1m", + "scrape_timeout": "10s", + "kubernetes_sd_configs": [] + } +} +``` + +`/jobs`: + +```json +{ + "job1": { + "_link": "/jobs/job1/targets" + }, + "job2": { + "_link": "/jobs/job1/targets" + } +} + +``` + +`/jobs/{jobID}/targets`: + +```json +{ + "collector-1": { + "_link": "/jobs/job1/targets?collector_id=collector-1", + "targets": [ + { + "Targets": [ + "10.100.100.100", + "10.100.100.101", + "10.100.100.102" + ], + "Labels": { + "namespace": "a_namespace", + "pod": "a_pod" + } + } + ] + } +} +``` + +`/jobs/{jobID}/targets?collector_id={collectorID}`: + +```json +[ + { + "targets": [ + "10.100.100.100", + "10.100.100.101", + "10.100.100.102" + ], + "labels": { + "namespace": "a_namespace", + "pod": "a_pod" + } + } +] +``` + + +## Packages +### Watchers +Watchers are responsible for the translation of external sources into Prometheus readable scrape configurations and +triggers updates to the DiscoveryManager + +### DiscoveryManager +Watches the Prometheus service discovery for new targets and sets targets to the Allocator + +### Allocator +Shards the received targets based on the discovered Collector instances + +### Collector +Client to watch for deployed Collector instances which will then provided to the Allocator. + diff --git a/otelcollector/otel-allocator/allocation/allocatortest.go b/otelcollector/otel-allocator/allocation/allocatortest.go new file mode 100644 index 000000000..0cc4ccc41 --- /dev/null +++ b/otelcollector/otel-allocator/allocation/allocatortest.go @@ -0,0 +1,58 @@ +// Copyright The OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package allocation + +import ( + "fmt" + "strconv" + + "github.com/prometheus/common/model" + + "github.com/open-telemetry/opentelemetry-operator/cmd/otel-allocator/target" +) + +func colIndex(index, numCols int) int { + if numCols == 0 { + return -1 + } + return index % numCols +} + +func MakeNNewTargets(n int, numCollectors int, startingIndex int) map[string]*target.Item { + toReturn := map[string]*target.Item{} + for i := startingIndex; i < n+startingIndex; i++ { + collector := fmt.Sprintf("collector-%d", colIndex(i, numCollectors)) + label := model.LabelSet{ + "collector": model.LabelValue(collector), + "i": model.LabelValue(strconv.Itoa(i)), + "total": model.LabelValue(strconv.Itoa(n + startingIndex)), + } + newTarget := target.NewItem(fmt.Sprintf("test-job-%d", i), "test-url", label, collector) + toReturn[newTarget.Hash()] = newTarget + } + return toReturn +} + +func MakeNCollectors(n int, startingIndex int) map[string]*Collector { + toReturn := map[string]*Collector{} + for i := startingIndex; i < n+startingIndex; i++ { + collector := fmt.Sprintf("collector-%d", i) + toReturn[collector] = &Collector{ + Name: collector, + NumTargets: 0, + } + } + return toReturn +} diff --git a/otelcollector/otel-allocator/allocation/consistent_hashing.go b/otelcollector/otel-allocator/allocation/consistent_hashing.go new file mode 100644 index 000000000..cec3312ae --- /dev/null +++ b/otelcollector/otel-allocator/allocation/consistent_hashing.go @@ -0,0 +1,293 @@ +// Copyright The OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package allocation + +import ( + "sync" + + "github.com/buraksezer/consistent" + "github.com/cespare/xxhash/v2" + "github.com/go-logr/logr" + "github.com/prometheus/client_golang/prometheus" + + "github.com/open-telemetry/opentelemetry-operator/cmd/otel-allocator/diff" + "github.com/open-telemetry/opentelemetry-operator/cmd/otel-allocator/target" +) + +var _ Allocator = &consistentHashingAllocator{} + +const consistentHashingStrategyName = "consistent-hashing" + +type hasher struct{} + +func (h hasher) Sum64(data []byte) uint64 { + return xxhash.Sum64(data) +} + +type consistentHashingAllocator struct { + // m protects consistentHasher, collectors and targetItems for concurrent use. + m sync.RWMutex + + consistentHasher *consistent.Consistent + + // collectors is a map from a Collector's name to a Collector instance + // collectorKey -> collector pointer + collectors map[string]*Collector + + // targetItems is a map from a target item's hash to the target items allocated state + // targetItem hash -> target item pointer + targetItems map[string]*target.Item + + // collectorKey -> job -> target item hash -> true + targetItemsPerJobPerCollector map[string]map[string]map[string]bool + + log logr.Logger + + filter Filter +} + +func newConsistentHashingAllocator(log logr.Logger, opts ...AllocationOption) Allocator { + config := consistent.Config{ + PartitionCount: 1061, + ReplicationFactor: 5, + Load: 1.1, + Hasher: hasher{}, + } + consistentHasher := consistent.New(nil, config) + chAllocator := &consistentHashingAllocator{ + consistentHasher: consistentHasher, + collectors: make(map[string]*Collector), + targetItems: make(map[string]*target.Item), + targetItemsPerJobPerCollector: make(map[string]map[string]map[string]bool), + log: log, + } + for _, opt := range opts { + opt(chAllocator) + } + + return chAllocator +} + +// SetFilter sets the filtering hook to use. +func (c *consistentHashingAllocator) SetFilter(filter Filter) { + c.filter = filter +} + +// addCollectorTargetItemMapping keeps track of which collector has which jobs and targets +// this allows the allocator to respond without any extra allocations to http calls. The caller of this method +// has to acquire a lock. +func (c *consistentHashingAllocator) addCollectorTargetItemMapping(tg *target.Item) { + if c.targetItemsPerJobPerCollector[tg.CollectorName] == nil { + c.targetItemsPerJobPerCollector[tg.CollectorName] = make(map[string]map[string]bool) + } + if c.targetItemsPerJobPerCollector[tg.CollectorName][tg.JobName] == nil { + c.targetItemsPerJobPerCollector[tg.CollectorName][tg.JobName] = make(map[string]bool) + } + c.targetItemsPerJobPerCollector[tg.CollectorName][tg.JobName][tg.Hash()] = true +} + +// addTargetToTargetItems assigns a target to the collector based on its hash and adds it to the allocator's targetItems +// This method is called from within SetTargets and SetCollectors, which acquire the needed lock. +// This is only called after the collectors are cleared or when a new target has been found in the tempTargetMap. +// INVARIANT: c.collectors must have at least 1 collector set. +// NOTE: by not creating a new target item, there is the potential for a race condition where we modify this target +// item while it's being encoded by the server JSON handler. +func (c *consistentHashingAllocator) addTargetToTargetItems(tg *target.Item) { + // Check if this is a reassignment, if so, decrement the previous collector's NumTargets + if previousColName, ok := c.collectors[tg.CollectorName]; ok { + previousColName.NumTargets-- + delete(c.targetItemsPerJobPerCollector[tg.CollectorName][tg.JobName], tg.Hash()) + TargetsPerCollector.WithLabelValues(previousColName.String(), consistentHashingStrategyName).Set(float64(c.collectors[previousColName.String()].NumTargets)) + } + colOwner := c.consistentHasher.LocateKey([]byte(tg.Hash())) + tg.CollectorName = colOwner.String() + c.targetItems[tg.Hash()] = tg + c.addCollectorTargetItemMapping(tg) + c.collectors[colOwner.String()].NumTargets++ + TargetsPerCollector.WithLabelValues(colOwner.String(), consistentHashingStrategyName).Set(float64(c.collectors[colOwner.String()].NumTargets)) +} + +// handleTargets receives the new and removed targets and reconciles the current state. +// Any removals are removed from the allocator's targetItems and unassigned from the corresponding collector. +// Any net-new additions are assigned to the next available collector. +func (c *consistentHashingAllocator) handleTargets(diff diff.Changes[*target.Item]) { + // Check for removals + for k, item := range c.targetItems { + // if the current item is in the removals list + if _, ok := diff.Removals()[k]; ok { + col := c.collectors[item.CollectorName] + col.NumTargets-- + delete(c.targetItems, k) + delete(c.targetItemsPerJobPerCollector[item.CollectorName][item.JobName], item.Hash()) + TargetsPerCollector.WithLabelValues(item.CollectorName, consistentHashingStrategyName).Set(float64(col.NumTargets)) + } + } + + // Check for additions + for k, item := range diff.Additions() { + // Do nothing if the item is already there + if _, ok := c.targetItems[k]; ok { + continue + } else { + // Add item to item pool and assign a collector + c.addTargetToTargetItems(item) + } + } +} + +// handleCollectors receives the new and removed collectors and reconciles the current state. +// Any removals are removed from the allocator's collectors. New collectors are added to the allocator's collector map. +// Finally, update all targets' collectors to match the consistent hashing. +func (c *consistentHashingAllocator) handleCollectors(diff diff.Changes[*Collector]) { + // Clear removed collectors + for _, k := range diff.Removals() { + delete(c.collectors, k.Name) + delete(c.targetItemsPerJobPerCollector, k.Name) + c.consistentHasher.Remove(k.Name) + TargetsPerCollector.WithLabelValues(k.Name, consistentHashingStrategyName).Set(0) + } + // Insert the new collectors + for _, i := range diff.Additions() { + c.collectors[i.Name] = NewCollector(i.Name) + c.consistentHasher.Add(c.collectors[i.Name]) + } + + // Re-Allocate all targets + for _, item := range c.targetItems { + c.addTargetToTargetItems(item) + } +} + +// SetTargets accepts a list of targets that will be used to make +// load balancing decisions. This method should be called when there are +// new targets discovered or existing targets are shutdown. +func (c *consistentHashingAllocator) SetTargets(targets map[string]*target.Item) { + timer := prometheus.NewTimer(TimeToAssign.WithLabelValues("SetTargets", consistentHashingStrategyName)) + defer timer.ObserveDuration() + + if c.filter != nil { + targets = c.filter.Apply(targets) + } + RecordTargetsKept(targets) + + c.m.Lock() + defer c.m.Unlock() + + if len(c.collectors) == 0 { + c.log.Info("No collector instances present, saving targets to allocate to collector(s)") + // If there were no targets discovered previously, assign this as the new set of target items + if len(c.targetItems) == 0 { + c.log.Info("Not discovered any targets previously, saving targets found to the targetItems set") + for k, item := range targets { + c.targetItems[k] = item + } + } else { + // If there were previously discovered targets, add or remove accordingly + targetsDiffEmptyCollectorSet := diff.Maps(c.targetItems, targets) + + // Check for additions + if len(targetsDiffEmptyCollectorSet.Additions()) > 0 { + c.log.Info("New targets discovered, adding new targets to the targetItems set") + for k, item := range targetsDiffEmptyCollectorSet.Additions() { + // Do nothing if the item is already there + if _, ok := c.targetItems[k]; ok { + continue + } else { + // Add item to item pool + c.targetItems[k] = item + } + } + } + + // Check for deletions + if len(targetsDiffEmptyCollectorSet.Removals()) > 0 { + c.log.Info("Targets removed, Removing targets from the targetItems set") + for k, _ := range targetsDiffEmptyCollectorSet.Removals() { + // Delete item from target items + delete(c.targetItems, k) + } + } + } + return + } + // Check for target changes + targetsDiff := diff.Maps(c.targetItems, targets) + // If there are any additions or removals + if len(targetsDiff.Additions()) != 0 || len(targetsDiff.Removals()) != 0 { + c.handleTargets(targetsDiff) + } +} + +// SetCollectors sets the set of collectors with key=collectorName, value=Collector object. +// This method is called when Collectors are added or removed. +func (c *consistentHashingAllocator) SetCollectors(collectors map[string]*Collector) { + timer := prometheus.NewTimer(TimeToAssign.WithLabelValues("SetCollectors", consistentHashingStrategyName)) + defer timer.ObserveDuration() + + CollectorsAllocatable.WithLabelValues(consistentHashingStrategyName).Set(float64(len(collectors))) + if len(collectors) == 0 { + c.log.Info("No collector instances present") + return + } + + c.m.Lock() + defer c.m.Unlock() + + // Check for collector changes + collectorsDiff := diff.Maps(c.collectors, collectors) + if len(collectorsDiff.Additions()) != 0 || len(collectorsDiff.Removals()) != 0 { + c.handleCollectors(collectorsDiff) + } +} + +func (c *consistentHashingAllocator) GetTargetsForCollectorAndJob(collector string, job string) []*target.Item { + c.m.RLock() + defer c.m.RUnlock() + if _, ok := c.targetItemsPerJobPerCollector[collector]; !ok { + return []*target.Item{} + } + if _, ok := c.targetItemsPerJobPerCollector[collector][job]; !ok { + return []*target.Item{} + } + targetItemsCopy := make([]*target.Item, len(c.targetItemsPerJobPerCollector[collector][job])) + index := 0 + for targetHash := range c.targetItemsPerJobPerCollector[collector][job] { + targetItemsCopy[index] = c.targetItems[targetHash] + index++ + } + return targetItemsCopy +} + +// TargetItems returns a shallow copy of the targetItems map. +func (c *consistentHashingAllocator) TargetItems() map[string]*target.Item { + c.m.RLock() + defer c.m.RUnlock() + targetItemsCopy := make(map[string]*target.Item) + for k, v := range c.targetItems { + targetItemsCopy[k] = v + } + return targetItemsCopy +} + +// Collectors returns a shallow copy of the collectors map. +func (c *consistentHashingAllocator) Collectors() map[string]*Collector { + c.m.RLock() + defer c.m.RUnlock() + collectorsCopy := make(map[string]*Collector) + for k, v := range c.collectors { + collectorsCopy[k] = v + } + return collectorsCopy +} diff --git a/otelcollector/otel-allocator/allocation/consistent_hashing_test.go b/otelcollector/otel-allocator/allocation/consistent_hashing_test.go new file mode 100644 index 000000000..7fcbf8891 --- /dev/null +++ b/otelcollector/otel-allocator/allocation/consistent_hashing_test.go @@ -0,0 +1,105 @@ +// Copyright The OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package allocation + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestCanSetSingleTarget(t *testing.T) { + cols := MakeNCollectors(3, 0) + c := newConsistentHashingAllocator(logger) + c.SetCollectors(cols) + c.SetTargets(MakeNNewTargets(1, 3, 0)) + actualTargetItems := c.TargetItems() + assert.Len(t, actualTargetItems, 1) + for _, item := range actualTargetItems { + assert.Equal(t, "collector-2", item.CollectorName) + } +} + +func TestRelativelyEvenDistribution(t *testing.T) { + numCols := 15 + numItems := 10000 + cols := MakeNCollectors(numCols, 0) + var expectedPerCollector = float64(numItems / numCols) + expectedDelta := (expectedPerCollector * 1.5) - expectedPerCollector + c := newConsistentHashingAllocator(logger) + c.SetCollectors(cols) + c.SetTargets(MakeNNewTargets(numItems, 0, 0)) + actualTargetItems := c.TargetItems() + assert.Len(t, actualTargetItems, numItems) + actualCollectors := c.Collectors() + assert.Len(t, actualCollectors, numCols) + for _, col := range actualCollectors { + assert.InDelta(t, col.NumTargets, expectedPerCollector, expectedDelta) + } +} + +func TestFullReallocation(t *testing.T) { + cols := MakeNCollectors(10, 0) + c := newConsistentHashingAllocator(logger) + c.SetCollectors(cols) + c.SetTargets(MakeNNewTargets(10000, 10, 0)) + actualTargetItems := c.TargetItems() + assert.Len(t, actualTargetItems, 10000) + actualCollectors := c.Collectors() + assert.Len(t, actualCollectors, 10) + newCols := MakeNCollectors(10, 10) + c.SetCollectors(newCols) + updatedTargetItems := c.TargetItems() + assert.Len(t, updatedTargetItems, 10000) + updatedCollectors := c.Collectors() + assert.Len(t, updatedCollectors, 10) + for _, item := range updatedTargetItems { + _, ok := updatedCollectors[item.CollectorName] + assert.True(t, ok, "Some items weren't reallocated correctly") + } +} + +func TestNumRemapped(t *testing.T) { + numItems := 10_000 + numInitialCols := 15 + numFinalCols := 16 + expectedDelta := float64((numFinalCols - numInitialCols) * (numItems / numFinalCols)) + cols := MakeNCollectors(numInitialCols, 0) + c := newConsistentHashingAllocator(logger) + c.SetCollectors(cols) + c.SetTargets(MakeNNewTargets(numItems, numInitialCols, 0)) + actualTargetItems := c.TargetItems() + assert.Len(t, actualTargetItems, numItems) + actualCollectors := c.Collectors() + assert.Len(t, actualCollectors, numInitialCols) + newCols := MakeNCollectors(numFinalCols, 0) + c.SetCollectors(newCols) + updatedTargetItems := c.TargetItems() + assert.Len(t, updatedTargetItems, numItems) + updatedCollectors := c.Collectors() + assert.Len(t, updatedCollectors, numFinalCols) + countRemapped := 0 + countNotRemapped := 0 + for _, item := range updatedTargetItems { + previousItem, ok := actualTargetItems[item.Hash()] + assert.True(t, ok) + if previousItem.CollectorName != item.CollectorName { + countRemapped++ + } else { + countNotRemapped++ + } + } + assert.InDelta(t, numItems/numFinalCols, countRemapped, expectedDelta) +} diff --git a/otelcollector/otel-allocator/allocation/least_weighted.go b/otelcollector/otel-allocator/allocation/least_weighted.go new file mode 100644 index 000000000..012d9bbfa --- /dev/null +++ b/otelcollector/otel-allocator/allocation/least_weighted.go @@ -0,0 +1,261 @@ +// Copyright The OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package allocation + +import ( + "sync" + + "github.com/open-telemetry/opentelemetry-operator/cmd/otel-allocator/diff" + "github.com/open-telemetry/opentelemetry-operator/cmd/otel-allocator/target" + + "github.com/go-logr/logr" + "github.com/prometheus/client_golang/prometheus" +) + +var _ Allocator = &leastWeightedAllocator{} + +const leastWeightedStrategyName = "least-weighted" + +/* + Load balancer will serve on an HTTP server exposing /jobs//targets + The targets are allocated using the least connection method + Load balancer will need information about the collectors in order to set the URLs + Keep a Map of what each collector currently holds and update it based on new scrape target updates +*/ + +// leastWeightedAllocator makes decisions to distribute work among +// a number of OpenTelemetry collectors based on the number of targets. +// Users need to call SetTargets when they have new targets in their +// clusters and call SetCollectors when the collectors have changed. +type leastWeightedAllocator struct { + // m protects collectors and targetItems for concurrent use. + m sync.RWMutex + // collectors is a map from a Collector's name to a Collector instance + collectors map[string]*Collector + // targetItems is a map from a target item's hash to the target items allocated state + targetItems map[string]*target.Item + + // collectorKey -> job -> target item hash -> true + targetItemsPerJobPerCollector map[string]map[string]map[string]bool + + log logr.Logger + + filter Filter +} + +// SetFilter sets the filtering hook to use. +func (allocator *leastWeightedAllocator) SetFilter(filter Filter) { + allocator.filter = filter +} + +func (allocator *leastWeightedAllocator) GetTargetsForCollectorAndJob(collector string, job string) []*target.Item { + allocator.m.RLock() + defer allocator.m.RUnlock() + if _, ok := allocator.targetItemsPerJobPerCollector[collector]; !ok { + return []*target.Item{} + } + if _, ok := allocator.targetItemsPerJobPerCollector[collector][job]; !ok { + return []*target.Item{} + } + targetItemsCopy := make([]*target.Item, len(allocator.targetItemsPerJobPerCollector[collector][job])) + index := 0 + for targetHash := range allocator.targetItemsPerJobPerCollector[collector][job] { + targetItemsCopy[index] = allocator.targetItems[targetHash] + index++ + } + return targetItemsCopy +} + +// TargetItems returns a shallow copy of the targetItems map. +func (allocator *leastWeightedAllocator) TargetItems() map[string]*target.Item { + allocator.m.RLock() + defer allocator.m.RUnlock() + targetItemsCopy := make(map[string]*target.Item) + for k, v := range allocator.targetItems { + targetItemsCopy[k] = v + } + return targetItemsCopy +} + +// Collectors returns a shallow copy of the collectors map. +func (allocator *leastWeightedAllocator) Collectors() map[string]*Collector { + allocator.m.RLock() + defer allocator.m.RUnlock() + collectorsCopy := make(map[string]*Collector) + for k, v := range allocator.collectors { + collectorsCopy[k] = v + } + return collectorsCopy +} + +// findNextCollector finds the next collector with fewer number of targets. +// This method is called from within SetTargets and SetCollectors, whose caller +// acquires the needed lock. This method assumes there are is at least 1 collector set. +// INVARIANT: allocator.collectors must have at least 1 collector set. +func (allocator *leastWeightedAllocator) findNextCollector() *Collector { + var col *Collector + for _, v := range allocator.collectors { + // If the initial collector is empty, set the initial collector to the first element of map + if col == nil { + col = v + } else if v.NumTargets < col.NumTargets { + col = v + } + } + return col +} + +// addCollectorTargetItemMapping keeps track of which collector has which jobs and targets +// this allows the allocator to respond without any extra allocations to http calls. The caller of this method +// has to acquire a lock. +func (allocator *leastWeightedAllocator) addCollectorTargetItemMapping(tg *target.Item) { + if allocator.targetItemsPerJobPerCollector[tg.CollectorName] == nil { + allocator.targetItemsPerJobPerCollector[tg.CollectorName] = make(map[string]map[string]bool) + } + if allocator.targetItemsPerJobPerCollector[tg.CollectorName][tg.JobName] == nil { + allocator.targetItemsPerJobPerCollector[tg.CollectorName][tg.JobName] = make(map[string]bool) + } + allocator.targetItemsPerJobPerCollector[tg.CollectorName][tg.JobName][tg.Hash()] = true +} + +// addTargetToTargetItems assigns a target to the next available collector and adds it to the allocator's targetItems +// This method is called from within SetTargets and SetCollectors, which acquire the needed lock. +// This is only called after the collectors are cleared or when a new target has been found in the tempTargetMap. +// INVARIANT: allocator.collectors must have at least 1 collector set. +// NOTE: by not creating a new target item, there is the potential for a race condition where we modify this target +// item while it's being encoded by the server JSON handler. +func (allocator *leastWeightedAllocator) addTargetToTargetItems(tg *target.Item) { + chosenCollector := allocator.findNextCollector() + tg.CollectorName = chosenCollector.Name + allocator.targetItems[tg.Hash()] = tg + allocator.addCollectorTargetItemMapping(tg) + chosenCollector.NumTargets++ + TargetsPerCollector.WithLabelValues(chosenCollector.Name, leastWeightedStrategyName).Set(float64(chosenCollector.NumTargets)) +} + +// handleTargets receives the new and removed targets and reconciles the current state. +// Any removals are removed from the allocator's targetItems and unassigned from the corresponding collector. +// Any net-new additions are assigned to the next available collector. +func (allocator *leastWeightedAllocator) handleTargets(diff diff.Changes[*target.Item]) { + // Check for removals + for k, item := range allocator.targetItems { + // if the current item is in the removals list + if _, ok := diff.Removals()[k]; ok { + c := allocator.collectors[item.CollectorName] + c.NumTargets-- + delete(allocator.targetItems, k) + delete(allocator.targetItemsPerJobPerCollector[item.CollectorName][item.JobName], item.Hash()) + TargetsPerCollector.WithLabelValues(item.CollectorName, leastWeightedStrategyName).Set(float64(c.NumTargets)) + } + } + + // Check for additions + for k, item := range diff.Additions() { + // Do nothing if the item is already there + if _, ok := allocator.targetItems[k]; ok { + continue + } else { + // Add item to item pool and assign a collector + allocator.addTargetToTargetItems(item) + } + } +} + +// handleCollectors receives the new and removed collectors and reconciles the current state. +// Any removals are removed from the allocator's collectors. New collectors are added to the allocator's collector map. +// Finally, any targets of removed collectors are reallocated to the next available collector. +func (allocator *leastWeightedAllocator) handleCollectors(diff diff.Changes[*Collector]) { + // Clear removed collectors + for _, k := range diff.Removals() { + delete(allocator.collectors, k.Name) + delete(allocator.targetItemsPerJobPerCollector, k.Name) + TargetsPerCollector.WithLabelValues(k.Name, leastWeightedStrategyName).Set(0) + } + // Insert the new collectors + for _, i := range diff.Additions() { + allocator.collectors[i.Name] = NewCollector(i.Name) + } + + // Re-Allocate targets of the removed collectors + for _, item := range allocator.targetItems { + if _, ok := diff.Removals()[item.CollectorName]; ok { + allocator.addTargetToTargetItems(item) + } + } +} + +// SetTargets accepts a list of targets that will be used to make +// load balancing decisions. This method should be called when there are +// new targets discovered or existing targets are shutdown. +func (allocator *leastWeightedAllocator) SetTargets(targets map[string]*target.Item) { + timer := prometheus.NewTimer(TimeToAssign.WithLabelValues("SetTargets", leastWeightedStrategyName)) + defer timer.ObserveDuration() + + if allocator.filter != nil { + targets = allocator.filter.Apply(targets) + } + RecordTargetsKept(targets) + + allocator.m.Lock() + defer allocator.m.Unlock() + + if len(allocator.collectors) == 0 { + allocator.log.Info("No collector instances present, cannot set targets") + return + } + // Check for target changes + targetsDiff := diff.Maps(allocator.targetItems, targets) + // If there are any additions or removals + if len(targetsDiff.Additions()) != 0 || len(targetsDiff.Removals()) != 0 { + allocator.handleTargets(targetsDiff) + } +} + +// SetCollectors sets the set of collectors with key=collectorName, value=Collector object. +// This method is called when Collectors are added or removed. +func (allocator *leastWeightedAllocator) SetCollectors(collectors map[string]*Collector) { + timer := prometheus.NewTimer(TimeToAssign.WithLabelValues("SetCollectors", leastWeightedStrategyName)) + defer timer.ObserveDuration() + + CollectorsAllocatable.WithLabelValues(leastWeightedStrategyName).Set(float64(len(collectors))) + if len(collectors) == 0 { + allocator.log.Info("No collector instances present") + return + } + + allocator.m.Lock() + defer allocator.m.Unlock() + + // Check for collector changes + collectorsDiff := diff.Maps(allocator.collectors, collectors) + if len(collectorsDiff.Additions()) != 0 || len(collectorsDiff.Removals()) != 0 { + allocator.handleCollectors(collectorsDiff) + } +} + +func newLeastWeightedAllocator(log logr.Logger, opts ...AllocationOption) Allocator { + lwAllocator := &leastWeightedAllocator{ + log: log, + collectors: make(map[string]*Collector), + targetItems: make(map[string]*target.Item), + targetItemsPerJobPerCollector: make(map[string]map[string]map[string]bool), + } + + for _, opt := range opts { + opt(lwAllocator) + } + + return lwAllocator +} diff --git a/otelcollector/otel-allocator/allocation/least_weighted_test.go b/otelcollector/otel-allocator/allocation/least_weighted_test.go new file mode 100644 index 000000000..90df0b39b --- /dev/null +++ b/otelcollector/otel-allocator/allocation/least_weighted_test.go @@ -0,0 +1,258 @@ +// Copyright The OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package allocation + +import ( + "math" + "math/rand" + "testing" + + "github.com/prometheus/common/model" + "github.com/stretchr/testify/assert" + logf "sigs.k8s.io/controller-runtime/pkg/log" + + "github.com/open-telemetry/opentelemetry-operator/cmd/otel-allocator/target" +) + +var logger = logf.Log.WithName("unit-tests") + +func TestSetCollectors(t *testing.T) { + s, _ := New("least-weighted", logger) + + cols := MakeNCollectors(3, 0) + s.SetCollectors(cols) + + expectedColLen := len(cols) + collectors := s.Collectors() + assert.Len(t, collectors, expectedColLen) + + for _, i := range cols { + assert.NotNil(t, collectors[i.Name]) + } +} + +func TestAddingAndRemovingTargets(t *testing.T) { + // prepare allocator with initial targets and collectors + s, _ := New("least-weighted", logger) + + cols := MakeNCollectors(3, 0) + s.SetCollectors(cols) + + initTargets := MakeNNewTargets(6, 3, 0) + + // test that targets and collectors are added properly + s.SetTargets(initTargets) + + // verify + expectedTargetLen := len(initTargets) + assert.Len(t, s.TargetItems(), expectedTargetLen) + + // prepare second round of targets + tar := MakeNNewTargets(4, 3, 0) + + // test that fewer targets are found - removed + s.SetTargets(tar) + + // verify + targetItems := s.TargetItems() + expectedNewTargetLen := len(tar) + assert.Len(t, targetItems, expectedNewTargetLen) + + // verify results map + for _, i := range tar { + _, ok := targetItems[i.Hash()] + assert.True(t, ok) + } +} + +// Tests that two targets with the same target url and job name but different label set are both added. +func TestAllocationCollision(t *testing.T) { + // prepare allocator with initial targets and collectors + s, _ := New("least-weighted", logger) + + cols := MakeNCollectors(3, 0) + s.SetCollectors(cols) + firstLabels := model.LabelSet{ + "test": "test1", + } + secondLabels := model.LabelSet{ + "test": "test2", + } + firstTarget := target.NewItem("sample-name", "0.0.0.0:8000", firstLabels, "") + secondTarget := target.NewItem("sample-name", "0.0.0.0:8000", secondLabels, "") + + targetList := map[string]*target.Item{ + firstTarget.Hash(): firstTarget, + secondTarget.Hash(): secondTarget, + } + + // test that targets and collectors are added properly + s.SetTargets(targetList) + + // verify + targetItems := s.TargetItems() + expectedTargetLen := len(targetList) + assert.Len(t, targetItems, expectedTargetLen) + + // verify results map + for _, i := range targetList { + _, ok := targetItems[i.Hash()] + assert.True(t, ok) + } +} + +func TestNoCollectorReassignment(t *testing.T) { + s, _ := New("least-weighted", logger) + + cols := MakeNCollectors(3, 0) + s.SetCollectors(cols) + + expectedColLen := len(cols) + assert.Len(t, s.Collectors(), expectedColLen) + + for _, i := range cols { + assert.NotNil(t, s.Collectors()[i.Name]) + } + initTargets := MakeNNewTargets(6, 3, 0) + + // test that targets and collectors are added properly + s.SetTargets(initTargets) + + // verify + expectedTargetLen := len(initTargets) + targetItems := s.TargetItems() + assert.Len(t, targetItems, expectedTargetLen) + + // assign new set of collectors with the same names + newCols := MakeNCollectors(3, 0) + s.SetCollectors(newCols) + + newTargetItems := s.TargetItems() + assert.Equal(t, targetItems, newTargetItems) + +} + +func TestSmartCollectorReassignment(t *testing.T) { + t.Skip("This test is flaky and fails frequently, see issue 1291") + s, _ := New("least-weighted", logger) + + cols := MakeNCollectors(4, 0) + s.SetCollectors(cols) + + expectedColLen := len(cols) + assert.Len(t, s.Collectors(), expectedColLen) + + for _, i := range cols { + assert.NotNil(t, s.Collectors()[i.Name]) + } + initTargets := MakeNNewTargets(6, 0, 0) + // test that targets and collectors are added properly + s.SetTargets(initTargets) + + // verify + expectedTargetLen := len(initTargets) + targetItems := s.TargetItems() + assert.Len(t, targetItems, expectedTargetLen) + + // assign new set of collectors with the same names + newCols := map[string]*Collector{ + "collector-0": { + Name: "collector-0", + }, "collector-1": { + Name: "collector-1", + }, "collector-2": { + Name: "collector-2", + }, "collector-4": { + Name: "collector-4", + }, + } + s.SetCollectors(newCols) + + newTargetItems := s.TargetItems() + assert.Equal(t, len(targetItems), len(newTargetItems)) + for key, targetItem := range targetItems { + item, ok := newTargetItems[key] + assert.True(t, ok, "all target items should be found in new target item list") + if targetItem.CollectorName != "collector-3" { + assert.Equal(t, targetItem.CollectorName, item.CollectorName) + } else { + assert.Equal(t, "collector-4", item.CollectorName) + } + } +} + +// Tests that the delta in number of targets per collector is less than 15% of an even distribution. +func TestCollectorBalanceWhenAddingAndRemovingAtRandom(t *testing.T) { + + // prepare allocator with 3 collectors and 'random' amount of targets + s, _ := New("least-weighted", logger) + + cols := MakeNCollectors(3, 0) + s.SetCollectors(cols) + + targets := MakeNNewTargets(27, 3, 0) + s.SetTargets(targets) + + // Divisor needed to get 15% + divisor := 6.7 + + targetItemLen := len(s.TargetItems()) + collectors := s.Collectors() + count := targetItemLen / len(collectors) + percent := float64(targetItemLen) / divisor + + // test + for _, i := range collectors { + assert.InDelta(t, i.NumTargets, count, percent) + } + + // removing targets at 'random' + // Remove half of targets randomly + toDelete := len(targets) / 2 + counter := 0 + for index := range targets { + shouldDelete := rand.Intn(toDelete) //nolint:gosec + if counter < shouldDelete { + delete(targets, index) + } + counter++ + } + s.SetTargets(targets) + + targetItemLen = len(s.TargetItems()) + collectors = s.Collectors() + count = targetItemLen / len(collectors) + percent = float64(targetItemLen) / divisor + + // test + for _, i := range collectors { + assert.InDelta(t, i.NumTargets, count, math.Round(percent)) + } + // adding targets at 'random' + for _, item := range MakeNNewTargets(13, 3, 100) { + targets[item.Hash()] = item + } + s.SetTargets(targets) + + targetItemLen = len(s.TargetItems()) + collectors = s.Collectors() + count = targetItemLen / len(collectors) + percent = float64(targetItemLen) / divisor + + // test + for _, i := range collectors { + assert.InDelta(t, i.NumTargets, count, math.Round(percent)) + } +} diff --git a/otelcollector/otel-allocator/allocation/strategy.go b/otelcollector/otel-allocator/allocation/strategy.go new file mode 100644 index 000000000..b99455773 --- /dev/null +++ b/otelcollector/otel-allocator/allocation/strategy.go @@ -0,0 +1,133 @@ +// Copyright The OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package allocation + +import ( + "errors" + "fmt" + + "github.com/buraksezer/consistent" + "github.com/go-logr/logr" + "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/client_golang/prometheus/promauto" + + "github.com/open-telemetry/opentelemetry-operator/cmd/otel-allocator/target" +) + +type AllocatorProvider func(log logr.Logger, opts ...AllocationOption) Allocator + +var ( + registry = map[string]AllocatorProvider{} + + // TargetsPerCollector records how many targets have been assigned to each collector. + // It is currently the responsibility of the strategy to track this information. + TargetsPerCollector = promauto.NewGaugeVec(prometheus.GaugeOpts{ + Name: "opentelemetry_allocator_targets_per_collector", + Help: "The number of targets for each collector.", + }, []string{"collector_name", "strategy"}) + CollectorsAllocatable = promauto.NewGaugeVec(prometheus.GaugeOpts{ + Name: "opentelemetry_allocator_collectors_allocatable", + Help: "Number of collectors the allocator is able to allocate to.", + }, []string{"strategy"}) + TimeToAssign = promauto.NewHistogramVec(prometheus.HistogramOpts{ + Name: "opentelemetry_allocator_time_to_allocate", + Help: "The time it takes to allocate", + }, []string{"method", "strategy"}) + targetsRemaining = promauto.NewCounter(prometheus.CounterOpts{ + Name: "opentelemetry_allocator_targets_remaining", + Help: "Number of targets kept after filtering.", + }) +) + +type AllocationOption func(Allocator) + +type Filter interface { + Apply(map[string]*target.Item) map[string]*target.Item +} + +func WithFilter(filter Filter) AllocationOption { + return func(allocator Allocator) { + allocator.SetFilter(filter) + } +} + +func RecordTargetsKept(targets map[string]*target.Item) { + targetsRemaining.Add(float64(len(targets))) +} + +func New(name string, log logr.Logger, opts ...AllocationOption) (Allocator, error) { + if p, ok := registry[name]; ok { + return p(log.WithValues("allocator", name), opts...), nil + } + return nil, fmt.Errorf("unregistered strategy: %s", name) +} + +func Register(name string, provider AllocatorProvider) error { + if _, ok := registry[name]; ok { + return errors.New("already registered") + } + registry[name] = provider + return nil +} + +func GetRegisteredAllocatorNames() []string { + var names []string + for s := range registry { + names = append(names, s) + } + return names +} + +type Allocator interface { + SetCollectors(collectors map[string]*Collector) + SetTargets(targets map[string]*target.Item) + TargetItems() map[string]*target.Item + Collectors() map[string]*Collector + GetTargetsForCollectorAndJob(collector string, job string) []*target.Item + SetFilter(filter Filter) +} + +var _ consistent.Member = Collector{} + +// Collector Creates a struct that holds Collector information. +// This struct will be parsed into endpoint with Collector and jobs info. +// This struct can be extended with information like annotations and labels in the future. +type Collector struct { + Name string + NumTargets int +} + +func (c Collector) Hash() string { + return c.Name +} + +func (c Collector) String() string { + return c.Name +} + +func NewCollector(name string) *Collector { + return &Collector{Name: name} +} + +func init() { + err := Register(leastWeightedStrategyName, newLeastWeightedAllocator) + if err != nil { + panic(err) + } + err = Register(consistentHashingStrategyName, newConsistentHashingAllocator) + if err != nil { + panic(err) + } +} diff --git a/otelcollector/otel-allocator/allocation/strategy_test.go b/otelcollector/otel-allocator/allocation/strategy_test.go new file mode 100644 index 000000000..c12529d8d --- /dev/null +++ b/otelcollector/otel-allocator/allocation/strategy_test.go @@ -0,0 +1,136 @@ +// Copyright The OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package allocation + +import ( + "fmt" + "reflect" + "testing" + + "github.com/open-telemetry/opentelemetry-operator/cmd/otel-allocator/diff" +) + +func BenchmarkGetAllTargetsByCollectorAndJob(b *testing.B) { + var table = []struct { + numCollectors int + numJobs int + }{ + {numCollectors: 100, numJobs: 100}, + {numCollectors: 100, numJobs: 1000}, + {numCollectors: 100, numJobs: 10000}, + {numCollectors: 100, numJobs: 100000}, + {numCollectors: 1000, numJobs: 100}, + {numCollectors: 1000, numJobs: 1000}, + {numCollectors: 1000, numJobs: 10000}, + {numCollectors: 1000, numJobs: 100000}, + } + for _, s := range GetRegisteredAllocatorNames() { + for _, v := range table { + a, err := New(s, logger) + if err != nil { + b.Log(err) + b.Fail() + } + cols := MakeNCollectors(v.numCollectors, 0) + jobs := MakeNNewTargets(v.numJobs, v.numCollectors, 0) + a.SetCollectors(cols) + a.SetTargets(jobs) + b.Run(fmt.Sprintf("%s_num_cols_%d_num_jobs_%d", s, v.numCollectors, v.numJobs), func(b *testing.B) { + b.ReportAllocs() + for i := 0; i < b.N; i++ { + a.GetTargetsForCollectorAndJob(fmt.Sprintf("collector-%d", v.numCollectors/2), fmt.Sprintf("test-job-%d", v.numJobs/2)) + } + }) + } + } +} + +func Benchmark_Setting(b *testing.B) { + var table = []struct { + numCollectors int + numTargets int + }{ + {numCollectors: 100, numTargets: 100}, + {numCollectors: 100, numTargets: 1000}, + {numCollectors: 100, numTargets: 10000}, + {numCollectors: 100, numTargets: 100000}, + {numCollectors: 1000, numTargets: 100}, + {numCollectors: 1000, numTargets: 1000}, + {numCollectors: 1000, numTargets: 10000}, + {numCollectors: 1000, numTargets: 100000}, + } + + for _, s := range GetRegisteredAllocatorNames() { + for _, v := range table { + a, _ := New(s, logger) + cols := MakeNCollectors(v.numCollectors, 0) + targets := MakeNNewTargets(v.numTargets, v.numCollectors, 0) + b.Run(fmt.Sprintf("%s_num_cols_%d_num_jobs_%d", s, v.numCollectors, v.numTargets), func(b *testing.B) { + b.ReportAllocs() + for i := 0; i < b.N; i++ { + a.SetCollectors(cols) + a.SetTargets(targets) + } + }) + } + } +} + +func TestCollectorDiff(t *testing.T) { + collector0 := NewCollector("collector-0") + collector1 := NewCollector("collector-1") + collector2 := NewCollector("collector-2") + collector3 := NewCollector("collector-3") + collector4 := NewCollector("collector-4") + type args struct { + current map[string]*Collector + new map[string]*Collector + } + tests := []struct { + name string + args args + want diff.Changes[*Collector] + }{ + { + name: "diff two collector maps", + args: args{ + current: map[string]*Collector{ + "collector-0": collector0, + "collector-1": collector1, + "collector-2": collector2, + "collector-3": collector3, + }, + new: map[string]*Collector{ + "collector-0": collector0, + "collector-1": collector1, + "collector-2": collector2, + "collector-4": collector4, + }, + }, + want: diff.NewChanges(map[string]*Collector{ + "collector-4": collector4, + }, map[string]*Collector{ + "collector-3": collector3, + }), + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := diff.Maps(tt.args.current, tt.args.new); !reflect.DeepEqual(got, tt.want) { + t.Errorf("DiffMaps() = %v, want %v", got, tt.want) + } + }) + } +} diff --git a/otelcollector/otel-allocator/collector/collector.go b/otelcollector/otel-allocator/collector/collector.go new file mode 100644 index 000000000..eaeee8e16 --- /dev/null +++ b/otelcollector/otel-allocator/collector/collector.go @@ -0,0 +1,144 @@ +// Copyright The OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package collector + +import ( + "context" + "os" + "time" + + "github.com/go-logr/logr" + "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/client_golang/prometheus/promauto" + v1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/apimachinery/pkg/watch" + "k8s.io/client-go/kubernetes" + "k8s.io/client-go/rest" + + "github.com/open-telemetry/opentelemetry-operator/cmd/otel-allocator/allocation" +) + +const ( + watcherTimeout = 15 * time.Minute +) + +var ( + ns = os.Getenv("OTELCOL_NAMESPACE") + collectorsDiscovered = promauto.NewGauge(prometheus.GaugeOpts{ + Name: "opentelemetry_allocator_collectors_discovered", + Help: "Number of collectors discovered.", + }) +) + +type Client struct { + log logr.Logger + k8sClient kubernetes.Interface + close chan struct{} +} + +func NewClient(logger logr.Logger, kubeConfig *rest.Config) (*Client, error) { + clientset, err := kubernetes.NewForConfig(kubeConfig) + if err != nil { + return &Client{}, err + } + + return &Client{ + log: logger.WithValues("component", "opentelemetry-targetallocator"), + k8sClient: clientset, + close: make(chan struct{}), + }, nil +} + +func (k *Client) Watch(ctx context.Context, labelMap map[string]string, fn func(collectors map[string]*allocation.Collector)) error { + collectorMap := map[string]*allocation.Collector{} + + opts := metav1.ListOptions{ + LabelSelector: labels.SelectorFromSet(labelMap).String(), + } + pods, err := k.k8sClient.CoreV1().Pods(ns).List(ctx, opts) + if err != nil { + k.log.Error(err, "Pod failure") + os.Exit(1) + } + for i := range pods.Items { + pod := pods.Items[i] + if pod.GetObjectMeta().GetDeletionTimestamp() == nil { + collectorMap[pod.Name] = allocation.NewCollector(pod.Name) + } + } + + fn(collectorMap) + + for { + if !k.restartWatch(ctx, opts, collectorMap, fn) { + return nil + } + } +} + +func (k *Client) restartWatch(ctx context.Context, opts metav1.ListOptions, collectorMap map[string]*allocation.Collector, fn func(collectors map[string]*allocation.Collector)) bool { + // add timeout to the context before calling Watch + ctx, cancel := context.WithTimeout(ctx, watcherTimeout) + defer cancel() + watcher, err := k.k8sClient.CoreV1().Pods(ns).Watch(ctx, opts) + if err != nil { + k.log.Error(err, "unable to create collector pod watcher") + return false + } + k.log.Info("Successfully started a collector pod watcher") + if msg := runWatch(ctx, k, watcher.ResultChan(), collectorMap, fn); msg != "" { + k.log.Info("Collector pod watch event stopped " + msg) + return false + } + + return true +} + +func runWatch(ctx context.Context, k *Client, c <-chan watch.Event, collectorMap map[string]*allocation.Collector, fn func(collectors map[string]*allocation.Collector)) string { + for { + collectorsDiscovered.Set(float64(len(collectorMap))) + select { + case <-k.close: + return "kubernetes client closed" + case <-ctx.Done(): + return "" + case event, ok := <-c: + if !ok { + k.log.Info("No event found. Restarting watch routine") + return "" + } + + pod, ok := event.Object.(*v1.Pod) + if !ok { + k.log.Info("No pod found in event Object. Restarting watch routine") + return "" + } + + switch event.Type { //nolint:exhaustive + case watch.Added: + collectorMap[pod.Name] = allocation.NewCollector(pod.Name) + case watch.Deleted: + delete(collectorMap, pod.Name) + } + fn(collectorMap) + } + } +} + +func (k *Client) Close() { + close(k.close) +} diff --git a/otelcollector/otel-allocator/collector/collector_test.go b/otelcollector/otel-allocator/collector/collector_test.go new file mode 100644 index 000000000..5367828e2 --- /dev/null +++ b/otelcollector/otel-allocator/collector/collector_test.go @@ -0,0 +1,221 @@ +// Copyright The OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package collector + +import ( + "context" + "fmt" + "os" + "sync" + "testing" + "time" + + "k8s.io/apimachinery/pkg/watch" + logf "sigs.k8s.io/controller-runtime/pkg/log" + + "github.com/stretchr/testify/assert" + v1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/kubernetes/fake" + + "github.com/open-telemetry/opentelemetry-operator/cmd/otel-allocator/allocation" +) + +var logger = logf.Log.WithName("collector-unit-tests") + +func getTestClient() (Client, watch.Interface) { + kubeClient := Client{ + k8sClient: fake.NewSimpleClientset(), + close: make(chan struct{}), + log: logger, + } + + labelMap := map[string]string{ + "app.kubernetes.io/instance": "default.test", + "app.kubernetes.io/managed-by": "opentelemetry-operator", + } + + opts := metav1.ListOptions{ + LabelSelector: labels.SelectorFromSet(labelMap).String(), + } + watcher, err := kubeClient.k8sClient.CoreV1().Pods("test-ns").Watch(context.Background(), opts) + if err != nil { + fmt.Printf("failed to setup a Collector Pod watcher: %v", err) + os.Exit(1) + } + return kubeClient, watcher +} + +func pod(name string) *v1.Pod { + labelSet := make(map[string]string) + labelSet["app.kubernetes.io/instance"] = "default.test" + labelSet["app.kubernetes.io/managed-by"] = "opentelemetry-operator" + + return &v1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + Namespace: "test-ns", + Labels: labelSet, + }, + } +} + +func Test_runWatch(t *testing.T) { + type args struct { + kubeFn func(t *testing.T, client Client, group *sync.WaitGroup) + collectorMap map[string]*allocation.Collector + } + tests := []struct { + name string + args args + want map[string]*allocation.Collector + }{ + { + name: "pod add", + args: args{ + kubeFn: func(t *testing.T, client Client, group *sync.WaitGroup) { + for _, k := range []string{"test-pod1", "test-pod2", "test-pod3"} { + p := pod(k) + group.Add(1) + _, err := client.k8sClient.CoreV1().Pods("test-ns").Create(context.Background(), p, metav1.CreateOptions{}) + assert.NoError(t, err) + } + }, + collectorMap: map[string]*allocation.Collector{}, + }, + want: map[string]*allocation.Collector{ + "test-pod1": { + Name: "test-pod1", + }, + "test-pod2": { + Name: "test-pod2", + }, + "test-pod3": { + Name: "test-pod3", + }, + }, + }, + { + name: "pod delete", + args: args{ + kubeFn: func(t *testing.T, client Client, group *sync.WaitGroup) { + for _, k := range []string{"test-pod2", "test-pod3"} { + group.Add(1) + err := client.k8sClient.CoreV1().Pods("test-ns").Delete(context.Background(), k, metav1.DeleteOptions{}) + assert.NoError(t, err) + } + }, + collectorMap: map[string]*allocation.Collector{ + "test-pod1": { + Name: "test-pod1", + }, + "test-pod2": { + Name: "test-pod2", + }, + "test-pod3": { + Name: "test-pod3", + }, + }, + }, + want: map[string]*allocation.Collector{ + "test-pod1": { + Name: "test-pod1", + }, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + kubeClient, watcher := getTestClient() + defer func() { + close(kubeClient.close) + watcher.Stop() + }() + var wg sync.WaitGroup + actual := make(map[string]*allocation.Collector) + for _, k := range tt.args.collectorMap { + p := pod(k.Name) + _, err := kubeClient.k8sClient.CoreV1().Pods("test-ns").Create(context.Background(), p, metav1.CreateOptions{}) + wg.Add(1) + assert.NoError(t, err) + } + go runWatch(context.Background(), &kubeClient, watcher.ResultChan(), map[string]*allocation.Collector{}, func(colMap map[string]*allocation.Collector) { + actual = colMap + wg.Done() + }) + + tt.args.kubeFn(t, kubeClient, &wg) + wg.Wait() + + assert.Len(t, actual, len(tt.want)) + assert.Equal(t, actual, tt.want) + }) + } +} + +// this tests runWatch in the case of watcher channel closing and watcher timing out. +func Test_closeChannel(t *testing.T) { + tests := []struct { + description string + isCloseChannel bool + timeoutSeconds time.Duration + }{ + { + // event is triggered by channel closing. + description: "close_channel", + isCloseChannel: true, + // channel should be closed before this timeout occurs + timeoutSeconds: 10 * time.Second, + }, + { + // event triggered by timeout. + description: "watcher_timeout", + isCloseChannel: false, + timeoutSeconds: 0 * time.Second, + }, + } + + for _, tc := range tests { + t.Run(tc.description, func(t *testing.T) { + kubeClient, watcher := getTestClient() + + defer func() { + close(kubeClient.close) + watcher.Stop() + }() + var wg sync.WaitGroup + wg.Add(1) + terminated := false + + go func(watcher watch.Interface) { + defer wg.Done() + ctx, cancel := context.WithTimeout(context.Background(), tc.timeoutSeconds) + defer cancel() + if msg := runWatch(ctx, &kubeClient, watcher.ResultChan(), map[string]*allocation.Collector{}, func(colMap map[string]*allocation.Collector) {}); msg != "" { + terminated = true + return + } + }(watcher) + + if tc.isCloseChannel { + // stop pod watcher to trigger event. + watcher.Stop() + } + wg.Wait() + assert.False(t, terminated) + }) + } +} diff --git a/otelcollector/otel-allocator/config/config.go b/otelcollector/otel-allocator/config/config.go new file mode 100644 index 000000000..569eac851 --- /dev/null +++ b/otelcollector/otel-allocator/config/config.go @@ -0,0 +1,140 @@ +// Copyright The OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package config + +import ( + "errors" + "flag" + "fmt" + "io/fs" + "os" + "path/filepath" + "time" + + "github.com/go-logr/logr" + promconfig "github.com/prometheus/prometheus/config" + _ "github.com/prometheus/prometheus/discovery/install" + "github.com/spf13/pflag" + "gopkg.in/yaml.v2" + "k8s.io/client-go/rest" + "k8s.io/client-go/tools/clientcmd" + "k8s.io/client-go/util/homedir" + "k8s.io/klog/v2" + ctrl "sigs.k8s.io/controller-runtime" + "sigs.k8s.io/controller-runtime/pkg/log/zap" +) + +const DefaultResyncTime = 5 * time.Minute +const DefaultConfigFilePath string = "/conf/targetallocator.yaml" + +type Config struct { + LabelSelector map[string]string `yaml:"label_selector,omitempty"` + Config *promconfig.Config `yaml:"config"` + AllocationStrategy *string `yaml:"allocation_strategy,omitempty"` + FilterStrategy *string `yaml:"filter_strategy,omitempty"` + PodMonitorSelector map[string]string `yaml:"pod_monitor_selector,omitempty"` + ServiceMonitorSelector map[string]string `yaml:"service_monitor_selector,omitempty"` +} + +func (c Config) GetAllocationStrategy() string { + if c.AllocationStrategy != nil { + return *c.AllocationStrategy + } + return "least-weighted" +} + +func (c Config) GetTargetsFilterStrategy() string { + if c.FilterStrategy != nil { + return *c.FilterStrategy + } + return "" +} + +type PrometheusCRWatcherConfig struct { + Enabled *bool +} + +type CLIConfig struct { + ListenAddr *string + ConfigFilePath *string + ClusterConfig *rest.Config + // KubeConfigFilePath empty if in cluster configuration is in use + KubeConfigFilePath string + RootLogger logr.Logger + PromCRWatcherConf PrometheusCRWatcherConfig +} + +func Load(file string) (Config, error) { + var cfg Config + if err := unmarshal(&cfg, file); err != nil { + return Config{}, err + } + return cfg, nil +} + +func unmarshal(cfg *Config, configFile string) error { + + yamlFile, err := os.ReadFile(configFile) + if err != nil { + return err + } + if err = yaml.UnmarshalStrict(yamlFile, cfg); err != nil { + return fmt.Errorf("error unmarshaling YAML: %w", err) + } + return nil +} + +func ParseCLI() (CLIConfig, error) { + opts := zap.Options{} + opts.BindFlags(flag.CommandLine) + cLIConf := CLIConfig{ + ListenAddr: pflag.String("listen-addr", ":8080", "The address where this service serves."), + ConfigFilePath: pflag.String("config-file", DefaultConfigFilePath, "The path to the config file."), + PromCRWatcherConf: PrometheusCRWatcherConfig{ + Enabled: pflag.Bool("enable-prometheus-cr-watcher", false, "Enable Prometheus CRs as target sources"), + }, + } + kubeconfigPath := pflag.String("kubeconfig-path", filepath.Join(homedir.HomeDir(), ".kube", "config"), "absolute path to the KubeconfigPath file") + pflag.Parse() + + cLIConf.RootLogger = zap.New(zap.UseFlagOptions(&opts)) + klog.SetLogger(cLIConf.RootLogger) + ctrl.SetLogger(cLIConf.RootLogger) + + clusterConfig, err := clientcmd.BuildConfigFromFlags("", *kubeconfigPath) + cLIConf.KubeConfigFilePath = *kubeconfigPath + if err != nil { + pathError := &fs.PathError{} + if ok := errors.As(err, &pathError); !ok { + return CLIConfig{}, err + } + clusterConfig, err = rest.InClusterConfig() + if err != nil { + return CLIConfig{}, err + } + cLIConf.KubeConfigFilePath = "" // reset as we use in cluster configuration + } + cLIConf.ClusterConfig = clusterConfig + return cLIConf, nil +} + +// ValidateConfig validates the cli and file configs together. +func ValidateConfig(config *Config, cliConfig *CLIConfig) error { + scrapeConfigsPresent := (config.Config != nil && len(config.Config.ScrapeConfigs) > 0) + if !(*cliConfig.PromCRWatcherConf.Enabled || scrapeConfigsPresent) { + return fmt.Errorf("at least one scrape config must be defined, or Prometheus CR watching must be enabled") + } + return nil +} diff --git a/otelcollector/otel-allocator/config/config_test.go b/otelcollector/otel-allocator/config/config_test.go new file mode 100644 index 000000000..65e28aeef --- /dev/null +++ b/otelcollector/otel-allocator/config/config_test.go @@ -0,0 +1,220 @@ +// Copyright The OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package config + +import ( + "fmt" + "testing" + "time" + + commonconfig "github.com/prometheus/common/config" + promconfig "github.com/prometheus/prometheus/config" + + "github.com/prometheus/common/model" + "github.com/prometheus/prometheus/discovery" + "github.com/prometheus/prometheus/discovery/file" + "github.com/stretchr/testify/assert" +) + +func TestLoad(t *testing.T) { + type args struct { + file string + } + tests := []struct { + name string + args args + want Config + wantErr assert.ErrorAssertionFunc + }{ + { + name: "file sd load", + args: args{ + file: "./testdata/config_test.yaml", + }, + want: Config{ + LabelSelector: map[string]string{ + "app.kubernetes.io/instance": "default.test", + "app.kubernetes.io/managed-by": "opentelemetry-operator", + }, + Config: &promconfig.Config{ + GlobalConfig: promconfig.GlobalConfig{ + ScrapeInterval: model.Duration(60 * time.Second), + ScrapeTimeout: model.Duration(10 * time.Second), + EvaluationInterval: model.Duration(60 * time.Second), + }, + ScrapeConfigs: []*promconfig.ScrapeConfig{ + { + JobName: "prometheus", + HonorTimestamps: true, + ScrapeInterval: model.Duration(60 * time.Second), + ScrapeTimeout: model.Duration(10 * time.Second), + MetricsPath: "/metrics", + Scheme: "http", + HTTPClientConfig: commonconfig.HTTPClientConfig{ + FollowRedirects: true, + EnableHTTP2: true, + }, + ServiceDiscoveryConfigs: []discovery.Config{ + &file.SDConfig{ + Files: []string{"./file_sd_test.json"}, + RefreshInterval: model.Duration(5 * time.Minute), + }, + discovery.StaticConfig{ + { + Targets: []model.LabelSet{ + {model.AddressLabel: "prom.domain:9001"}, + {model.AddressLabel: "prom.domain:9002"}, + {model.AddressLabel: "prom.domain:9003"}, + }, + Labels: model.LabelSet{ + "my": "label", + }, + Source: "0", + }, + }, + }, + }, + }, + }, + }, + wantErr: assert.NoError, + }, + { + name: "no config", + args: args{ + file: "./testdata/no_config.yaml", + }, + want: Config{}, + wantErr: assert.NoError, + }, + { + name: "service monitor pod monitor selector", + args: args{ + file: "./testdata/pod_service_selector_test.yaml", + }, + want: Config{ + LabelSelector: map[string]string{ + "app.kubernetes.io/instance": "default.test", + "app.kubernetes.io/managed-by": "opentelemetry-operator", + }, + Config: &promconfig.Config{ + GlobalConfig: promconfig.GlobalConfig{ + ScrapeInterval: model.Duration(60 * time.Second), + ScrapeTimeout: model.Duration(10 * time.Second), + EvaluationInterval: model.Duration(60 * time.Second), + }, + ScrapeConfigs: []*promconfig.ScrapeConfig{ + { + JobName: "prometheus", + HonorTimestamps: true, + ScrapeInterval: model.Duration(60 * time.Second), + ScrapeTimeout: model.Duration(10 * time.Second), + MetricsPath: "/metrics", + Scheme: "http", + HTTPClientConfig: commonconfig.HTTPClientConfig{ + FollowRedirects: true, + EnableHTTP2: true, + }, + ServiceDiscoveryConfigs: []discovery.Config{ + discovery.StaticConfig{ + { + Targets: []model.LabelSet{ + {model.AddressLabel: "prom.domain:9001"}, + {model.AddressLabel: "prom.domain:9002"}, + {model.AddressLabel: "prom.domain:9003"}, + }, + Labels: model.LabelSet{ + "my": "label", + }, + Source: "0", + }, + }, + }, + }, + }, + }, + PodMonitorSelector: map[string]string{ + "release": "test", + }, + ServiceMonitorSelector: map[string]string{ + "release": "test", + }, + }, + wantErr: assert.NoError, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := Load(tt.args.file) + if !tt.wantErr(t, err, fmt.Sprintf("Load(%v)", tt.args.file)) { + return + } + assert.Equalf(t, tt.want, got, "Load(%v)", tt.args.file) + }) + } +} + +func TestValidateConfig(t *testing.T) { + enabled := true + disabled := false + testCases := []struct { + name string + cliConfig CLIConfig + fileConfig Config + expectedErr error + }{ + { + name: "promCR enabled, no Prometheus config", + cliConfig: CLIConfig{PromCRWatcherConf: PrometheusCRWatcherConfig{Enabled: &enabled}}, + fileConfig: Config{Config: nil}, + expectedErr: nil, + }, + { + name: "promCR disabled, no Prometheus config", + cliConfig: CLIConfig{PromCRWatcherConf: PrometheusCRWatcherConfig{Enabled: &disabled}}, + fileConfig: Config{Config: nil}, + expectedErr: fmt.Errorf("at least one scrape config must be defined, or Prometheus CR watching must be enabled"), + }, + { + name: "promCR disabled, Prometheus config present, no scrapeConfigs", + cliConfig: CLIConfig{PromCRWatcherConf: PrometheusCRWatcherConfig{Enabled: &disabled}}, + fileConfig: Config{Config: &promconfig.Config{}}, + expectedErr: fmt.Errorf("at least one scrape config must be defined, or Prometheus CR watching must be enabled"), + }, + { + name: "promCR disabled, Prometheus config present, scrapeConfigs present", + cliConfig: CLIConfig{PromCRWatcherConf: PrometheusCRWatcherConfig{Enabled: &disabled}}, + fileConfig: Config{ + Config: &promconfig.Config{ScrapeConfigs: []*promconfig.ScrapeConfig{{}}}, + }, + expectedErr: nil, + }, + { + name: "promCR enabled, Prometheus config present, scrapeConfigs present", + cliConfig: CLIConfig{PromCRWatcherConf: PrometheusCRWatcherConfig{Enabled: &enabled}}, + fileConfig: Config{ + Config: &promconfig.Config{ScrapeConfigs: []*promconfig.ScrapeConfig{{}}}, + }, + expectedErr: nil, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + err := ValidateConfig(&tc.fileConfig, &tc.cliConfig) + assert.Equal(t, tc.expectedErr, err) + }) + } +} diff --git a/otelcollector/otel-allocator/config/testdata/config_test.yaml b/otelcollector/otel-allocator/config/testdata/config_test.yaml new file mode 100644 index 000000000..67670f26f --- /dev/null +++ b/otelcollector/otel-allocator/config/testdata/config_test.yaml @@ -0,0 +1,15 @@ +label_selector: + app.kubernetes.io/instance: default.test + app.kubernetes.io/managed-by: opentelemetry-operator +config: + scrape_configs: + - job_name: prometheus + + file_sd_configs: + - files: + - ./file_sd_test.json + + static_configs: + - targets: ["prom.domain:9001", "prom.domain:9002", "prom.domain:9003"] + labels: + my: label \ No newline at end of file diff --git a/otelcollector/otel-allocator/config/testdata/file_sd_test.json b/otelcollector/otel-allocator/config/testdata/file_sd_test.json new file mode 100644 index 000000000..7114e6246 --- /dev/null +++ b/otelcollector/otel-allocator/config/testdata/file_sd_test.json @@ -0,0 +1,18 @@ +[ + { + "labels": { + "job": "node" + }, + "targets": [ + "promfile.domain:1001" + ] + }, + { + "labels": { + "foo1": "bar1" + }, + "targets": [ + "promfile.domain:3000" + ] + } +] diff --git a/otelcollector/otel-allocator/config/testdata/no_config.yaml b/otelcollector/otel-allocator/config/testdata/no_config.yaml new file mode 100644 index 000000000..e69de29bb diff --git a/otelcollector/otel-allocator/config/testdata/pod_service_selector_test.yaml b/otelcollector/otel-allocator/config/testdata/pod_service_selector_test.yaml new file mode 100644 index 000000000..c0ff54ad3 --- /dev/null +++ b/otelcollector/otel-allocator/config/testdata/pod_service_selector_test.yaml @@ -0,0 +1,14 @@ +label_selector: + app.kubernetes.io/instance: default.test + app.kubernetes.io/managed-by: opentelemetry-operator +pod_monitor_selector: + release: test +service_monitor_selector: + release: test +config: + scrape_configs: + - job_name: prometheus + static_configs: + - targets: ["prom.domain:9001", "prom.domain:9002", "prom.domain:9003"] + labels: + my: label \ No newline at end of file diff --git a/otelcollector/otel-allocator/diff/diff.go b/otelcollector/otel-allocator/diff/diff.go new file mode 100644 index 000000000..93bed4dae --- /dev/null +++ b/otelcollector/otel-allocator/diff/diff.go @@ -0,0 +1,63 @@ +// Copyright The OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package diff + +// Changes is the result of the difference between two maps – items that are added and items that are removed +// This map is used to reconcile state differences. +type Changes[T Hasher] struct { + additions map[string]T + removals map[string]T +} + +type Hasher interface { + Hash() string +} + +func NewChanges[T Hasher](additions map[string]T, removals map[string]T) Changes[T] { + return Changes[T]{additions: additions, removals: removals} +} + +func (c Changes[T]) Additions() map[string]T { + return c.additions +} + +func (c Changes[T]) Removals() map[string]T { + return c.removals +} + +// Maps generates Changes for two maps with the same type signature by checking for any removals and then checking for +// additions. +// TODO: This doesn't need to create maps, it can return slices only. This function doesn't need to insert the values. +func Maps[T Hasher](current, new map[string]T) Changes[T] { + additions := map[string]T{} + removals := map[string]T{} + for key, newValue := range new { + if currentValue, found := current[key]; !found { + additions[key] = newValue + } else if currentValue.Hash() != newValue.Hash() { + additions[key] = newValue + removals[key] = currentValue + } + } + for key, value := range current { + if _, found := new[key]; !found { + removals[key] = value + } + } + return Changes[T]{ + additions: additions, + removals: removals, + } +} diff --git a/otelcollector/otel-allocator/diff/diff_test.go b/otelcollector/otel-allocator/diff/diff_test.go new file mode 100644 index 000000000..7b8cda5b3 --- /dev/null +++ b/otelcollector/otel-allocator/diff/diff_test.go @@ -0,0 +1,108 @@ +// Copyright The OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package diff + +import ( + "reflect" + "testing" +) + +type HasherString string + +func (s HasherString) Hash() string { + return string(s) +} + +func TestDiffMaps(t *testing.T) { + type args struct { + current map[string]Hasher + new map[string]Hasher + } + tests := []struct { + name string + args args + want Changes[Hasher] + }{ + { + name: "basic replacement", + args: args{ + current: map[string]Hasher{ + "current": HasherString("one"), + }, + new: map[string]Hasher{ + "new": HasherString("another"), + }, + }, + want: Changes[Hasher]{ + additions: map[string]Hasher{ + "new": HasherString("another"), + }, + removals: map[string]Hasher{ + "current": HasherString("one"), + }, + }, + }, + { + name: "single addition", + args: args{ + current: map[string]Hasher{ + "current": HasherString("one"), + }, + new: map[string]Hasher{ + "current": HasherString("one"), + "new": HasherString("another"), + }, + }, + want: Changes[Hasher]{ + additions: map[string]Hasher{ + "new": HasherString("another"), + }, + removals: map[string]Hasher{}, + }, + }, + { + name: "value change", + args: args{ + current: map[string]Hasher{ + "k1": HasherString("v1"), + "k2": HasherString("v2"), + "change": HasherString("before"), + }, + new: map[string]Hasher{ + "k1": HasherString("v1"), + "k3": HasherString("v3"), + "change": HasherString("after"), + }, + }, + want: Changes[Hasher]{ + additions: map[string]Hasher{ + "k3": HasherString("v3"), + "change": HasherString("after"), + }, + removals: map[string]Hasher{ + "k2": HasherString("v2"), + "change": HasherString("before"), + }, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := Maps(tt.args.current, tt.args.new); !reflect.DeepEqual(got, tt.want) { + t.Errorf("DiffMaps() = %v, want %v", got, tt.want) + } + }) + } +} diff --git a/otelcollector/otel-allocator/go.mod b/otelcollector/otel-allocator/go.mod new file mode 100644 index 000000000..970f09fb2 --- /dev/null +++ b/otelcollector/otel-allocator/go.mod @@ -0,0 +1,205 @@ +module github.com/open-telemetry/opentelemetry-operator/cmd/otel-allocator + +go 1.20 + +replace github.com/prometheus-operator/prometheus-operator => ./prometheus-operator + +replace github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring => ./prometheus-operator/pkg/apis/monitoring + +replace github.com/prometheus-operator/prometheus-operator/pkg/client => ./prometheus-operator/pkg/client + +require ( + github.com/buraksezer/consistent v0.10.0 + github.com/cespare/xxhash/v2 v2.2.0 + github.com/fsnotify/fsnotify v1.6.0 + github.com/ghodss/yaml v1.0.0 + github.com/gin-gonic/gin v1.9.1 + github.com/go-kit/log v0.2.1 + github.com/go-logr/logr v1.2.4 + github.com/json-iterator/go v1.1.12 + github.com/cnf/structhash v0.0.0-20201127153200-e1b16c1ebc08 + github.com/oklog/run v1.1.0 + github.com/prometheus-operator/prometheus-operator v0.66.0 + github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.66.0 + github.com/prometheus-operator/prometheus-operator/pkg/client v0.66.0 + github.com/prometheus/client_golang v1.16.0 + github.com/prometheus/common v0.44.0 + github.com/prometheus/prometheus v0.44.0 + github.com/spf13/pflag v1.0.5 + github.com/stretchr/testify v1.8.4 + gopkg.in/yaml.v2 v2.4.0 + k8s.io/api v0.27.3 + k8s.io/apimachinery v0.27.3 + k8s.io/client-go v0.27.3 + k8s.io/klog/v2 v2.100.1 + sigs.k8s.io/controller-runtime v0.15.0 +) + +require ( + cloud.google.com/go/compute v1.18.0 // indirect + cloud.google.com/go/compute/metadata v0.2.3 // indirect + github.com/Azure/azure-sdk-for-go v65.0.0+incompatible // indirect + github.com/Azure/go-autorest v14.2.0+incompatible // indirect + github.com/Azure/go-autorest/autorest v0.11.28 // indirect + github.com/Azure/go-autorest/autorest/adal v0.9.23 // indirect + github.com/Azure/go-autorest/autorest/date v0.3.0 // indirect + github.com/Azure/go-autorest/autorest/to v0.4.0 // indirect + github.com/Azure/go-autorest/autorest/validation v0.3.1 // indirect + github.com/Azure/go-autorest/logger v0.2.1 // indirect + github.com/Azure/go-autorest/tracing v0.6.0 // indirect + github.com/Microsoft/go-winio v0.6.0 // indirect + github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 // indirect + github.com/armon/go-metrics v0.4.1 // indirect + github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect + github.com/aws/aws-sdk-go v1.44.245 // indirect + github.com/beorn7/perks v1.0.1 // indirect + github.com/blang/semver/v4 v4.0.0 // indirect + github.com/bytedance/sonic v1.9.1 // indirect + github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect + github.com/cncf/xds/go v0.0.0-20230112175826-46e39c7b9b43 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/dennwc/varint v1.0.0 // indirect + github.com/digitalocean/godo v1.98.0 // indirect + github.com/docker/distribution v2.8.2+incompatible // indirect + github.com/docker/docker v23.0.4+incompatible // indirect + github.com/docker/go-connections v0.4.0 // indirect + github.com/docker/go-units v0.5.0 // indirect + github.com/edsrzf/mmap-go v1.1.0 // indirect + github.com/efficientgo/tools/core v0.0.0-20220817170617-6c25e3b627dd // indirect + github.com/emicklei/go-restful/v3 v3.10.2 // indirect + github.com/envoyproxy/go-control-plane v0.11.0 // indirect + github.com/envoyproxy/protoc-gen-validate v0.10.1 // indirect + github.com/evanphx/json-patch v5.6.0+incompatible // indirect + github.com/evanphx/json-patch/v5 v5.6.0 // indirect + github.com/fatih/color v1.14.1 // indirect + github.com/gabriel-vasile/mimetype v1.4.2 // indirect + github.com/gin-contrib/sse v0.1.0 // indirect + github.com/go-logfmt/logfmt v0.6.0 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/go-logr/zapr v1.2.4 // indirect + github.com/go-openapi/analysis v0.21.4 // indirect + github.com/go-openapi/errors v0.20.3 // indirect + github.com/go-openapi/jsonpointer v0.19.6 // indirect + github.com/go-openapi/jsonreference v0.20.2 // indirect + github.com/go-openapi/loads v0.21.2 // indirect + github.com/go-openapi/runtime v0.25.0 // indirect + github.com/go-openapi/spec v0.20.8 // indirect + github.com/go-openapi/strfmt v0.21.7 // indirect + github.com/go-openapi/swag v0.22.4 // indirect + github.com/go-openapi/validate v0.22.1 // indirect + github.com/go-playground/locales v0.14.1 // indirect + github.com/go-playground/universal-translator v0.18.1 // indirect + github.com/go-playground/validator/v10 v10.14.0 // indirect + github.com/go-resty/resty/v2 v2.7.0 // indirect + github.com/go-zookeeper/zk v1.0.3 // indirect + github.com/goccy/go-json v0.10.2 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang-jwt/jwt/v4 v4.5.0 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/protobuf v1.5.3 // indirect + github.com/golang/snappy v0.0.4 // indirect + github.com/google/gnostic v0.6.9 // indirect + github.com/google/go-cmp v0.5.9 // indirect + github.com/google/go-querystring v1.1.0 // indirect + github.com/google/gofuzz v1.2.0 // indirect + github.com/google/uuid v1.3.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect + github.com/googleapis/gax-go/v2 v2.7.1 // indirect + github.com/gophercloud/gophercloud v1.3.0 // indirect + github.com/gorilla/websocket v1.5.0 // indirect + github.com/grafana/regexp v0.0.0-20221122212121-6b5c0a4cb7fd // indirect + github.com/hashicorp/consul/api v1.20.0 // indirect + github.com/hashicorp/cronexpr v1.1.1 // indirect + github.com/hashicorp/errwrap v1.1.0 // indirect + github.com/hashicorp/go-cleanhttp v0.5.2 // indirect + github.com/hashicorp/go-hclog v1.4.0 // indirect + github.com/hashicorp/go-immutable-radix v1.3.1 // indirect + github.com/hashicorp/go-multierror v1.1.1 // indirect + github.com/hashicorp/go-retryablehttp v0.7.2 // indirect + github.com/hashicorp/go-rootcerts v1.0.2 // indirect + github.com/hashicorp/golang-lru v0.6.0 // indirect + github.com/hashicorp/nomad/api v0.0.0-20230418003350-3067191c5197 // indirect + github.com/hashicorp/serf v0.10.1 // indirect + github.com/hetznercloud/hcloud-go v1.42.0 // indirect + github.com/imdario/mergo v0.3.13 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/ionos-cloud/sdk-go/v6 v6.1.6 // indirect + github.com/jmespath/go-jmespath v0.4.0 // indirect + github.com/josharian/intern v1.0.0 // indirect + github.com/jpillora/backoff v1.0.0 // indirect + github.com/klauspost/cpuid/v2 v2.2.4 // indirect + github.com/kolo/xmlrpc v0.0.0-20220921171641-a4b6fa1dd06b // indirect + github.com/leodido/go-urn v1.2.4 // indirect + github.com/linode/linodego v1.16.1 // 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.19 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect + github.com/metalmatze/signal v0.0.0-20210307161603-1c9aa721a97a // indirect + github.com/miekg/dns v1.1.53 // indirect + github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/mitchellh/mapstructure v1.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/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f // indirect + github.com/oklog/ulid v1.3.1 // indirect + github.com/opencontainers/go-digest v1.0.0 // indirect + github.com/opencontainers/image-spec v1.0.2 // indirect + github.com/opentracing/opentracing-go v1.2.0 // indirect + github.com/ovh/go-ovh v1.4.1 // indirect + github.com/pelletier/go-toml/v2 v2.0.8 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect + github.com/prometheus-community/prom-label-proxy v0.6.0 // indirect + github.com/prometheus/alertmanager v0.25.0 // indirect + github.com/prometheus/client_model v0.4.0 // indirect + github.com/prometheus/common/sigv4 v0.1.0 // indirect + github.com/prometheus/procfs v0.10.1 // indirect + github.com/scaleway/scaleway-sdk-go v1.0.0-beta.15 // indirect + github.com/spf13/cobra v1.7.0 // indirect + github.com/tidwall/pretty v1.2.0 // indirect + github.com/twitchyliquid64/golang-asm v0.15.1 // indirect + github.com/ugorji/go/codec v1.2.11 // indirect + github.com/vultr/govultr/v2 v2.17.2 // indirect + go.mongodb.org/mongo-driver v1.11.4 // indirect + go.opencensus.io v0.24.0 // indirect + go.opentelemetry.io/otel v1.14.0 // indirect + go.opentelemetry.io/otel/trace v1.14.0 // indirect + go.uber.org/atomic v1.10.0 // indirect + go.uber.org/goleak v1.2.1 // indirect + go.uber.org/multierr v1.9.0 // indirect + go.uber.org/zap v1.24.0 // indirect + golang.org/x/arch v0.3.0 // indirect + golang.org/x/crypto v0.10.0 // indirect + golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 // indirect + golang.org/x/mod v0.10.0 // indirect + golang.org/x/net v0.11.0 // indirect + golang.org/x/oauth2 v0.8.0 // indirect + golang.org/x/sync v0.2.0 // indirect + golang.org/x/sys v0.9.0 // indirect + golang.org/x/term v0.9.0 // indirect + golang.org/x/text v0.10.0 // indirect + golang.org/x/time v0.3.0 // indirect + golang.org/x/tools v0.9.1 // indirect + gomodules.xyz/jsonpatch/v2 v2.3.0 // indirect + google.golang.org/api v0.114.0 // indirect + google.golang.org/appengine v1.6.7 // indirect + google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 // indirect + google.golang.org/grpc v1.53.0 // indirect + google.golang.org/protobuf v1.30.0 // indirect + gopkg.in/inf.v0 v0.9.1 // indirect + gopkg.in/ini.v1 v1.67.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + k8s.io/apiextensions-apiserver v0.27.3 // indirect + k8s.io/component-base v0.27.3 // indirect + k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f // indirect + k8s.io/utils v0.0.0-20230505201702-9f6742963106 // indirect + sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect + sigs.k8s.io/yaml v1.3.0 // indirect +) + +// A exclude directive is needed for k8s.io/client-go because Cortex (which +// is an indirect dependency through Thanos and PrometheusOperator) has a requirement on v12.0.0. +exclude k8s.io/client-go v12.0.0+incompatible diff --git a/otelcollector/otel-allocator/go.sum b/otelcollector/otel-allocator/go.sum new file mode 100644 index 000000000..b00943297 --- /dev/null +++ b/otelcollector/otel-allocator/go.sum @@ -0,0 +1,1127 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go v0.110.0 h1:Zc8gqp3+a9/Eyph2KDmcGaPtbKRIoqq4YTlL4NMD0Ys= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/compute v1.18.0 h1:FEigFqoDbys2cvFkZ9Fjq4gnHBP55anJ0yQyau2f9oY= +cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= +cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= +cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/longrunning v0.4.1 h1:v+yFJOfKC3yZdY6ZUI933pIYdhyhV8S3NpWrXWmg7jM= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/Azure/azure-sdk-for-go v65.0.0+incompatible h1:HzKLt3kIwMm4KeJYTdx9EbjRYTySD/t8i1Ee/W5EGXw= +github.com/Azure/azure-sdk-for-go v65.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= +github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= +github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= +github.com/Azure/go-autorest/autorest v0.11.28 h1:ndAExarwr5Y+GaHE6VCaY1kyS/HwwGGyuimVhWsHOEM= +github.com/Azure/go-autorest/autorest v0.11.28/go.mod h1:MrkzG3Y3AH668QyF9KRk5neJnGgmhQ6krbhR8Q5eMvA= +github.com/Azure/go-autorest/autorest/adal v0.9.18/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= +github.com/Azure/go-autorest/autorest/adal v0.9.23 h1:Yepx8CvFxwNKpH6ja7RZ+sKX+DWYNldbLiALMC3BTz8= +github.com/Azure/go-autorest/autorest/adal v0.9.23/go.mod h1:5pcMqFkdPhviJdlEy3kC/v1ZLnQl0MH6XA5YCcMhy4c= +github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8KY+LPI6wiWrP/myHw= +github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= +github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= +github.com/Azure/go-autorest/autorest/mocks v0.4.2 h1:PGN4EDXnuQbojHbU0UWoNvmu9AGVwYHG9/fkDYhtAfw= +github.com/Azure/go-autorest/autorest/mocks v0.4.2/go.mod h1:Vy7OitM9Kei0i1Oj+LvyAWMXJHeKH1MVlzFugfVrmyU= +github.com/Azure/go-autorest/autorest/to v0.4.0 h1:oXVqrxakqqV1UZdSazDOPOLvOIz+XA683u8EctwboHk= +github.com/Azure/go-autorest/autorest/to v0.4.0/go.mod h1:fE8iZBn7LQR7zH/9XU2NcPR4o9jEImooCeWJcYV/zLE= +github.com/Azure/go-autorest/autorest/validation v0.3.1 h1:AgyqjAd94fwNAoTjl/WQXg4VvFeRFpO+UhNyRXqF1ac= +github.com/Azure/go-autorest/autorest/validation v0.3.1/go.mod h1:yhLgjC0Wda5DYXl6JAsWyUe4KVNffhoDhG0zVzUMo3E= +github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+ZtXWSmf4Tg= +github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= +github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo= +github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/DATA-DOG/go-sqlmock v1.4.1/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= +github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= +github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= +github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 h1:s6gZFSlWYmbqAuRjVTiNNhvNRfY2Wxp9nhfyel4rklc= +github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA= +github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= +github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so= +github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= +github.com/aws/aws-sdk-go v1.38.35/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= +github.com/aws/aws-sdk-go v1.44.245 h1:KtY2s4q31/kn33AdV63R5t77mdxsI7rq3YT7Mgo805M= +github.com/aws/aws-sdk-go v1.44.245/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= +github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +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/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +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/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= +github.com/buraksezer/consistent v0.10.0 h1:hqBgz1PvNLC5rkWcEBVAL9dFMBWz6I0VgUCW25rrZlU= +github.com/buraksezer/consistent v0.10.0/go.mod h1:6BrVajWq7wbKZlTOUPs/XVfR8c0maujuPowduSpZqmw= +github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= +github.com/bytedance/sonic v1.9.1 h1:6iJ6NqdoxCDr6mbY8h18oSO+cShGSMRGCEo7F2h0x8s= +github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= +github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams= +github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= +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/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= +github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230112175826-46e39c7b9b43 h1:XP+uhjN0yBCN/tPkr8Z0BNDc5rZam9RG6UWyf2FrSQ0= +github.com/cncf/xds/go v0.0.0-20230112175826-46e39c7b9b43/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dennwc/varint v1.0.0 h1:kGNFFSSw8ToIy3obO/kKr8U9GZYUAxQEVuix4zfDWzE= +github.com/dennwc/varint v1.0.0/go.mod h1:hnItb35rvZvJrbTALZtY/iQfDs48JKRG1RPpgziApxA= +github.com/digitalocean/godo v1.98.0 h1:potyC1eD0N9n5/P4/WmJuKgg+OGYZOBWEW+/aKTX6QQ= +github.com/digitalocean/godo v1.98.0/go.mod h1:NRpFznZFvhHjBoqZAaOD3khVzsJ3EibzKqFL4R60dmA= +github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= +github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= +github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v23.0.4+incompatible h1:Kd3Bh9V/rO+XpTP/BLqM+gx8z7+Yb0AA2Ibj+nNo4ek= +github.com/docker/docker v23.0.4+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= +github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= +github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= +github.com/edsrzf/mmap-go v1.1.0 h1:6EUwBLQ/Mcr1EYLE4Tn1VdW1A4ckqCQWZBw8Hr0kjpQ= +github.com/edsrzf/mmap-go v1.1.0/go.mod h1:19H/e8pUPLicwkyNgOykDXkJ9F0MHE+Z52B8EIth78Q= +github.com/efficientgo/tools/core v0.0.0-20220817170617-6c25e3b627dd h1:svR6KxSP1xiPw10RN4Pd7g6BAVkEcNN628PAqZH31mM= +github.com/efficientgo/tools/core v0.0.0-20220817170617-6c25e3b627dd/go.mod h1:OmVcnJopJL8d3X3sSXTiypGoUSgFq1aDGmlrdi9dn/M= +github.com/emicklei/go-restful/v3 v3.10.2 h1:hIovbnmBTLjHXkqEBUz3HGpXZdM7ZrE9fJIZIqlJLqE= +github.com/emicklei/go-restful/v3 v3.10.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/go-control-plane v0.11.0 h1:jtLewhRR2vMRNnq2ZZUoCjUlgut+Y0+sDDWPOfwOi1o= +github.com/envoyproxy/go-control-plane v0.11.0/go.mod h1:VnHyVMpzcLvCFt9yUz1UnCwHLhwx1WguiVDV7pTG/tI= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v0.10.1 h1:c0g45+xCJhdgFGw7a5QAfdS4byAbud7miNWJ1WwEVf8= +github.com/envoyproxy/protoc-gen-validate v0.10.1/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss= +github.com/evanphx/json-patch v5.6.0+incompatible h1:jBYDEEiFBPxA0v50tFdvOzQQTCvpL6mnFh5mB2/l16U= +github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= +github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= +github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/fatih/color v1.14.1 h1:qfhVLaG5s+nCROl1zJsZRxFeYrHLqWroPOQ8BWiNb4w= +github.com/fatih/color v1.14.1/go.mod h1:2oHN61fhTpgcxD3TSWCgKDiH1+x4OiDVVGH8WlgGZGg= +github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= +github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= +github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU= +github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA= +github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= +github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= +github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg= +github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= +github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= +github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= +github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= +github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-logr/zapr v1.2.4 h1:QHVo+6stLbfJmYGkQ7uGHUCu5hnAFAj6mDe6Ea0SeOo= +github.com/go-logr/zapr v1.2.4/go.mod h1:FyHWQIzQORZ0QVE1BtVHv3cKtNLuXsbNLtpuhNapBOA= +github.com/go-openapi/analysis v0.21.2/go.mod h1:HZwRk4RRisyG8vx2Oe6aqeSQcoxRp47Xkp3+K6q+LdY= +github.com/go-openapi/analysis v0.21.4 h1:ZDFLvSNxpDaomuCueM0BlSXxpANBlFYiBvr+GXrvIHc= +github.com/go-openapi/analysis v0.21.4/go.mod h1:4zQ35W4neeZTqh3ol0rv/O8JBbka9QyAgQRPp9y3pfo= +github.com/go-openapi/errors v0.19.8/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= +github.com/go-openapi/errors v0.19.9/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= +github.com/go-openapi/errors v0.20.2/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= +github.com/go-openapi/errors v0.20.3 h1:rz6kiC84sqNQoqrtulzaL/VERgkoCyB6WdEkc2ujzUc= +github.com/go-openapi/errors v0.20.3/go.mod h1:Z3FlZ4I8jEGxjUK+bugx3on2mIAk4txuAOhlsB1FSgk= +github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= +github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= +github.com/go-openapi/jsonreference v0.19.6/go.mod h1:diGHMEHg2IqXZGKxqyvWdfWU/aim5Dprw5bqpKkTvns= +github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXymS4zJbYVCZmcgkasdo= +github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= +github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= +github.com/go-openapi/loads v0.21.1/go.mod h1:/DtAMXXneXFjbQMGEtbamCZb+4x7eGwkvZCvBmwUG+g= +github.com/go-openapi/loads v0.21.2 h1:r2a/xFIYeZ4Qd2TnGpWDIQNcP80dIaZgf704za8enro= +github.com/go-openapi/loads v0.21.2/go.mod h1:Jq58Os6SSGz0rzh62ptiu8Z31I+OTHqmULx5e/gJbNw= +github.com/go-openapi/runtime v0.25.0 h1:7yQTCdRbWhX8vnIjdzU8S00tBYf7Sg71EBeorlPHvhc= +github.com/go-openapi/runtime v0.25.0/go.mod h1:Ux6fikcHXyyob6LNWxtE96hWwjBPYF0DXgVFuMTneOs= +github.com/go-openapi/spec v0.20.4/go.mod h1:faYFR1CvsJZ0mNsmsphTMSoRrNV3TEDoAM7FOEWeq8I= +github.com/go-openapi/spec v0.20.6/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6VaaBKcWA= +github.com/go-openapi/spec v0.20.8 h1:ubHmXNY3FCIOinT8RNrrPfGc9t7I1qhPtdOGoG2AxRU= +github.com/go-openapi/spec v0.20.8/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6VaaBKcWA= +github.com/go-openapi/strfmt v0.21.0/go.mod h1:ZRQ409bWMj+SOgXofQAGTIo2Ebu72Gs+WaRADcS5iNg= +github.com/go-openapi/strfmt v0.21.1/go.mod h1:I/XVKeLc5+MM5oPNN7P6urMOpuLXEcNrCX/rPGuWb0k= +github.com/go-openapi/strfmt v0.21.3/go.mod h1:k+RzNO0Da+k3FrrynSNN8F7n/peCmQQqbbXjtDfvmGg= +github.com/go-openapi/strfmt v0.21.7 h1:rspiXgNWgeUzhjo1YU01do6qsahtJNByjLVbPLNHb8k= +github.com/go-openapi/strfmt v0.21.7/go.mod h1:adeGTkxE44sPyLk0JV235VQAO/ZXUr8KAzYjclFs3ew= +github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= +github.com/go-openapi/swag v0.21.1/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= +github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-openapi/swag v0.22.4 h1:QLMzNJnMGPRNDCbySlcj1x01tzU8/9LTTL9hZZZogBU= +github.com/go-openapi/swag v0.22.4/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-openapi/validate v0.22.1 h1:G+c2ub6q47kfX1sOBLwIQwzBVt8qmOAARyo/9Fqs9NU= +github.com/go-openapi/validate v0.22.1/go.mod h1:rjnrwK57VJ7A8xqfpAOEKRH8yQSGUriMu5/zuPSQ1hg= +github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= +github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= +github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= +github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= +github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= +github.com/go-playground/validator/v10 v10.14.0 h1:vgvQWe3XCz3gIeFDm/HnTIbj6UGmg/+t63MyGU2n5js= +github.com/go-playground/validator/v10 v10.14.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU= +github.com/go-resty/resty/v2 v2.7.0 h1:me+K9p3uhSmXtrBZ4k9jcEAfJmuC8IivWHwaLZwPrFY= +github.com/go-resty/resty/v2 v2.7.0/go.mod h1:9PWDzw47qPphMRFfhsyk0NnSgvluHcljSMVIq3w7q0I= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= +github.com/go-zookeeper/zk v1.0.3 h1:7M2kwOsc//9VeeFiPtf+uSJlVpU66x9Ba5+8XK7/TDg= +github.com/go-zookeeper/zk v1.0.3/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw= +github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0= +github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY= +github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg= +github.com/gobuffalo/envy v1.6.15/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= +github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= +github.com/gobuffalo/flect v0.1.0/go.mod h1:d2ehjJqGOH/Kjqcoz+F7jHTBbmDb38yXA598Hb50EGs= +github.com/gobuffalo/flect v0.1.1/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= +github.com/gobuffalo/flect v0.1.3/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= +github.com/gobuffalo/genny v0.0.0-20190329151137-27723ad26ef9/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk= +github.com/gobuffalo/genny v0.0.0-20190403191548-3ca520ef0d9e/go.mod h1:80lIj3kVJWwOrXWWMRzzdhW3DsrdjILVil/SFKBzF28= +github.com/gobuffalo/genny v0.1.0/go.mod h1:XidbUqzak3lHdS//TPu2OgiFB+51Ur5f7CSnXZ/JDvo= +github.com/gobuffalo/genny v0.1.1/go.mod h1:5TExbEyY48pfunL4QSXxlDOmdsD44RRq4mVZ0Ex28Xk= +github.com/gobuffalo/gitgen v0.0.0-20190315122116-cc086187d211/go.mod h1:vEHJk/E9DmhejeLeNt7UVvlSGv3ziL+djtTr3yyzcOw= +github.com/gobuffalo/gogen v0.0.0-20190315121717-8f38393713f5/go.mod h1:V9QVDIxsgKNZs6L2IYiGR8datgMhB577vzTDqypH360= +github.com/gobuffalo/gogen v0.1.0/go.mod h1:8NTelM5qd8RZ15VjQTFkAW6qOMx5wBbW4dSCS3BY8gg= +github.com/gobuffalo/gogen v0.1.1/go.mod h1:y8iBtmHmGc4qa3urIyo1shvOD8JftTtfcKi+71xfDNE= +github.com/gobuffalo/logger v0.0.0-20190315122211-86e12af44bc2/go.mod h1:QdxcLw541hSGtBnhUc4gaNIXRjiDppFGaDqzbrBd3v8= +github.com/gobuffalo/mapi v1.0.1/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= +github.com/gobuffalo/mapi v1.0.2/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= +github.com/gobuffalo/packd v0.0.0-20190315124812-a385830c7fc0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= +github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= +github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ= +github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0= +github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= +github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= +github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= +github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +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/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +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.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= +github.com/google/gnostic v0.6.9 h1:ZK/5VhkoX835RikCHpSUJV9a+S3e1zLh59YnyWeBW+0= +github.com/google/gnostic v0.6.9/go.mod h1:Nm8234We1lq6iB9OmlgNv3nH91XLLVZHCDayfA3xq+E= +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.4.1/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.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= +github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= +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/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20230406165453-00490a63f317 h1:hFhpt7CTmR3DX+b4R19ydQFtofxT0Sv3QsKNMVQYTMQ= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k= +github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/gax-go/v2 v2.7.1 h1:gF4c0zjUP2H/s/hEGyLA3I0fA2ZWjzYiONAD6cvPr8A= +github.com/googleapis/gax-go/v2 v2.7.1/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= +github.com/gophercloud/gophercloud v1.3.0 h1:RUKyCMiZoQR3VlVR5E3K7PK1AC3/qppsWYo6dtBiqs8= +github.com/gophercloud/gophercloud v1.3.0/go.mod h1:aAVqcocTSXh2vYFZ1JTvx4EQmfgzxRcNupUfxZbBNDM= +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/grafana/regexp v0.0.0-20221122212121-6b5c0a4cb7fd h1:PpuIBO5P3e9hpqBD0O/HjhShYuM6XE0i/lbE6J94kww= +github.com/grafana/regexp v0.0.0-20221122212121-6b5c0a4cb7fd/go.mod h1:M5qHK+eWfAv8VR/265dIuEpL3fNfeC21tXXp9itM24A= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/hashicorp/consul/api v1.20.0 h1:9IHTjNVSZ7MIwjlW3N3a7iGiykCMDpxZu8jsxFJh0yc= +github.com/hashicorp/consul/api v1.20.0/go.mod h1:nR64eD44KQ59Of/ECwt2vUmIK2DKsDzAwTmwmLl8Wpo= +github.com/hashicorp/consul/sdk v0.13.1 h1:EygWVWWMczTzXGpO93awkHFzfUka6hLYJ0qhETd+6lY= +github.com/hashicorp/cronexpr v1.1.1 h1:NJZDd87hGXjoZBdvyCF9mX4DCq5Wy7+A/w+A7q0wn6c= +github.com/hashicorp/cronexpr v1.1.1/go.mod h1:P4wA0KBl9C5q2hABiMO7cp6jcIg96CDh1Efb3g1PWA4= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= +github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= +github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= +github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= +github.com/hashicorp/go-hclog v1.4.0 h1:ctuWFGrhFha8BnnzxqeRGidlEcQkDyL5u8J8t5eA11I= +github.com/hashicorp/go-hclog v1.4.0/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= +github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= +github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-msgpack v0.5.3 h1:zKjpN5BK/P5lMYrLmBHdBULWbJ0XpYR+7NGzqkZzoD4= +github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= +github.com/hashicorp/go-retryablehttp v0.7.2 h1:AcYqCvkpalPnPF2pn0KamgwamS42TqUDDYFRKq/RAd0= +github.com/hashicorp/go-retryablehttp v0.7.2/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8= +github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= +github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= +github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc= +github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= +github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= +github.com/hashicorp/go-version v1.2.1 h1:zEfKbn2+PDgroKdiOzqiE8rsmLqU2uwi5PB5pBJ3TkI= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.6.0 h1:uL2shRDx7RTrOrTCUZEGP/wJUFiUI8QT6E7z5o8jga4= +github.com/hashicorp/golang-lru v0.6.0/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= +github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= +github.com/hashicorp/memberlist v0.5.0 h1:EtYPN8DpAURiapus508I4n9CzHs2W+8NZGbmmR/prTM= +github.com/hashicorp/memberlist v0.5.0/go.mod h1:yvyXLpo0QaGE59Y7hDTsTzDD25JYBZ4mHgHUZ8lrOI0= +github.com/hashicorp/nomad/api v0.0.0-20230418003350-3067191c5197 h1:I5xhKLePXpXgM6pZ4xZNTiurLLS3sGuZrZFFzAbM67A= +github.com/hashicorp/nomad/api v0.0.0-20230418003350-3067191c5197/go.mod h1:2TCrNvonL09r7EiQ6M2rNt+Cmjbn1QbzchFoTWJFpj4= +github.com/hashicorp/serf v0.10.1 h1:Z1H2J60yRKvfDYAOZLd2MU0ND4AH/WDz7xYHDWQsIPY= +github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4= +github.com/hetznercloud/hcloud-go v1.42.0 h1:Es/CDOForQN3nOOP5Vxh1N/YHjpCg386iYEX5zCgi+A= +github.com/hetznercloud/hcloud-go v1.42.0/go.mod h1:YADL8AbmQYH0Eo+1lkuyoc8LutT0UeMvaKP47nNUb+Y= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= +github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/ionos-cloud/sdk-go/v6 v6.1.6 h1:0n4irdqNska+1s3YMCRhrAqKbibEgQ7SwwhAlHzYT5A= +github.com/ionos-cloud/sdk-go/v6 v6.1.6/go.mod h1:EzEgRIDxBELvfoa/uBN0kOQaqovLjUWEB7iW4/Q+t4k= +github.com/jarcoal/httpmock v1.3.0 h1:2RJ8GP0IIaWwcC9Fp2BmVi8Kog3v2Hn7VXM3fTd+nuc= +github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +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/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= +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/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= +github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +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/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4= +github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= +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.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= +github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= +github.com/kolo/xmlrpc v0.0.0-20220921171641-a4b6fa1dd06b h1:udzkj9S/zlT5X367kqJis0QP7YMxobob6zhzq6Yre00= +github.com/kolo/xmlrpc v0.0.0-20220921171641-a4b6fa1dd06b/go.mod h1:pcaDhQK0/NJZEvtCO0qQPPropqV0sJOJ6YW7X+9kRwM= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q= +github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4= +github.com/linode/linodego v1.16.1 h1:5otq57M4PdHycPERRfSFZ0s1yz1ETVWGjCp3hh7+F9w= +github.com/linode/linodego v1.16.1/go.mod h1:aESRAbpLY9R6IA1WGAWHikRI9DU9Lhesapv1MhKmPHM= +github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= +github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +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.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= +github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/maxatome/go-testdeep v1.12.0 h1:Ql7Go8Tg0C1D/uMMX59LAoYK7LffeJQ6X2T04nTH68g= +github.com/metalmatze/signal v0.0.0-20210307161603-1c9aa721a97a h1:0usWxe5SGXKQovz3p+BiQ81Jy845xSMu2CWKuXsXuUM= +github.com/metalmatze/signal v0.0.0-20210307161603-1c9aa721a97a/go.mod h1:3OETvrxfELvGsU2RoGGWercfeZ4bCL3+SOwzIWtJH/Q= +github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= +github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= +github.com/miekg/dns v1.1.53 h1:ZBkuHr5dxHtB1caEOlZTLPo7D3L3TWckgUUs/RHfDxw= +github.com/miekg/dns v1.1.53/go.mod h1:uInx36IzPl7FYnDcMeVWxj9byh7DutNykX4G9Sj60FY= +github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= +github.com/cnf/structhash v0.0.0-20201127153200-e1b16c1ebc08 h1:ox2F0PSMlrAAiAdknSRMDrAr8mfxPCfSZolH+/qQnyQ= +github.com/cnf/structhash v0.0.0-20201127153200-e1b16c1ebc08/go.mod h1:pCxVEbcm3AMg7ejXyorUXi6HQCzOIBf7zEDVPtw0/U4= +github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/moby/term v0.0.0-20221205130635-1aeaba878587 h1:HfkjXDfhgVaN5rmueG8cL8KKeFNecRCXFhaJ2qZ5SKA= +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 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +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/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= +github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= +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/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA= +github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU= +github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= +github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/onsi/ginkgo/v2 v2.9.5 h1:+6Hr4uxzP4XIUyAkg61dWBw8lb/gc4/X5luuxN/EC+Q= +github.com/onsi/gomega v1.27.7 h1:fVih9JD6ogIiHUN6ePK7HJidyEDpWGVB5mzM7cWNXoU= +github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= +github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= +github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM= +github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= +github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= +github.com/ovh/go-ovh v1.4.1 h1:VBGa5wMyQtTP7Zb+w97zRCh9sLtM/2YKRyy+MEJmWaM= +github.com/ovh/go-ovh v1.4.1/go.mod h1:6bL6pPyUT7tBfI0pqOegJgRjgjuO+mOo+MyXd1EEC0M= +github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= +github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= +github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ= +github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +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/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= +github.com/prometheus-community/prom-label-proxy v0.6.0 h1:vRY29tUex8qI2MEimovTzJdieEwiSko+f7GuPCLjFkI= +github.com/prometheus-community/prom-label-proxy v0.6.0/go.mod h1:XyAyskjjhqEx0qnbGUVeAkYSz3Wm9gStT7/wXFxD8n0= +github.com/prometheus-operator/prometheus-operator v0.66.0 h1:Jj4mbGAkfBbTih6ait03f2vUjEHB7Kb4gnlAmWu7AJ0= +github.com/prometheus-operator/prometheus-operator v0.66.0/go.mod h1:U7S3+u6YTxwCTMNIQxZWttEq70qBA4Qps7/c5mUZOpQ= +github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.66.0 h1:PPW01FLVjJHMNcbAL1DDD9EZceSQKMOU/VpK0irrxrI= +github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.66.0/go.mod h1:KZHvrby65G+rA4V/vMTUXDV22TI+GgLIrCigYClpjzk= +github.com/prometheus-operator/prometheus-operator/pkg/client v0.66.0 h1:gDJAO9dJbRZ3RAQ7MY+tjz1D3o1x7T4hd8Jbi0Xo854= +github.com/prometheus-operator/prometheus-operator/pkg/client v0.66.0/go.mod h1:gNFnGtaWQ8SziJCfahdiAUlArtoL1+cm1hAD7l6L14w= +github.com/prometheus/alertmanager v0.25.0 h1:vbXKUR6PYRiZPRIKfmXaG+dmCKG52RtPL4Btl8hQGvg= +github.com/prometheus/alertmanager v0.25.0/go.mod h1:MEZ3rFVHqKZsw7IcNS/m4AWZeXThmJhumpiWR4eHU/w= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= +github.com/prometheus/client_golang v1.5.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= +github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= +github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8= +github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY= +github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= +github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= +github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= +github.com/prometheus/common v0.29.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY= +github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY= +github.com/prometheus/common/sigv4 v0.1.0 h1:qoVebwtwwEhS85Czm2dSROY5fTo2PAPEVdDeppTwGX4= +github.com/prometheus/common/sigv4 v0.1.0/go.mod h1:2Jkxxk9yYvCkE5G1sQT7GuEXm57JrvHu9k5YwTjsNtI= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= +github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.10.1 h1:kYK1Va/YMlutzCGazswoHKo//tZVlFpKYh+PymziUAg= +github.com/prometheus/procfs v0.10.1/go.mod h1:nwNm2aOCAYw8uTR/9bWRREkZFxAUcWzPHWJq+XBB/FM= +github.com/prometheus/prometheus v0.44.0 h1:sgn8Fdx+uE5tHQn0/622swlk2XnIj6udoZCnbVjHIgc= +github.com/prometheus/prometheus v0.44.0/go.mod h1:aPsmIK3py5XammeTguyqTmuqzX/jeCdyOWWobLHNKQg= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/scaleway/scaleway-sdk-go v1.0.0-beta.15 h1:Y7xOFbD+3jaPw+VN7lkakNJ/pa+ZSQVFp1ONtJaBxns= +github.com/scaleway/scaleway-sdk-go v1.0.0-beta.15/go.mod h1:fCa7OJZ/9DRTnOKmxvT6pn+LPWUptQAmHF/SBJUGEcg= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/shoenig/test v0.6.3 h1:GVXWJFk9PiOjN0KoJ7VrJGH6uLPnqxR7/fe3HUPfE0c= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= +github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +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/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs= +github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= +github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= +github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= +github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= +github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= +github.com/vultr/govultr/v2 v2.17.2 h1:gej/rwr91Puc/tgh+j33p/BLR16UrIPnSr+AIwYWZQs= +github.com/vultr/govultr/v2 v2.17.2/go.mod h1:ZFOKGWmgjytfyjeyAdhQlSWwTjh2ig+X49cAp50dzXI= +github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= +github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= +github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= +github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM= +github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= +github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +go.mongodb.org/mongo-driver v1.7.3/go.mod h1:NqaYOwnXWr5Pm7AOpO5QFxKJ503nbMse/R79oO62zWg= +go.mongodb.org/mongo-driver v1.7.5/go.mod h1:VXEWRZ6URJIkUq2SCAyapmhH0ZLRBP+FT4xhp5Zvxng= +go.mongodb.org/mongo-driver v1.10.0/go.mod h1:wsihk0Kdgv8Kqu1Anit4sfK+22vSFbUrAVEYRhCXrA8= +go.mongodb.org/mongo-driver v1.11.4 h1:4ayjakA013OdpGyL2K3ZqylTac/rMjrJOMZ1EHizXas= +go.mongodb.org/mongo-driver v1.11.4/go.mod h1:PTSz5yu21bkT/wXpkS7WR5f0ddqw5quethTUn9WM+2g= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= +go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/otel v1.14.0 h1:/79Huy8wbf5DnIPhemGB+zEPVwnN6fuQybr/SRXa6hM= +go.opentelemetry.io/otel v1.14.0/go.mod h1:o4buv+dJzx8rohcUeRmWUZhqupFvzWis188WlggnNeU= +go.opentelemetry.io/otel/sdk v1.14.0 h1:PDCppFRDq8A1jL9v6KMI6dYesaq+DFcDZvjsoGvxGzY= +go.opentelemetry.io/otel/trace v1.14.0 h1:wp2Mmvj41tDsyAJXiWDWpfNsOiIyd38fy85pyKcFq/M= +go.opentelemetry.io/otel/trace v1.14.0/go.mod h1:8avnQLK+CG77yNLUae4ea2JDQ6iT+gozhnZjy/rw9G8= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= +go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= +go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= +go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A= +go.uber.org/goleak v1.2.1/go.mod h1:qlT2yGI9QafXHhZZLxlSuNsMw3FFLxBr+tBRlmO1xH4= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= +go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= +go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= +go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= +golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= +golang.org/x/arch v0.3.0 h1:02VY4/ZcO/gBOH6PUaoiptASxtXU10jazRCP865E97k= +golang.org/x/arch v0.3.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= +golang.org/x/crypto v0.10.0 h1:LKqV2xt9+kDzSTfOhx4FrkEBcMrAgHSYgzywV9zcGmM= +golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 h1:k/i9J1pBpvlfR+9QsetwPyERsqu1GIbi967PQMq3Ivc= +golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +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-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +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/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= +golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +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-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/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-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/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-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= +golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM= +golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211029224645-99673261e6eb/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.11.0 h1:Gi2tvZIJyBtO9SDr1q9h5hEQCp/4L2RQ+ar0qjx2oNU= +golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.8.0 h1:6dkIjl3j3LtZ/O3sTgZTMsLKSftL/B8Zgq4huOIIUu8= +golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= +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-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190412183630-56d357773e84/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-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/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.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI= +golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/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-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.9.0 h1:KS/R3tvhPqvJvwcKfnBHJwwthS11LRhmM5D59eEXa0s= +golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.9.0 h1:GRRCnKYhdQrD8kfRAdQ6Zcw1P0OcELxGLKJvtjVMZ28= +golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.10.0 h1:UpjohKhiEgNc0CSauXmwYftY1+LlaC75SJwh0SgCX58= +golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= +golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +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-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.9.1 h1:8WMNJAz3zrtPmnYC7ISf5dEn3MT0gY7jBJfw27yrrLo= +golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= +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.3.0 h1:8NFhfS6gzxNqjLIYnZxg319wZ5Qjnx4m/CcX+Klzazc= +gomodules.xyz/jsonpatch/v2 v2.3.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/api v0.114.0 h1:1xQPji6cO2E2vLiI+C/XiFAnsn1WV3mjaEwGLhi3grE= +google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg= +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/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 h1:DdoeryqhaXp1LtT/emMP1BRJPHHKFi5akj/nbx/zNTA= +google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.53.0 h1:LAv2ds7cmFV/XTS3XG1NneeENYrXGmorPxsBbptIjNc= +google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= +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.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.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/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/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= +gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/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.0-20200605160147-a5ece683394c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0/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= +gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +k8s.io/api v0.27.3 h1:yR6oQXXnUEBWEWcvPWS0jQL575KoAboQPfJAuKNrw5Y= +k8s.io/api v0.27.3/go.mod h1:C4BNvZnQOF7JA/0Xed2S+aUyJSfTGkGFxLXz9MnpIpg= +k8s.io/apiextensions-apiserver v0.27.3 h1:xAwC1iYabi+TDfpRhxh4Eapl14Hs2OftM2DN5MpgKX4= +k8s.io/apiextensions-apiserver v0.27.3/go.mod h1:BH3wJ5NsB9XE1w+R6SSVpKmYNyIiyIz9xAmBl8Mb+84= +k8s.io/apimachinery v0.27.3 h1:Ubye8oBufD04l9QnNtW05idcOe9Z3GQN8+7PqmuVcUM= +k8s.io/apimachinery v0.27.3/go.mod h1:XNfZ6xklnMCOGGFNqXG7bUrQCoR04dh/E7FprV6pb+E= +k8s.io/client-go v0.27.3 h1:7dnEGHZEJld3lYwxvLl7WoehK6lAq7GvgjxpA3nv1E8= +k8s.io/client-go v0.27.3/go.mod h1:2MBEKuTo6V1lbKy3z1euEGnhPfGZLKTS9tiJ2xodM48= +k8s.io/component-base v0.27.3 h1:g078YmdcdTfrCE4fFobt7qmVXwS8J/3cI1XxRi/2+6k= +k8s.io/component-base v0.27.3/go.mod h1:JNiKYcGImpQ44iwSYs6dysxzR9SxIIgQalk4HaCNVUY= +k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg= +k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f h1:2kWPakN3i/k81b0gvD5C5FJ2kxm1WrQFanWchyKuqGg= +k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f/go.mod h1:byini6yhqGC14c3ebc/QwanvYwhuMWF6yz2F8uwW8eg= +k8s.io/utils v0.0.0-20230505201702-9f6742963106 h1:EObNQ3TW2D+WptiYXlApGNLVy0zm/JIBVY9i+M4wpAU= +k8s.io/utils v0.0.0-20230505201702-9f6742963106/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +sigs.k8s.io/controller-runtime v0.15.0 h1:ML+5Adt3qZnMSYxZ7gAverBLNPSMQEibtzAgp0UPojU= +sigs.k8s.io/controller-runtime v0.15.0/go.mod h1:7ngYvp1MLT+9GeZ+6lH3LOlcHkp/+tzA/fmHa4iq9kk= +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/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= +sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= +sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= +sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= diff --git a/otelcollector/otel-allocator/header.txt b/otelcollector/otel-allocator/header.txt new file mode 100644 index 000000000..3881885f3 --- /dev/null +++ b/otelcollector/otel-allocator/header.txt @@ -0,0 +1,13 @@ +Copyright The OpenTelemetry Authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. \ No newline at end of file diff --git a/otelcollector/otel-allocator/main.go b/otelcollector/otel-allocator/main.go new file mode 100644 index 000000000..28801ff39 --- /dev/null +++ b/otelcollector/otel-allocator/main.go @@ -0,0 +1,251 @@ +// Copyright The OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package main + +import ( + "context" + "os" + "os/signal" + "strings" + "syscall" + + gokitlog "github.com/go-kit/log" + "github.com/oklog/run" + "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/client_golang/prometheus/promauto" + "github.com/prometheus/prometheus/discovery" + _ "k8s.io/client-go/plugin/pkg/client/auth/gcp" + ctrl "sigs.k8s.io/controller-runtime" + + "github.com/open-telemetry/opentelemetry-operator/cmd/otel-allocator/allocation" + "github.com/open-telemetry/opentelemetry-operator/cmd/otel-allocator/collector" + "github.com/open-telemetry/opentelemetry-operator/cmd/otel-allocator/config" + "github.com/open-telemetry/opentelemetry-operator/cmd/otel-allocator/prehook" + "github.com/open-telemetry/opentelemetry-operator/cmd/otel-allocator/server" + "github.com/open-telemetry/opentelemetry-operator/cmd/otel-allocator/target" + allocatorWatcher "github.com/open-telemetry/opentelemetry-operator/cmd/otel-allocator/watcher" +) + +var ( + setupLog = ctrl.Log.WithName("setup") + eventsMetric = promauto.NewCounterVec(prometheus.CounterOpts{ + Name: "opentelemetry_allocator_events", + Help: "Number of events in the channel.", + }, []string{"source"}) +) + +func main() { + var ( + // allocatorPrehook will be nil if filterStrategy is not set or + // unrecognized. No filtering will be used in this case. + allocatorPrehook prehook.Hook + allocator allocation.Allocator + discoveryManager *discovery.Manager + collectorWatcher *collector.Client + fileWatcher allocatorWatcher.Watcher + promWatcher allocatorWatcher.Watcher + targetDiscoverer *target.Discoverer + + discoveryCancel context.CancelFunc + runGroup run.Group + eventChan = make(chan allocatorWatcher.Event) + eventCloser = make(chan bool, 1) + interrupts = make(chan os.Signal, 1) + errChan = make(chan error) + ) + + // EULA statement is required for Arc extension + clusterResourceId := os.Getenv("CLUSTER") + if strings.EqualFold(clusterResourceId, "connectedclusters") { + setupLog.Info("MICROSOFT SOFTWARE LICENSE TERMS\n\nMICROSOFT Azure Arc-enabled Kubernetes\n\nThis software is licensed to you as part of your or your company's subscription license for Microsoft Azure Services. You may only use the software with Microsoft Azure Services and subject to the terms and conditions of the agreement under which you obtained Microsoft Azure Services. If you do not have an active subscription license for Microsoft Azure Services, you may not use the software. Microsoft Azure Legal Information: https://azure.microsoft.com/en-us/support/legal/") + } + + cliConf, err := config.ParseCLI() + if err != nil { + setupLog.Error(err, "Failed to parse parameters") + os.Exit(1) + } + + // Defaulting to consistent hashing + allocationStrategy := "consistent-hashing" + // Config file will not exist at startup, so not attempting to load the file which results in an error and just using defaults here. + cfg := config.Config{ + AllocationStrategy: &allocationStrategy, + LabelSelector: map[string]string{ + "rsName": "ama-metrics", + "kubernetes.azure.com/managedby": "aks", + }, + } + + if validationErr := config.ValidateConfig(&cfg, &cliConf); validationErr != nil { + setupLog.Error(validationErr, "Invalid configuration") + } + + cliConf.RootLogger.Info("Starting the Target Allocator") + ctx := context.Background() + log := ctrl.Log.WithName("allocator") + + allocatorPrehook = prehook.New(cfg.GetTargetsFilterStrategy(), log) + allocator, err = allocation.New(cfg.GetAllocationStrategy(), log, allocation.WithFilter(allocatorPrehook)) + if err != nil { + setupLog.Error(err, "Unable to initialize allocation strategy") + os.Exit(1) + } + srv := server.NewServer(log, allocator, cliConf.ListenAddr) + + discoveryCtx, discoveryCancel := context.WithCancel(ctx) + discoveryManager = discovery.NewManager(discoveryCtx, gokitlog.NewNopLogger()) + targetDiscoverer = target.NewDiscoverer(log, discoveryManager, allocatorPrehook, srv) + collectorWatcher, collectorWatcherErr := collector.NewClient(log, cliConf.ClusterConfig) + if collectorWatcherErr != nil { + setupLog.Error(collectorWatcherErr, "Unable to initialize collector watcher") + os.Exit(1) + } + fileWatcher, err = allocatorWatcher.NewFileWatcher(setupLog.WithName("file-watcher"), cliConf) + if err != nil { + setupLog.Error(err, "Can't start the file watcher") + os.Exit(1) + } + signal.Notify(interrupts, os.Interrupt, syscall.SIGINT, syscall.SIGTERM) + defer close(interrupts) + + if *cliConf.PromCRWatcherConf.Enabled { + promWatcher, err = allocatorWatcher.NewPrometheusCRWatcher(setupLog.WithName("prometheus-cr-watcher"), cfg, cliConf) + if err != nil { + setupLog.Error(err, "Can't start the prometheus watcher") + os.Exit(1) + } + runGroup.Add( + func() error { + promWatcherErr := promWatcher.Watch(eventChan, errChan) + setupLog.Info("Prometheus watcher exited") + return promWatcherErr + }, + func(_ error) { + setupLog.Info("Closing prometheus watcher") + promWatcherErr := promWatcher.Close() + if promWatcherErr != nil { + setupLog.Error(promWatcherErr, "prometheus watcher failed to close") + } + }) + } + runGroup.Add( + func() error { + fileWatcherErr := fileWatcher.Watch(eventChan, errChan) + setupLog.Info("File watcher exited") + return fileWatcherErr + }, + func(_ error) { + setupLog.Info("Closing file watcher") + fileWatcherErr := fileWatcher.Close() + if fileWatcherErr != nil { + setupLog.Error(fileWatcherErr, "file watcher failed to close") + } + }) + runGroup.Add( + func() error { + discoveryManagerErr := discoveryManager.Run() + setupLog.Info("Discovery manager exited") + return discoveryManagerErr + }, + func(_ error) { + setupLog.Info("Closing discovery manager") + discoveryCancel() + }) + runGroup.Add( + func() error { + // Initial loading of the config file's scrape config + err = targetDiscoverer.ApplyConfig(allocatorWatcher.EventSourceConfigMap, cfg.Config) + if err != nil { + setupLog.Error(err, "Unable to apply initial configuration") + return err + } + err := targetDiscoverer.Watch(allocator.SetTargets) + setupLog.Info("Target discoverer exited") + return err + }, + func(_ error) { + setupLog.Info("Closing target discoverer") + targetDiscoverer.Close() + }) + runGroup.Add( + func() error { + err := collectorWatcher.Watch(ctx, cfg.LabelSelector, allocator.SetCollectors) + setupLog.Info("Collector watcher exited") + return err + }, + func(_ error) { + setupLog.Info("Closing collector watcher") + collectorWatcher.Close() + }) + runGroup.Add( + func() error { + err := srv.Start() + setupLog.Info("Server failed to start") + return err + }, + func(_ error) { + setupLog.Info("Closing server") + if shutdownErr := srv.Shutdown(ctx); shutdownErr != nil { + setupLog.Error(shutdownErr, "Error on server shutdown") + } + }) + runGroup.Add( + func() error { + for { + select { + case event := <-eventChan: + eventsMetric.WithLabelValues(event.Source.String()).Inc() + loadConfig, err := event.Watcher.LoadConfig(ctx) + if err != nil { + setupLog.Error(err, "Unable to load configuration") + continue + } + err = targetDiscoverer.ApplyConfig(event.Source, loadConfig) + if err != nil { + setupLog.Error(err, "Unable to apply configuration") + continue + } + case err := <-errChan: + setupLog.Error(err, "Watcher error") + case <-eventCloser: + return nil + } + } + }, + func(_ error) { + setupLog.Info("Closing watcher loop") + close(eventCloser) + }) + runGroup.Add( + func() error { + for { + select { + case <-interrupts: + setupLog.Info("Received interrupt") + return nil + case <-eventCloser: + return nil + } + } + }, + func(_ error) { + setupLog.Info("Closing interrupt loop") + }) + if runErr := runGroup.Run(); runErr != nil { + setupLog.Error(runErr, "run group exited") + } + setupLog.Info("Target allocator exited.") +} diff --git a/otelcollector/otel-allocator/prehook/prehook.go b/otelcollector/otel-allocator/prehook/prehook.go new file mode 100644 index 000000000..f356f7c2d --- /dev/null +++ b/otelcollector/otel-allocator/prehook/prehook.go @@ -0,0 +1,64 @@ +// Copyright The OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package prehook + +import ( + "errors" + + "github.com/go-logr/logr" + "github.com/prometheus/prometheus/model/relabel" + + "github.com/open-telemetry/opentelemetry-operator/cmd/otel-allocator/target" +) + +const ( + relabelConfigTargetFilterName = "relabel-config" +) + +type Hook interface { + Apply(map[string]*target.Item) map[string]*target.Item + SetConfig(map[string][]*relabel.Config) + GetConfig() map[string][]*relabel.Config +} + +type HookProvider func(log logr.Logger) Hook + +var ( + registry = map[string]HookProvider{} +) + +func New(name string, log logr.Logger) Hook { + if p, ok := registry[name]; ok { + return p(log.WithName("Prehook").WithName(name)) + } + + log.Info("Unrecognized filter strategy; filtering disabled") + return nil +} + +func Register(name string, provider HookProvider) error { + if _, ok := registry[name]; ok { + return errors.New("already registered") + } + registry[name] = provider + return nil +} + +func init() { + err := Register(relabelConfigTargetFilterName, NewRelabelConfigTargetFilter) + if err != nil { + panic(err) + } +} diff --git a/otelcollector/otel-allocator/prehook/relabel.go b/otelcollector/otel-allocator/prehook/relabel.go new file mode 100644 index 000000000..3595cb888 --- /dev/null +++ b/otelcollector/otel-allocator/prehook/relabel.go @@ -0,0 +1,110 @@ +// Copyright The OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package prehook + +import ( + "github.com/go-logr/logr" + "github.com/prometheus/common/model" + "github.com/prometheus/prometheus/model/labels" + "github.com/prometheus/prometheus/model/relabel" + + "github.com/open-telemetry/opentelemetry-operator/cmd/otel-allocator/target" +) + +type RelabelConfigTargetFilter struct { + log logr.Logger + relabelCfg map[string][]*relabel.Config +} + +func NewRelabelConfigTargetFilter(log logr.Logger) Hook { + return &RelabelConfigTargetFilter{ + log: log, + relabelCfg: make(map[string][]*relabel.Config), + } +} + +// helper function converts from model.LabelSet to []labels.Label. +func convertLabelToPromLabelSet(lbls model.LabelSet) []labels.Label { + newLabels := make([]labels.Label, len(lbls)) + index := 0 + for k, v := range lbls { + newLabels[index].Name = string(k) + newLabels[index].Value = string(v) + index++ + } + return newLabels +} + +func (tf *RelabelConfigTargetFilter) Apply(targets map[string]*target.Item) map[string]*target.Item { + numTargets := len(targets) + + // need to wait until relabelCfg is set + if len(tf.relabelCfg) == 0 { + return targets + } + + // Note: jobNameKey != tItem.JobName (jobNameKey is hashed) + for jobNameKey, tItem := range targets { + keepTarget := true + lset := convertLabelToPromLabelSet(tItem.Labels) + for _, cfg := range tf.relabelCfg[tItem.JobName] { + if newLset, keep := relabel.Process(lset, cfg); !keep { + keepTarget = false + break // inner loop + } else { + lset = newLset + } + } + + if !keepTarget { + delete(targets, jobNameKey) + } + } + + tf.log.V(2).Info("Filtering complete", "seen", numTargets, "kept", len(targets)) + return targets +} + +func (tf *RelabelConfigTargetFilter) SetConfig(cfgs map[string][]*relabel.Config) { + relabelCfgCopy := make(map[string][]*relabel.Config) + for key, val := range cfgs { + relabelCfgCopy[key] = tf.replaceRelabelConfig(val) + } + + tf.relabelCfg = relabelCfgCopy +} + +// See this thread [https://github.com/open-telemetry/opentelemetry-operator/pull/1124/files#r983145795] +// for why SHARD == 0 is a necessary substitution. Otherwise the keep action that uses this env variable, +// would not match the regex and all targets end up dropped. Also note, $(SHARD) will always be 0 and it +// does not make sense to read from the environment because it is never set in the allocator. +func (tf *RelabelConfigTargetFilter) replaceRelabelConfig(cfg []*relabel.Config) []*relabel.Config { + for i := range cfg { + str := cfg[i].Regex.String() + if str == "$(SHARD)" { + cfg[i].Regex = relabel.MustNewRegexp("0") + } + } + + return cfg +} + +func (tf *RelabelConfigTargetFilter) GetConfig() map[string][]*relabel.Config { + relabelCfgCopy := make(map[string][]*relabel.Config) + for k, v := range tf.relabelCfg { + relabelCfgCopy[k] = v + } + return relabelCfgCopy +} diff --git a/otelcollector/otel-allocator/prehook/relabel_test.go b/otelcollector/otel-allocator/prehook/relabel_test.go new file mode 100644 index 000000000..d30f645eb --- /dev/null +++ b/otelcollector/otel-allocator/prehook/relabel_test.go @@ -0,0 +1,270 @@ +// Copyright The OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package prehook + +import ( + "crypto/rand" + "fmt" + "math/big" + "strconv" + "testing" + + "github.com/prometheus/common/model" + "github.com/prometheus/prometheus/model/relabel" + "github.com/stretchr/testify/assert" + logf "sigs.k8s.io/controller-runtime/pkg/log" + + "github.com/open-telemetry/opentelemetry-operator/cmd/otel-allocator/target" +) + +var ( + logger = logf.Log.WithName("unit-tests") + defaultNumTargets = 100 + defaultNumCollectors = 3 + defaultStartIndex = 0 + + relabelConfigs = []relabelConfigObj{ + { + cfg: []*relabel.Config{ + { + SourceLabels: model.LabelNames{"i"}, + Action: "replace", + Separator: ";", + Regex: relabel.MustNewRegexp("(.*)"), + Replacement: "$1", + TargetLabel: "foo", + }, + }, + isDrop: false, + }, + { + cfg: []*relabel.Config{ + { + SourceLabels: model.LabelNames{"i"}, + Regex: relabel.MustNewRegexp("(.*)"), + Separator: ";", + Action: "keep", + Replacement: "$1", + }, + }, + isDrop: false, + }, + { + cfg: []*relabel.Config{ + { + SourceLabels: model.LabelNames{"i"}, + Regex: relabel.MustNewRegexp("bad.*match"), + Action: "drop", + Separator: ";", + Replacement: "$1", + }, + }, + isDrop: false, + }, + { + cfg: []*relabel.Config{ + { + SourceLabels: model.LabelNames{"label_not_present"}, + Regex: relabel.MustNewRegexp("(.*)"), + Separator: ";", + Action: "keep", + Replacement: "$1", + }, + }, + isDrop: false, + }, + { + cfg: []*relabel.Config{ + { + SourceLabels: model.LabelNames{"i"}, + Regex: relabel.MustNewRegexp("(.*)"), + Separator: ";", + Action: "drop", + Replacement: "$1", + }, + }, + isDrop: true, + }, + { + cfg: []*relabel.Config{ + { + SourceLabels: model.LabelNames{"collector"}, + Regex: relabel.MustNewRegexp("(collector.*)"), + Separator: ";", + Action: "drop", + Replacement: "$1", + }, + }, + isDrop: true, + }, + { + cfg: []*relabel.Config{ + { + SourceLabels: model.LabelNames{"i"}, + Regex: relabel.MustNewRegexp("bad.*match"), + Separator: ";", + Action: "keep", + Replacement: "$1", + }, + }, + isDrop: true, + }, + { + cfg: []*relabel.Config{ + { + SourceLabels: model.LabelNames{"collector"}, + Regex: relabel.MustNewRegexp("collectors-n"), + Separator: ";", + Action: "keep", + Replacement: "$1", + }, + }, + isDrop: true, + }, + } + + HashmodConfig = relabelConfigObj{ + cfg: []*relabel.Config{ + { + SourceLabels: model.LabelNames{"i"}, + Regex: relabel.MustNewRegexp("(.*)"), + Separator: ";", + Modulus: 1, + TargetLabel: "tmp-0", + Action: "hashmod", + Replacement: "$1", + }, + + { + SourceLabels: model.LabelNames{"tmp-$(SHARD)"}, + Regex: relabel.MustNewRegexp("$(SHARD)"), + Separator: ";", + Action: "keep", + Replacement: "$1", + }, + }, + isDrop: false, + } + + DefaultDropRelabelConfig = relabel.Config{ + SourceLabels: model.LabelNames{"i"}, + Regex: relabel.MustNewRegexp("(.*)"), + Action: "drop", + } +) + +type relabelConfigObj struct { + cfg []*relabel.Config + isDrop bool +} + +func colIndex(index, numCols int) int { + if numCols == 0 { + return -1 + } + return index % numCols +} + +func makeNNewTargets(rCfgs []relabelConfigObj, n int, numCollectors int, startingIndex int) (map[string]*target.Item, int, map[string]*target.Item, map[string][]*relabel.Config) { + toReturn := map[string]*target.Item{} + expectedMap := make(map[string]*target.Item) + numItemsRemaining := n + relabelConfig := make(map[string][]*relabel.Config) + for i := startingIndex; i < n+startingIndex; i++ { + collector := fmt.Sprintf("collector-%d", colIndex(i, numCollectors)) + label := model.LabelSet{ + "collector": model.LabelValue(collector), + "i": model.LabelValue(strconv.Itoa(i)), + "total": model.LabelValue(strconv.Itoa(n + startingIndex)), + } + jobName := fmt.Sprintf("test-job-%d", i) + newTarget := target.NewItem(jobName, "test-url", label, collector) + // add a single replace, drop, or keep action as relabel_config for targets + var index int + ind, _ := rand.Int(rand.Reader, big.NewInt(int64(len(relabelConfigs)))) + + index = int(ind.Int64()) + + relabelConfig[jobName] = rCfgs[index].cfg + + targetKey := newTarget.Hash() + if relabelConfigs[index].isDrop { + numItemsRemaining-- + } else { + expectedMap[targetKey] = newTarget + } + toReturn[targetKey] = newTarget + } + return toReturn, numItemsRemaining, expectedMap, relabelConfig +} + +func TestApply(t *testing.T) { + allocatorPrehook := New("relabel-config", logger) + assert.NotNil(t, allocatorPrehook) + + targets, numRemaining, expectedTargetMap, relabelCfg := makeNNewTargets(relabelConfigs, defaultNumTargets, defaultNumCollectors, defaultStartIndex) + allocatorPrehook.SetConfig(relabelCfg) + remainingItems := allocatorPrehook.Apply(targets) + assert.Len(t, remainingItems, numRemaining) + assert.Equal(t, remainingItems, expectedTargetMap) + + // clear out relabelCfg to test with empty values + for key := range relabelCfg { + relabelCfg[key] = nil + } + + // cfg = createMockConfig(relabelCfg) + allocatorPrehook.SetConfig(relabelCfg) + remainingItems = allocatorPrehook.Apply(targets) + // relabelCfg is empty so targets should be unfiltered + assert.Len(t, remainingItems, len(targets)) + assert.Equal(t, remainingItems, targets) +} + +func TestApplyHashmodAction(t *testing.T) { + allocatorPrehook := New("relabel-config", logger) + assert.NotNil(t, allocatorPrehook) + + hashRelabelConfigs := append(relabelConfigs, HashmodConfig) + targets, numRemaining, expectedTargetMap, relabelCfg := makeNNewTargets(hashRelabelConfigs, defaultNumTargets, defaultNumCollectors, defaultStartIndex) + allocatorPrehook.SetConfig(relabelCfg) + remainingItems := allocatorPrehook.Apply(targets) + assert.Len(t, remainingItems, numRemaining) + assert.Equal(t, remainingItems, expectedTargetMap) +} + +func TestApplyEmptyRelabelCfg(t *testing.T) { + + allocatorPrehook := New("relabel-config", logger) + assert.NotNil(t, allocatorPrehook) + + targets, _, _, _ := makeNNewTargets(relabelConfigs, defaultNumTargets, defaultNumCollectors, defaultStartIndex) + + relabelCfg := map[string][]*relabel.Config{} + allocatorPrehook.SetConfig(relabelCfg) + remainingItems := allocatorPrehook.Apply(targets) + // relabelCfg is empty so targets should be unfiltered + assert.Len(t, remainingItems, len(targets)) + assert.Equal(t, remainingItems, targets) +} + +func TestSetConfig(t *testing.T) { + allocatorPrehook := New("relabel-config", logger) + assert.NotNil(t, allocatorPrehook) + + _, _, _, relabelCfg := makeNNewTargets(relabelConfigs, defaultNumTargets, defaultNumCollectors, defaultStartIndex) + allocatorPrehook.SetConfig(relabelCfg) + assert.Equal(t, relabelCfg, allocatorPrehook.GetConfig()) +} diff --git a/otelcollector/otel-allocator/prometheus-operator/.editorconfig b/otelcollector/otel-allocator/prometheus-operator/.editorconfig new file mode 100644 index 000000000..a5ac56962 --- /dev/null +++ b/otelcollector/otel-allocator/prometheus-operator/.editorconfig @@ -0,0 +1,14 @@ +root = true + +[*.py] +indent_style = space +end_of_line = lf +insert_final_newline = true +max_line_length = 100 +trim_trailing_whitespace = true +indent_size = 4 + +[*.yaml] +indent_style = space +indent_size = 2 +trim_trailing_whitespace = true diff --git a/otelcollector/otel-allocator/prometheus-operator/.gitattributes b/otelcollector/otel-allocator/prometheus-operator/.gitattributes new file mode 100644 index 000000000..9dfd33fd3 --- /dev/null +++ b/otelcollector/otel-allocator/prometheus-operator/.gitattributes @@ -0,0 +1 @@ +**/zz_generated.*.go linguist-generated=true diff --git a/otelcollector/otel-allocator/prometheus-operator/.github/CODEOWNERS b/otelcollector/otel-allocator/prometheus-operator/.github/CODEOWNERS new file mode 100644 index 000000000..4c531e80e --- /dev/null +++ b/otelcollector/otel-allocator/prometheus-operator/.github/CODEOWNERS @@ -0,0 +1,4 @@ +* @prometheus-operator/prometheus-operator-reviewers + +/scripts/ @paulfantom +/.github/workflows/ @paulfantom diff --git a/otelcollector/otel-allocator/prometheus-operator/.github/ISSUE_TEMPLATE/bug.md b/otelcollector/otel-allocator/prometheus-operator/.github/ISSUE_TEMPLATE/bug.md new file mode 100644 index 000000000..339eff726 --- /dev/null +++ b/otelcollector/otel-allocator/prometheus-operator/.github/ISSUE_TEMPLATE/bug.md @@ -0,0 +1,52 @@ +--- +name: Bug +about: Report a bug related to the Prometheus Operator +labels: kind/bug +--- + + + +**What happened?** + +**Did you expect to see something different?** + +**How to reproduce it (as minimally and precisely as possible)**: + +**Environment** + +* Prometheus Operator version: + + `Insert image tag or Git SHA here` + + + +* Kubernetes version information: + + `kubectl version` + + +* Kubernetes cluster kind: + + insert how you created your cluster: kops, bootkube, etc. + +* Manifests: + +``` +insert manifests relevant to the issue +``` + +* Prometheus Operator Logs: + +``` +insert Prometheus Operator logs relevant to the issue here +``` + +**Anything else we need to know?**: diff --git a/otelcollector/otel-allocator/prometheus-operator/.github/ISSUE_TEMPLATE/config.yml b/otelcollector/otel-allocator/prometheus-operator/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 000000000..0394f6443 --- /dev/null +++ b/otelcollector/otel-allocator/prometheus-operator/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,8 @@ +blank_issues_enabled: false # Show or hide the Create a blank issue choice when users select New issue. +contact_links: + - name: "Questions via prometheus-operator community support on kubernetes slack - #prometheus-operator" + url: https://kubernetes.slack.com/archives/CFFDS2Z7F + about: "Join us for questions, answers or prometheus-operator related chat. Please do create issues on Github for better collaboration. If you don't have an account, sign up at http://slack.k8s.io/" + - name: "Question via prometheus-operator discussions (similar to Stack Overflow)" + url: https://github.com/prometheus-operator/prometheus-operator/discussions + about: "Please ask and answer questions here for async response." diff --git a/otelcollector/otel-allocator/prometheus-operator/.github/ISSUE_TEMPLATE/feature.md b/otelcollector/otel-allocator/prometheus-operator/.github/ISSUE_TEMPLATE/feature.md new file mode 100644 index 000000000..50e91ef93 --- /dev/null +++ b/otelcollector/otel-allocator/prometheus-operator/.github/ISSUE_TEMPLATE/feature.md @@ -0,0 +1,29 @@ +--- +name: Feature +about: If you want to propose a new feature or enhancement +labels: kind/feature +--- + + + +**What is missing?** + +**Why do we need it?** + +**Environment** + +* Prometheus Operator version: + + `Insert image tag or Git SHA here` + + + +**Anything else we need to know?**: diff --git a/otelcollector/otel-allocator/prometheus-operator/.github/ISSUE_TEMPLATE/support.md b/otelcollector/otel-allocator/prometheus-operator/.github/ISSUE_TEMPLATE/support.md new file mode 100644 index 000000000..2ded3da6f --- /dev/null +++ b/otelcollector/otel-allocator/prometheus-operator/.github/ISSUE_TEMPLATE/support.md @@ -0,0 +1,50 @@ +--- +name: Support +about: For questions about prometheus-operator. For Helm, go to https://github.com/prometheus-community/helm-charts. For kube-prometheus, go to https://github.com/prometheus-operator/kube-prometheus. +labels: kind/support +--- + + + +**What did you do?** + +**Did you expect to see some different?** + +**Environment** + +* Prometheus Operator version: + + `Insert image tag or Git SHA here` + + + +* Kubernetes version information: + + `kubectl version` + + +* Kubernetes cluster kind: + + insert how you created your cluster: kops, bootkube, etc. + +* Manifests: + +``` +insert manifests relevant to the issue +``` + +* Prometheus Operator Logs: + +``` +insert Prometheus Operator logs relevant to the issue here +``` + +**Anything else we need to know?**: diff --git a/otelcollector/otel-allocator/prometheus-operator/.github/PULL_REQUEST_TEMPLATE.md b/otelcollector/otel-allocator/prometheus-operator/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 000000000..688494b5b --- /dev/null +++ b/otelcollector/otel-allocator/prometheus-operator/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,33 @@ +## Description + +_Describe the big picture of your changes here to communicate to the maintainers why we should accept this pull request. +If it fixes a bug or resolves a feature request, be sure to link to that issue._ + + + +## Type of change + +_What type of changes does your code introduce to the Prometheus operator? Put an `x` in the box that apply._ + +- [ ] `CHANGE` (fix or feature that would cause existing functionality to not work as expected) +- [ ] `FEATURE` (non-breaking change which adds functionality) +- [ ] `BUGFIX` (non-breaking change which fixes an issue) +- [ ] `ENHANCEMENT` (non-breaking change which improves existing functionality) +- [ ] `NONE` (if none of the other choices apply. Example, tooling, build system, CI, docs, etc.) + +## Changelog entry + +_Please put a one-line changelog entry below. This will be copied to the changelog file during the release process._ + + + +```release-note + +``` diff --git a/otelcollector/otel-allocator/prometheus-operator/.github/dependabot.yml b/otelcollector/otel-allocator/prometheus-operator/.github/dependabot.yml new file mode 100644 index 000000000..19a729a9c --- /dev/null +++ b/otelcollector/otel-allocator/prometheus-operator/.github/dependabot.yml @@ -0,0 +1,11 @@ +version: 2 +updates: + - package-ecosystem: gomod + directory: / + schedule: + interval: daily + + - package-ecosystem: github-actions + directory: / + schedule: + interval: daily diff --git a/otelcollector/otel-allocator/prometheus-operator/.github/env b/otelcollector/otel-allocator/prometheus-operator/.github/env new file mode 100644 index 000000000..ccf9e16df --- /dev/null +++ b/otelcollector/otel-allocator/prometheus-operator/.github/env @@ -0,0 +1,3 @@ +golang-version=1.20 +kind-version=v0.18.0 +kind-image=kindest/node:v1.26.3 diff --git a/otelcollector/otel-allocator/prometheus-operator/.github/lock.yml b/otelcollector/otel-allocator/prometheus-operator/.github/lock.yml new file mode 100644 index 000000000..705039636 --- /dev/null +++ b/otelcollector/otel-allocator/prometheus-operator/.github/lock.yml @@ -0,0 +1,35 @@ +# Configuration for Lock Threads - https://github.com/dessant/lock-threads + +# Number of days of inactivity before a closed issue or pull request is locked +daysUntilLock: 21 + +# Skip issues and pull requests created before a given timestamp. Timestamp must +# follow ISO 8601 (`YYYY-MM-DD`). Set to `false` to disable +skipCreatedBefore: false + +# Issues and pull requests with these labels will be ignored. Set to `[]` to disable +exemptLabels: [] + +# Label to add before locking, such as `outdated`. Set to `false` to disable +lockLabel: false + +# Comment to post before locking. Set to `false` to disable +lockComment: > + This thread has been automatically locked since there has not been + any recent activity after it was closed. Please open a new issue for + related bugs. + +# Assign `resolved` as the reason for locking. Set to `false` to disable +setLockReason: true + +# Limit to only `issues` or `pulls` +only: issues + +# Optionally, specify configuration settings just for `issues` or `pulls` +# issues: +# exemptLabels: +# - help-wanted +# lockLabel: outdated + +# pulls: +# daysUntilLock: 30 diff --git a/otelcollector/otel-allocator/prometheus-operator/.github/workflows/checks.yaml b/otelcollector/otel-allocator/prometheus-operator/.github/workflows/checks.yaml new file mode 100644 index 000000000..3fce59bf2 --- /dev/null +++ b/otelcollector/otel-allocator/prometheus-operator/.github/workflows/checks.yaml @@ -0,0 +1,92 @@ +name: checks +on: + pull_request: + push: + branches: + - 'release-*' + - 'master' + - 'main' + tags: + - 'v*' +jobs: + generate: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: + - macos-latest + - ubuntu-latest + name: Generate and format + steps: + - uses: actions/checkout@v3 + - name: Import environment variables from file + run: cat ".github/env" >> $GITHUB_ENV + - uses: actions/setup-go@v4 + with: + go-version: '${{ env.golang-version }}' + - run: make --always-make format generate && git diff --exit-code + check-docs: + runs-on: ubuntu-latest + name: Check Documentation formatting and links + steps: + - uses: actions/checkout@v3 + - name: Import environment variables from file + run: cat ".github/env" >> $GITHUB_ENV + - uses: actions/setup-go@v4 + with: + go-version: '${{ env.golang-version }}' + - run: make check-docs + check-golang: + runs-on: ubuntu-latest + name: Golang linter + steps: + - uses: actions/checkout@v3 + - name: Import environment variables from file + run: cat ".github/env" >> $GITHUB_ENV + - uses: actions/setup-go@v4 + with: + go-version: '${{ env.golang-version }}' + - name: golangci-lint + uses: golangci/golangci-lint-action@v3.6.0 + with: + version: v1.53.1 + args: --timeout 10m0s + check-metrics: + runs-on: ubuntu-latest + name: Check prometheus metrics + steps: + - uses: actions/checkout@v3 + - name: Import environment variables from file + run: cat ".github/env" >> $GITHUB_ENV + - uses: actions/setup-go@v4 + with: + go-version: '${{ env.golang-version }}' + - run: make check-metrics + build: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: + - macos-latest + - ubuntu-latest + name: Build operator binary + steps: + - uses: actions/checkout@v3 + - name: Import environment variables from file + run: cat ".github/env" >> $GITHUB_ENV + - uses: actions/setup-go@v4 + with: + go-version: '${{ env.golang-version }}' + - run: make operator + po-rule-migration: + runs-on: ubuntu-latest + name: Build Prometheus Operator rule config map to rule file CRDs CLI tool + steps: + - uses: actions/checkout@v3 + - name: Import environment variables from file + run: cat ".github/env" >> $GITHUB_ENV + - uses: actions/setup-go@v4 + with: + go-version: '${{ env.golang-version }}' + - run: cd cmd/po-rule-migration && go install + diff --git a/otelcollector/otel-allocator/prometheus-operator/.github/workflows/e2e.yaml b/otelcollector/otel-allocator/prometheus-operator/.github/workflows/e2e.yaml new file mode 100644 index 000000000..2a9f8662f --- /dev/null +++ b/otelcollector/otel-allocator/prometheus-operator/.github/workflows/e2e.yaml @@ -0,0 +1,107 @@ +name: e2e +on: + pull_request: + push: + branches: + - 'release-*' + - 'master' + - 'main' + tags: + - 'v*' +jobs: + e2e-tests: + name: E2E tests + runs-on: ubuntu-latest + strategy: + matrix: + suite: [alertmanager, prometheus, prometheusAllNS, thanosruler, operatorUpgrade] + include: + - suite: alertmanager + prometheus: "exclude" + prometheusAllNS: "exclude" + alertmanager: "" + thanosruler: "exclude" + operatorUpgrade: "exclude" + featureGated: "include" + - suite: prometheus + prometheus: "" + prometheusAllNS: "exclude" + alertmanager: "exclude" + thanosruler: "exclude" + operatorUpgrade: "exclude" + featureGated: "include" + - suite: prometheusAllNS + prometheus: "exclude" + prometheusAllNS: "" + alertmanager: "exclude" + thanosruler: "exclude" + operatorUpgrade: "exclude" + featureGated: "include" + - suite: thanosruler + prometheus: "exclude" + prometheusAllNS: "exclude" + alertmanager: "exclude" + thanosruler: "" + operatorUpgrade: "exclude" + featureGated: "include" + - suite: operatorUpgrade + prometheus: "exclude" + prometheusAllNS: "exclude" + alertmanager: "exclude" + thanosruler: "exclude" + operatorUpgrade: "" + featureGated: "include" + steps: + - uses: actions/checkout@v3 + - name: Import environment variables from file + run: cat ".github/env" >> $GITHUB_ENV + - name: Install Go + uses: actions/setup-go@v4 + with: + go-version: '${{ env.golang-version }}' + - name: Build images + run: | + export SHELL=/bin/bash + make build image + - name: Start KinD + uses: engineerd/setup-kind@v0.5.0 + with: + version: ${{ env.kind-version }} + image: ${{ env.kind-image }} + wait: 300s + config: /test/e2e/kind-conf.yaml + - name: Wait for cluster to finish bootstraping + run: | + kubectl wait --for=condition=Ready pods --all --all-namespaces --timeout=300s + kubectl cluster-info + kubectl get pods -A + - name: Load images + run: | + kind load docker-image quay.io/prometheus-operator/prometheus-operator:$(git rev-parse --short HEAD) + kind load docker-image quay.io/prometheus-operator/prometheus-config-reloader:$(git rev-parse --short HEAD) + kind load docker-image quay.io/prometheus-operator/admission-webhook:$(git rev-parse --short HEAD) + kubectl apply -f scripts/kind-rbac.yaml + - name: Run tests + run: > + EXCLUDE_ALERTMANAGER_TESTS=${{ matrix.alertmanager }} + EXCLUDE_PROMETHEUS_TESTS=${{ matrix.prometheus }} + EXCLUDE_PROMETHEUS_ALL_NS_TESTS=${{ matrix.prometheusAllNS }} + EXCLUDE_THANOSRULER_TESTS=${{ matrix.thanosruler }} + EXCLUDE_OPERATOR_UPGRADE_TESTS=${{ matrix.operatorUpgrade }} + FEATURE_GATED_TESTS=${{ matrix.featureGated }} + make test-e2e + + # Added to summarize the matrix and allow easy branch protection rules setup + e2e-tests-result: + name: End-to-End Test Results + if: always() + needs: + - e2e-tests + runs-on: ubuntu-latest + steps: + - name: Mark the job as a success + if: needs.e2e-tests.result == 'success' + run: exit 0 + - name: Mark the job as a failure + if: needs.e2e-tests.result != 'success' + run: exit 1 diff --git a/otelcollector/otel-allocator/prometheus-operator/.github/workflows/publish.yaml b/otelcollector/otel-allocator/prometheus-operator/.github/workflows/publish.yaml new file mode 100644 index 000000000..092281c22 --- /dev/null +++ b/otelcollector/otel-allocator/prometheus-operator/.github/workflows/publish.yaml @@ -0,0 +1,57 @@ +name: publish +on: + workflow_dispatch: + push: + branches: + - 'release-*' + - 'master' + - 'main' + tags: + - 'v*' + - '!pkg*' + +jobs: + publish: + name: Publish container images + + permissions: + id-token: write # needed to sign images with cosign. + packages: write # needed to push images to ghcr.io. + + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Import environment variables from file + run: cat ".github/env" >> $GITHUB_ENV + - name: Install Go + uses: actions/setup-go@v4 + with: + go-version: '${{ env.golang-version }}' + - name: Install cosign + uses: sigstore/cosign-installer@main + - name: Check the Docker version + run: docker version + - name: Check the cosign version + run: cosign version + - name: Install crane + uses: imjasonh/setup-crane@v0.3 + - name: Login to quay.io + uses: docker/login-action@v2 + with: + registry: quay.io + username: ${{ secrets.quay_username }} + password: ${{ secrets.quay_password }} + - name: Login to ghcr.io + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Cosign login + run: | + echo "${{ secrets.GITHUB_TOKEN }}" | cosign login -u ${{ github.repository_owner }} --password-stdin ghcr.io + echo "${{ secrets.quay_password }}" | cosign login -u ${{ secrets.quay_username }} --password-stdin quay.io + - name: Build images and push + run: ./scripts/push-docker-image.sh diff --git a/otelcollector/otel-allocator/prometheus-operator/.github/workflows/release.yaml b/otelcollector/otel-allocator/prometheus-operator/.github/workflows/release.yaml new file mode 100644 index 000000000..d7406fd4d --- /dev/null +++ b/otelcollector/otel-allocator/prometheus-operator/.github/workflows/release.yaml @@ -0,0 +1,37 @@ +name: release +on: + release: + types: + - created + +jobs: + upload-assets: + runs-on: ubuntu-latest + name: Upload release assets + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Import environment variables from file + run: cat ".github/env" >> $GITHUB_ENV + - name: Install Go + uses: actions/setup-go@v4 + with: + go-version: '${{ env.golang-version }}' + - name: Upload bundle.yaml to release + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: bundle.yaml + asset_name: bundle.yaml + tag: ${{ github.ref }} + overwrite: true + - name: Generate stripped down version of CRDs + run: make stripped-down-crds.yaml + - name: Upload stripped-down-crds.yaml to release + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: stripped-down-crds.yaml + asset_name: stripped-down-crds.yaml + tag: ${{ github.ref }} + overwrite: true diff --git a/otelcollector/otel-allocator/prometheus-operator/.github/workflows/stale.yaml b/otelcollector/otel-allocator/prometheus-operator/.github/workflows/stale.yaml new file mode 100644 index 000000000..70951dc5a --- /dev/null +++ b/otelcollector/otel-allocator/prometheus-operator/.github/workflows/stale.yaml @@ -0,0 +1,21 @@ +name: 'Close stale issues and PRs' +on: + schedule: + - cron: '30 1 * * *' + +jobs: + stale: + runs-on: ubuntu-latest + steps: + - uses: actions/stale@v8 + with: + stale-issue-message: 'This issue has been automatically marked as stale because it has not had any activity in the last 60 days. Thank you for your contributions.' + close-issue-message: 'This issue was closed because it has not had any activity in the last 120 days. Please reopen if you feel this is still valid.' + days-before-stale: 60 + days-before-issue-close: 120 + days-before-pr-close: -1 # Prevent closing PRs + exempt-issue-labels: 'kind/feature,help wanted,kind/bug' + stale-issue-label: 'stale' + stale-pr-label: 'stale' + exempt-draft-pr: true + operations-per-run: 500 diff --git a/otelcollector/otel-allocator/prometheus-operator/.github/workflows/unit.yaml b/otelcollector/otel-allocator/prometheus-operator/.github/workflows/unit.yaml new file mode 100644 index 000000000..8e1da7ef5 --- /dev/null +++ b/otelcollector/otel-allocator/prometheus-operator/.github/workflows/unit.yaml @@ -0,0 +1,33 @@ +name: unit +on: + pull_request: + push: + branches: + - 'release-*' + - 'master' + - 'main' + tags: + - 'v*' +jobs: + unit-tests: + runs-on: ubuntu-latest + name: Unit tests + steps: + - uses: actions/checkout@v3 + - name: Import environment variables from file + run: cat ".github/env" >> $GITHUB_ENV + - uses: actions/setup-go@v4 + with: + go-version: '${{ env.golang-version }}' + - run: make test-unit + extended-tests: + runs-on: ubuntu-latest + name: Extended tests + steps: + - uses: actions/checkout@v3 + - name: Import environment variables from file + run: cat ".github/env" >> $GITHUB_ENV + - uses: actions/setup-go@v4 + with: + go-version: ${{ env.golang-version }} + - run: make test-long diff --git a/otelcollector/otel-allocator/prometheus-operator/.gitignore b/otelcollector/otel-allocator/prometheus-operator/.gitignore new file mode 100644 index 000000000..1e8c00c42 --- /dev/null +++ b/otelcollector/otel-allocator/prometheus-operator/.gitignore @@ -0,0 +1,23 @@ +/operator +/admission-webhook +/po-lint +/prometheus-config-reloader +example/alertmanager-webhook/linux/ +.build/ +*~ +*.tgz +requirements.lock +.idea +*.iml +.DS_Store +__pycache__ +.env/ +.history/ +.vscode/ +tmp +stripped-down-crds.yaml + +# These are empty target files, created on every docker build. Their sole +# purpose is to track the last target execution time to evalualte, whether the +# container needds to be rebuild +.hack-*-image diff --git a/otelcollector/otel-allocator/prometheus-operator/.golangci.yml b/otelcollector/otel-allocator/prometheus-operator/.golangci.yml new file mode 100644 index 000000000..d3d00c6e6 --- /dev/null +++ b/otelcollector/otel-allocator/prometheus-operator/.golangci.yml @@ -0,0 +1,20 @@ +run: + deadline: 10m + +linters: + enable: + - revive + +issues: + exclude-rules: + - path: _test.go + linters: + - errcheck + # TODO: fix linter errors before enabling it for the framework + - path: test/framework + linters: + - revive + +linters-settings: + errcheck: + exclude: scripts/errcheck_excludes.txt diff --git a/otelcollector/otel-allocator/prometheus-operator/.header b/otelcollector/otel-allocator/prometheus-operator/.header new file mode 100644 index 000000000..e26b763fd --- /dev/null +++ b/otelcollector/otel-allocator/prometheus-operator/.header @@ -0,0 +1,13 @@ +// Copyright The prometheus-operator Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. diff --git a/otelcollector/otel-allocator/prometheus-operator/.mdox.validate.yaml b/otelcollector/otel-allocator/prometheus-operator/.mdox.validate.yaml new file mode 100644 index 000000000..d33fb7bba --- /dev/null +++ b/otelcollector/otel-allocator/prometheus-operator/.mdox.validate.yaml @@ -0,0 +1,30 @@ +version: 1 +timeout: "1m" + +explicitLocalValidators: true + +validators: + # docs.github.com returns 403 if not in browser. Cannot curl as well. + - regex: 'docs\.github\.com' + type: "ignore" + # Cloudflare protection, so returns 503 if not in browser. Cannot curl as well. + - regex: 'wise\.com' + type: "ignore" + # Adopters example link. + - regex: "our-link" + type: "ignore" + # 301 errors even when curl-ed. + - regex: "envoyproxy" + type: "ignore" + # Ignore release links. + - regex: 'https:\/\/github\.com\/prometheus-operator\/prometheus-operator\/releases' + type: "ignore" + # Ignore GitHub container packages link as it returns 404 in curl, but works in browser + - regex: 'https://github.com/prometheus-operator/prometheus-operator/pkgs/container/prometheus-operator' + type: "ignore" + # Ignore links to /img/ because the generated content will resolve them correctly. + - regex: '/img/.+' + type: ignore + # Ignore anchor links pointing to the API documentation which are HTML tags and not supported by mdox. + - regex: 'api\.md#monitoring\.coreos\.com/v1\.(BasicAuth|PrometheusSpec|StorageSpec)$' + type: ignore diff --git a/otelcollector/otel-allocator/prometheus-operator/ADOPTERS.md b/otelcollector/otel-allocator/prometheus-operator/ADOPTERS.md new file mode 100644 index 000000000..c04fa8fff --- /dev/null +++ b/otelcollector/otel-allocator/prometheus-operator/ADOPTERS.md @@ -0,0 +1,324 @@ +--- +title: Adopters +draft: false +date: "2021-03-08T23:50:39+01:00" +--- + + + +This document tracks people and use cases for the Prometheus Operator in production. By creating a list of production use cases we hope to build a community of advisors that we can reach out to with experience using various the Prometheus Operator applications, operation environments, and cluster sizes. The Prometheus Operator development team may reach out periodically to check-in on how the Prometheus Operator is working in the field and update this list. + +Go ahead and [add your organization](https://github.com/prometheus-operator/prometheus-operator/edit/main/ADOPTERS.md) to the list. + +## CERN + +[European Laboratory for Particle Physics](https://home.cern/) + +Environments: On-premises + +Prometheus is used extensively as part of the CERN Kubernetes infrastructure, +both managed and unmanaged. Metrics deployment is managed by the community owned +__kube-prometheus-stack__ helm chart. Be sure to check our [blog](https://kubernetes.web.cern.ch/). + +Details: +- 400+ Kubernetes clusters, with cluster sizes ranging from few nodes to ~100s + +Significant usage also exists outside Kubernetes for generic service and infrastructure monitoring. + +## Clyso + +[clyso.com](https://www.clyso.com/en) + +Environments: Bare Metal, Opennebula + +Uses kube-prometheus: Yes + +Details: +- multiple K8s cluster with prometheus deployed through prom-operator +- several own ceph cluster providing metrics via ceph mgr prometheus module +- several customer ceph clusters pushing metrics via external pushgateway to our our central monitoring instances +- thanos receiver connected to own S3 storage + +## Coralogix + +[coralogix.com](https://coralogix.com) + +Environments: AWS + +Uses [kube-prometheus](https://github.com/prometheus-operator/kube-prometheus): Yes + +Details: +- Operator installed on each Kubernetes cluster, with Thanos aggregating metrics from a central query endpoint +- Two Prometheus instances per cluster +- Loose coupling between Kubernetes cluster administrators who manage alerting sinks and service owners who define alerts for their services +- 800K samples/s +- 30M active series + +## Deckhouse + +[deckhouse.io](https://deckhouse.io/) + +Environments: AWS, Azure, Google Cloud, Bare Metal + +Uses [kube-prometheus](https://github.com/prometheus-operator/kube-prometheus): Yes + +Deckhouse is a Kubernetes Platform. Its clusters running on any infrastructure are provided with the monitoring system based on highly available Prometheus and Prometheus Operator. Essential metrics are preconfigured out-of-the-box to ensure monitoring of all levels, from hardware and Kubernetes internals to the platform’s modules functionality. The monitoring-custom module simplifies adding custom metrics for user applications. Deckhouse also hosts a dedicated Prometheus instance in each cluster to store downsampled metric series for longer periods. + +## Giant Swarm + +[giantswarm.io](https://www.giantswarm.io/) + +Environments: AWS, Azure, Bare Metal + +Uses [kube-prometheus](https://github.com/prometheus-operator/kube-prometheus): Yes (with additional tight Giant Swarm integrations) + +Details: +- One prometheus operator per management cluster and one prometheus instance per workload cluster +- Customers can also install kube-prometheus for their workload using our App Platform +- 760000 samples/s +- 35M active series + +## Gitpod + +[gitpod.io](https://www.gitpod.io/) + +Environments: Google Cloud + +Uses [kube-prometheus](https://github.com/prometheus-operator/kube-prometheus): Yes (with additional Gitpod mixins) + +Details: +- One prometheus instance per cluster (8 so far) +- 20000 samples/s +- 1M active series + +## Innovaccer + +https://innovaccer.com/ + +Environments: AWS, Azure + +Uses [kube-prometheus](https://github.com/prometheus-operator/kube-prometheus): Yes + +Details (optional): +- multiple remote K8s cluster in which we have prometheus deployed through prom-operator. +- these remote prometheus instances push cluster metrics to central Thanos receiver which is connected to S3 storage. +- on top of Thanos we have Grafana for dashboarding and visualisation. + +## Kinvolk Lokomotive Kubernetes + +https://kinvolk.io/lokomotive-kubernetes/ + +Environments: AKS, AWS, Bare Metal, Equinix Metal + +Uses [kube-prometheus](https://github.com/prometheus-operator/kube-prometheus): Yes + +Details: +- Self-hosted (control plane runs as pods inside the cluster) +- Deploys full K8s stack (as a distro) or managed Kubernetes (currently only AKS supported) +- Deployed by Kinvolk for its own hosted infrastructure (including Flatcar Container Linux update server), as well as by Kinvolk customers and community users + +## Lunar + +[lunar.app](https://www.lunar.app/) + +Environments: AWS + +Uses [kube-prometheus](https://github.com/prometheus-operator/kube-prometheus): Yes + +Details: +- One prometheus operator in our platform cluster and one prometheus instance per workload cluster +- 17k samples/s +- 841k active series + +## Mattermost + +[mattermost.com](https://mattermost.com) + +Environments: AWS + +Uses [kube-prometheus](https://github.com/prometheus-operator/kube-prometheus): Yes + +Details: +- All Mattermost clusters use the Prometheus Operator with Thanos sidecar for cluster monitoring and central Thanos query component to gather all data. +- 977k samples/s +- 29.4M active series + +## Nozzle + +[nozzle.io](https://nozzle.io) + +Environment: Google Cloud + +Uses [kube-prometheus](https://github.com/prometheus-operator/kube-prometheus): Yes + +Details: +- 100k samples/s +- 1M active series + +## OpenShift + +[openshift.com](https://www.openshift.com/) + +Environments: AWS, Azure, Google Cloud, Bare Metal + +Uses [kube-prometheus](https://github.com/prometheus-operator/kube-prometheus): Yes (with additional tight OpenShift integrations) + +This is a meta user; please feel free to document specific OpenShift users! + +All OpenShift clusters use the Prometheus Operator to manage the cluster monitoring stack as well as user workload monitoring. This means the Prometheus Operator's users include all OpenShift customers. + +## Opstrace + +[https://opstrace.com](https://opstrace.com) + +Environments: AWS, Google Cloud + +Uses [kube-prometheus](https://github.com/prometheus-operator/kube-prometheus): No + +Opstrace installations use the Prometheus Operator internally to collect metrics and to alert. Opstrace users also often use the Prometheus Operator to scrape their own aplications and remote_write those metrics to Opstrace. + +## Polar Signals + +[polarsignals.com](https://www.polarsignals.com/) + +Environment: Google Cloud + +Uses [kube-prometheus](https://github.com/prometheus-operator/kube-prometheus): Yes + +Details: +- HA Pair of Prometheus +- 4000 samples/s +- 100k active series + +## Robusta + +[Robusta docs](https://docs.robusta.dev/master/) + +Environments: EKS, GKE, AKS, and self-hosted Kubernetes + +Uses [kube-prometheus](https://github.com/prometheus-operator/kube-prometheus): Yes + +We're an open source project that builds upon the awesome Prometheus Operator. We run automated playbooks in response to Prometheus alerts and other events in your cluster. For example, you can automatically fetch logs and send them to Slack when a Prometheus alert occurs. All it takes is this YAML: + +```yaml +triggers: + - on_prometheus_alert: + alert_name: KubePodCrashLooping +actions: + - logs_enricher: {} +sinks: + - slack +``` + +## Skyscanner + +[skyscanner.net](https://skyscanner.net/) + +Environment: AWS + +Uses [kube-prometheus](https://github.com/prometheus-operator/kube-prometheus): Yes + +Details (optional): +- HA Pairs of Prometheus +- 25000 samples/s +- 1.2M active series + +## SUSE Rancher + +[suse.com/products/suse-rancher](https://www.suse.com/products/suse-rancher/) + +Environments: RKE, RKE2, K3s, Windows, AWS, Azure, Google Cloud, Bare Metal, etc. + +Uses [kube-prometheus](https://github.com/prometheus-operator/kube-prometheus): Yes + +Rancher Monitoring supports use cases for Prometheus Operator across various different +cluster types and setups that are managed via the Rancher product. All Rancher users that +install Monitoring V2 deploy this chart. + +For more information, please see [how Rancher monitoring works](https://rancher.com/docs/rancher/v2.6/en/monitoring-alerting/how-monitoring-works/). + +The open-source rancher-monitoring Helm chart (based on [kube-prometheus-stack](https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack)) can be found at [rancher/charts](https://github.com/rancher/charts). + +## Trendyol + +[trendyol.com](https://trendyol.com) + +Environments: OpenStack, VMware vCloud + +Uses [kube-prometheus](https://github.com/prometheus-operator/kube-prometheus): Yes + +Details: +- All Kubernetes clusters use one Prometheus Operator instance with remote write enabled +- Prometheus instances push metrics to central H/A VirtualMetric, which gathers all data from clusters in 3 different data centers +- Grafana is used for dashboarding and visualization +- 7.50M samples/s +- 190M active series + +## Veepee + +[veepee.com](https://www.veepee.com) + +Environments: Bare Metal + +Uses [kube-prometheus](https://github.com/prometheus-operator/kube-prometheus): Yes + +Details (optional): +- HA Pair of Prometheus +- 786000 samples/s +- 23.6M active series + +## VSHN AG + +[vshn.ch](https://www.vshn.ch/) + +Environments: AWS, Azure, Google Cloud, cloudscale.ch, Exoscale, Swisscom + +Uses [kube-prometheus](https://github.com/prometheus-operator/kube-prometheus): Yes + +Details (optional): +- A huge fleet of OpenShift and Kubernetes clusters, each using Prometheus Operator +- All managed by [Project Syn](https://syn.tools/), leveraging Commodore Components like [component-rancher-monitoring](https://github.com/projectsyn/component-rancher-monitoring) which re-uses Prometheus Operator + +## Wise + +[wise.com](https://wise.com) + +Environments: Kubernetes, AWS (via some EC2) + +Uses [kube-prometheus](https://github.com/prometheus-operator/kube-prometheus): No + +Details (optional): +- About 30 HA pairs of sharded Promethei across 10 environments, wired together with Thanos +- Operator also helps us seamlessly manage anywhere between 600-1500 short-lived prometheus instances for our "integration" kubernetes cluster. +- ~15mn samples/s +- ~200mn active series + +## + +https://our-link.com/ + +Environments: AWS, Azure, Google Cloud, Bare Metal, etc + +Uses [kube-prometheus](https://github.com/prometheus-operator/kube-prometheus): Yes | No + +Details (optional): +- HA Pair of Prometheus +- 1000 samples/s (query: `rate(prometheus_tsdb_head_samples_appended_total[5m])`) +- 10k active series (query: `prometheus_tsdb_head_series`) diff --git a/otelcollector/otel-allocator/prometheus-operator/CHANGELOG.md b/otelcollector/otel-allocator/prometheus-operator/CHANGELOG.md new file mode 100644 index 000000000..f575f3d9a --- /dev/null +++ b/otelcollector/otel-allocator/prometheus-operator/CHANGELOG.md @@ -0,0 +1,1165 @@ +## 0.66.0 / 2023-06-14 + +After research, we noticed how the default CPU requests of the config-reloader container were too high compared to the effective usage. We decided to decrease the default CPU requests from `100m` to `10m`. For most environments, this won't make a difference but if you need to increase the values, you can use the `-config-reloader-cpu-request` and `-config-reloader-cpu-limit` CLI arguments of the Prometheus operator. + +* [CHANGE] Decrease the default CPU requests for the config-reloader container from `100m` to `10m`. #5539 +* [FEATURE] Add `spec.alertmanagerConfiguration.global.PagerdutyURL` to the `Alertmanager` CRD. #5469 +* [FEATURE] Add `spec.valumeMounts` to the `ThanosRuler` CRD. #5541 +* [FEATURE] Add `spec.remoteWrite.sendNativeHistograms` to `Prometheus` and `PrometheusAgent` CRDs. #5564 +* [FEATURE] Add `spec.tracingConfig` to `Prometheus` and `PrometheusAgent` CRDs. #5591 #5640 +* [FEATURE] Add `followRedirects` field to the `RemoteRead` configuration. #5612 +* [FEATURE] Add `spec.automountServiceAccountToken` to the `Alertmanager` CRD. #5474 +* [FEATURE] Support `keep_firing_for` fields for `PrometheusRule` CRD. #5651 +* [FEATURE] Allow to add custom annotations to all resources managed by the operator. #5626 +* [FEATURE] Add `BasicAuth` and `Authorization` support to `ScrapeConfig` CRD. #5642 +* [ENHANCEMENT] Add `-kubelet-selector` CLI argument to filter the Kubernetes nodes by labels. #5641 +* [BUGFIX] Fix bug with logs that don't end with new line(`\n`) characters. #5566 +* [BUGFIX] Fix Prometheus and Alertmanager not picking up the web server's certificate after renewal. #5535 +* [BUGFIX] Fix config-reloader not handling SIGTERM signal. #5617 +* [BUGFIX] Fix Thanos volume name when using VolumeClaimTemplate in `Prometheus` CRD. #5596 +* [BUGFIX] Fix WAL Compression configuration for `PrometheusAgent` CRD. #5625 +* [BUGFIX] FiX DNS name resolution for individual ThanosRuler pods. #5632 + +## 0.65.2 / 2023-05-31 + +* [BUGFIX] Fix relabeling issue in `ScrapeConfig` CRD. #5611 + +## 0.65.1 / 2023-05-05 + +* [BUGFIX] Fix panic when ScrapeConfig CRD is not installed. #5550 + +## 0.65.0 / 2023-05-04 + +The main change introduced by this release is the new v1alpha1 `ScrapeConfig` CRD. +This implements the [proposal](https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/proposals/202212-scrape-config.md) +documented in [#5279](https://github.com/prometheus-operator/prometheus-operator/pull/5279) +and provides a Kubernetes native API to create and manage additional scrape configurations. + +To try it, follow the following steps: +1. Install the new CRD in the cluster (see + `example/prometheus-operator-crd/monitoring.coreos.com_scrapeconfigs.yaml`). +2. Update the Prometheus operator's RBAC permissions to manage `ScrapeConfig` resources + (see `example/rbac/prometheus-operator/prometheus-operator-cluster-role.yaml`). + +**NOTE**: if these conditions aren't met, the operator will start but it won't +be able to reconcile the `ScrapeConfig` resources. + +* [FEATURE] Add the `status` subresource for the `ThanosRuler` CRD. #5520 +* [FEATURE] Add `spec.web.timeout` and `spec.web.getConcurrency` to the `Alertmanager` CRD. #5478 +* [FEATURE] Add `spec.groups[].limit` to the `Prometheus` CRD. #4999 +* [FEATURE] Add ScrapeConfig CRD. #5335 +* [ENHANCEMENT] Set a default for `seccompProfile` on the operator and webhook Deployments to `RuntimeDefault`. #5477 +* [ENHANCEMENT] Add optional liveness and readiness probes to `prometheus-config-reloader`. This can be enabled via the `--enable-config-reloader-probes` CLI flag. #5449 +* [BUGFIX] Don't start the `PrometheusAgent` controller if the CRD isn't present or the operator lacks permissions. #5476 +* [BUGFIX] Declare `spec.rules` optional in `PrometheusRule` CRD. #5481 +* [BUGFIX] Fix incorrect metric counter value for failed sync status. #5533 + +## 0.64.1 / 2023-04-24 + +* [BUGFIX] Fix panic when scraping `/metrics` with PrometheusAgent resources declared. #5511 + +## 0.64.0 / 2023-03-29 + +This release provides first-class support for running Prometheus in agent mode +with the new `PrometheusAgent` CRD. As the v1alpha1 version tells it, we don't +recommend using it in production but we're eager to hear all possible feedback. + +To try it, follow the following steps: +1. Install the new CRD in the cluster (see + `example/prometheus-operator-crd/monitoring.coreos.com_prometheusagents.yaml`). +2. Update the Prometheus operator's RBAC permissions to manage PrometheusAgents resources + (see `example/rbac/prometheus-operator/prometheus-operator-cluster-role.yaml`). + +**NOTE**: if these conditions aren't met, the operator will start but it won't +be able to reconcile the PrometheusAgent resources. + +For the first time, the container images associated to this release are signed +using [sigstore](https://www.sigstore.dev/). + +* [CHANGE] Remove the `/apis` endpoints from the operator's web server. #5396 +* [CHANGE] Set default default value of `spec.portName` to `web`. #5350 +* [FEATURE] Add v1alpha1 `PrometheusAgent` CRD to run Prometheus in agent mode. #5385 +* [FEATURE] Add `--reload-timeout` argument to the config-reloader binary which controls how long the program will wait for the reload operation to complete (default: 30s). #5349 +* [ENHANCEMENT] Set web server's `ReadTimeout` and `ReadHeaderTimeout` to 30s for Prometheus operator and config-reloader to avoid potential slowloris attacks. #5340 +* [ENHANCEMENT] Add support for `DropEqual` and `KeepEqual` relabeling actions. #5368 +* [ENHANCEMENT] Drop invalid `PrometheusRule` objects instead of failing the reconciliation of Prometheus and ThanosRuler objects. #5221 +* [ENHANCEMENT] Add `spec.thanos.blockSize` field to the `Prometheus` CRD. #5360 +* [ENHANCEMENT] Add `spec.thanos.configTimeout` and `spec.thanos.configInterval` to the Prometheus CRD. #5399 +* [ENHANCEMENT] Add `spec.alertmanagerConfiguration.global.slackApiUrl` field to the `Alertmanager` CRD. #5383 +* [ENHANCEMENT] Add `spec.alertmanagerConfiguration.global.opsGenieApiUrl` and `spec.alertmanagerConfiguration.global.opsGenieApiKey` fields to the `Alertmanager` CRD. #5422 +* [ENHANCEMENT] Reduce the operator's memory usage by using metadata informers for Kubernetes secrets and configmaps. #5424 #5448 +* [BUGFIX] Add `init-config-reloader` init container to avoid a restart of the Alertmanager's `config-reloader` container when the pod starts. #5358 + +## 0.63.0 / 2023-02-08 + +* [CHANGE] Use `tmpfs` to store `Prometheus` and `Alertmanager` configuration. #5311 +* [FEATURE] Add `status` subresource to the `Alertmanager` CRD. #5270 +* [FEATURE] Add `spec.additionalArgs` to the `ThanosRuler` CRD. #5293 +* [ENHANCEMENT] Add `spec.web.maxConnections` to the `Prometheus` CRD. #5175 +* [BUGFIX] Fix unsupported types in Alertmanager route sanitizer log lines. #5296 +* [BUGFIX] Fix `ThanosRuler` StatefulSet re-creation bug when labels are specified. #5318 + +## 0.62.0 / 2023-01-04 + +* [CHANGE] Use `spec.version` of the Prometheus object as the image's tag if the image name is untagged. #5171 +* [FEATURE] Generate "apply configuration" types. #5243 +* [FEATURE] Add `spec.podTargetLabels` field to the Prometheus CRD for adding pod target labels to every PodMonitor/ServiceMonitor. #5206 +* [FEATURE] Add `spec.version` field to the ThanosRuler CRD. #5177 +* [ENHANCEMENT] Add `basicAuth` field to the Prometheus CRD for alerting configuration of Prometheus. #5170 +* [ENHANCEMENT] Add `spec.imagePullPolicy` to Prometheus, Alertmanager and ThanosRuler CRDs. #5203 +* [ENHANCEMENT] Add `activeTimeIntervals` field to AlertmanagerConfig CRD. #5198 +* [ENHANCEMENT] Support `time_intervals` and `active_time_intervals` in the Alertmanager configurations. #5135 +* [ENHANCEMENT] Support new fields in the Alertmanager v0.25.0 configuration. #5254 #5263 + +## 0.61.1 / 2022-11-24 + +* [BUGFIX] Fixed a regression that caused the ThanosRuler statefulsets to be stuck after upgrading the operator to v0.61.0. #5183 + +## 0.61.0 / 2022-11-16 + +* [CHANGE] Updated `RuleGroup` description and add validation for the CRD. #5072 +* [CHANGE] Removed validations in the operator that are already covered at the CRD level. #5108 +* [CHANGE] jsonnet: Enforced existence of the TLS secret for the admission webhook deployment. #5112 +* [CHANGE] jsonnet: Changed default port of the admission webhook service from 8443 to 443. #5112 +* [CHANGE] Added a filter for non-running pods in the `ServiceMonitor` CRD. #5149 +* [FEATURE] Added `spec.attachMetadata.node` in the `ServiceMonitor` CRD. #5147 +* [ENHANCEMENT] Updated `ProbeTLSConfig` and `SafeTLSConfig` description. #5081 +* [ENHANCEMENT] Updated admission webhook deployment's jsonnet to avoid down-time on updates. #5099 +* [ENHANCEMENT] Added the `filterExternalLabels` field to the remote read configuration of the `Prometheus` CRD. #5142 +* [ENHANCEMENT] Added `enableHttp2` field to `AlertingEndpoints` #5152 +* [ENHANCEMENT] Updated `ThanosRuler` arguments (`QueryConfig`, `AlertManagerConfig`, `ObjectStorageConfig` and `TracingConfig`) to be directly read from secrets instead of using ENV vars. #5122 +* [ENHANCEMENT] Add `alertmanagerConfigMatcherStrategy` to `Alertmanager` CRD in order to disable auto-generated namespace matchers. #5084 +* [BUGFIX] Ignore `PartialResponseStrategy` in the `Prometheus` CRD. This field is only applicable for the Thanos Ruler. #5125 + +## 0.60.1 / 2022-10-10 + +* [BUGFIX] Fixed configuration when `spec.tsdb.outOfOrderTimeWindow` is set in the Prometheus CRD. #5078 + +## 0.60.0 / 2022-10-06 + +* [CHANGE] Added `filterRunning` field to the PodMonitor CRD. By default, non-running pods are dropped by the Prometheus service discovery. To preserve the old behavior and keep pods which aren't running, set `filterRunning: false`. #5049 +* [FEATURE] Added `grpcListenLocal` and `httpListenLocal` fields to the Thanos sidecar configuration of the Prometheus CRD. #5045 +* [FEATURE] Added `hostNetwork` field to the Prometheus CRD. #5010 +* [FEATURE] Added `spec.tsdb.outOfOrderTimeWindow` field to the Prometheus CRD to allow out-of-order samples in TSDB. #5071 +* [ENHANCEMENT] Added columns showing the Prometheus conditions to the output of `kubectl get prometheus`. #5055 +* [ENHANCEMENT] Added `observedGeneration` field to the Prometheus status conditions. #5005 + +## 0.59.2 / 2022-09-20 + +* [CHANGE/BUGFIX] Removed `FOWNER` capability from the Thanos sidecar. #5030 + +## 0.59.1 / 2022-09-12 + +* [BUGFIX] Fixed secret and configmap volume names that need to be mounted in additional containers. #5000 +* [BUGFIX] Removed `CAP_FOWNER` capability for the Thanos sidecar when not required. #5004 +* [BUGFIX] Removed the `CAP_` prefix of the `FOWNER` capability on Thanos sidecar. #5014 + +## 0.59.0 / 2022-09-02 + +* [FEATURE] Added validations for timeout and time settings of alertmanager at CRD level. #4898 +* [FEATURE] Added support for global `resolveTimeout` and `httpConfig` in Alertmanager CRD. #4622 +* [FEATURE] Added support for `additionalArgs` field to the Prometheus CRD for Prometheus, Alertmanager and Thanos sidecar. #4863 +* [ENHANCEMENT] Added `tracingConfigFile` option to ThanosRuler CRD. #4962 +* [BUGFIX] Fixed compress alertmanager secret to circumvent maximum size limit of 1048576 bytes. #4906 +* [BUGFIX] Fixed namespace enforcement exclusion on newly created Prometheus objects. #4915 +* [BUGFIX] Fixed `CAP_FOWNER` capability to Thanos sidecar container. #4931 +* [BUGFIX] Fixed `spec.query.maxSamples` and `spec.query.maxConcurrency` fields of Prometheus CRD. #4951 +* [BUGFIX] Fixed Thanos sidecar connectivity issue when Prometheus TLS is enabled. #4954 +* [BUGFIX] Fixed Prometheus and Alertmanager Pods not created when Secret name exceeds 63 characters. #4988 + +## 0.58.0 / 2022-07-19 + +* [FEATURE] Add validations for timeout and time settings of alertmanager at CRD level. #4827, #4881 +* [FEATURE] Extend the PrometheusSpec to allow to configure the `max_exemplars`. #4834 +* [FEATURE] Add support for web TLS configuration for Alertmanager CRD. #4868 +* [ENHANCEMENT] Add support for `uppercase`, `lowercase`, and `CamelCase` relabel actions. #4840, #4873 +* [ENHANCEMENT] Added support for `enable_http2` in endpoint scrape configuration. #4836 +* [BUGFIX] Fixed missing conversion of the `followRedirects` field in HTTP configuration for AlertmanagerConfig v1beta1. #4854 +* [BUGFIX] fix AlertmanagerConfig.Spec.Route nil panic. #4853 +* [BUGFIX] Optimise warning log message during sanitization of OpsGenie configuration. #4833 + +## 0.57.0 / 2022-06-02 + +The main change introduced by this release is a new v1beta1 API version for the +AlertmanagerConfig CRD. + +Changes compared to the v1alpha1 API: +* Renamed `spec.muteTimeIntervals` field to `to spec.timeIntervals`. +* Removed `regex` field from the `Matcher` type. +* Replaced all `v1.SecretKeySelector` types by the `SecretKeySelector` type + * Removed `optional` field. + * `name` and `key` fields are required. + +As a pre-requisite, you need to deploy the admission webhook and configure the +conversion webhook in the AlertmanagerConfig CRD object so that users can use +both v1alpha1 and v1beta1 versions at the same time. There are more details in +`Documentation/user-guides/webhook.md` about the webhook configuration. + +Because of the conversion webhook requirement, the new version is an opt-in +feature: the `bundle.yaml` file and the manifests from +`example/prometheus-operator-crd` don't deploy the new API version (the +manifests to enable the v1beta1 version are under the +`example/prometheus-operator-crd-full` directory). We will wait until v0.59.0 +(at least) before enabling the new API version by default. + +* [CHANGE] Added validations at the API level for the time-based fields of the ThanosRuler CRD. #4815 +* [CHANGE] Added validations at the API level for the OpsGenie's `responders` field of the AlertmanagerConfig CRD. #4725 +* [FEATURE] Added v1beta1 version for AlertmanagerConfig CRD. #4709 +* [FEATURE] Added support for Telegram receiver in the AlertmanagerConfig CRD. #4726 +* [FEATURE] Added `updateAlerts` field to the OpsGenie configuration of the AlertmanagerConfig CRD. #4726 +* [FEATURE] Added `hostAliases` field to the the Alertmanager, Prometheus and ThanosRuler CRDs. #4787 +* [ENHANCEMENT] Added configuration option in the jsonnet mixins to specify the aggregation labels. #4814 +* [ENHANCEMENT] Added `attachMetadata` field to the PodMonitor CRD. #4792 +* [BUGFIX] Fixed the curl command for exec probes when `listenLocal` is set to true in the Prometheus object. It avoids temporary service outage due to long WAL replays. #4804 + +## 0.56.3 / 2022-05-23 + +* [BUGFIX] Fixed errors for Alertmanager configurations using the new `entity`, `actions` and `opsgenie_api_key_file` fields. #4797 +* [BUGFIX] Fixed high CPU usage by reducing the number of number of reconciliations on Prometheus objects. #4798 #4806 + +## 0.56.2 / 2022-05-09 + +* [BUGFIX] Fix StatefulSet spec's generation to be determistic when `spec.containers` is not empty. #4772 + +## 0.56.1 / 2022-05-03 + +* [BUGFIX] Avoid unnecessary updates of the Prometheus StatefulSet object. #4762 + +## 0.56.0 / 2022-04-20 + +* [CHANGE] Added validation at the API level for size-based fields of the Prometheus CRD. #4661 +* [CHANGE] Added validation at the API level for log level and format fields of the Alertmanager, Prometheus and ThanosRuler CRDs. #4638 +* [CHANGE] Added validation at the API level for duration and time-based fields of the Prometheus CRD. #4684 +* [CHANGE] Added shortnames for custom resources (`amcfg` for AlertmanagerConfig, `am` for Alertmanager, `pmon` for PodMonitor, `prb` for Probe, `prom` for Prometheus, `smon` for ServiceMonitor, `ruler` for Thanos Ruler). #4680 +* [FEATURE] Added `status` subresource to the Prometheus CRD. #4580 +* [ENHANCEMENT] Added `excludedFromEnforce` field to the Prometheus CRD. It allows to define PodMonitor, ServiceMonitor, Probe or PrometheusRule objects for which the namespace label enforcement (if enabled) should not be applied. This deprecates `prometheusRulesExcludedFromEnforce` which is still supported but users are encouraged to migrate to the new field. #4397 +* [ENHANCEMENT] Added `enableRemoteWriteReceiver` field to the Prometheus CRD. #4633 +* [ENHANCEMENT] Added `entity` and `actions` fields for the OpsGenie receiver to the AlertmanagerConfig CRD. #4697 +* [ENHANCEMENT] Added `prometheus_operator_reconcile_duration_seconds` histogram metric. #4706 +* [BUGFIX] Added support for `opsgenie_api_key_file` and `api_key_file` in the generated Alertmanager configuration. #4666 #4738 + +## 0.55.1 / 2022-03-26 + +* [BUGFIX] Fixed Prometheus configuration when `spec.queryLogFile` has no path ("query.log" for instance). #4683 + +## 0.55.0 / 2022-03-09 + +* [CHANGE] Enabled read-only root filesystem for containers generated from the Prometheus, Alertmanager and ThanosRuler objects. #4552 +* [CHANGE] Disabled privilege escalation for the containers generated from Prometheus, Alertmanager and ThanosRuler objects. #4552 +* [CHANGE] Dropped all capabilities for the containers generated from Prometheus, Alertmanager and ThanosRuler objects. #4552 +* [CHANGE] Added `emptyDir` volume to the Prometheus statefulset when `spec.queryLogFile` is only a base filename (e.g. `query.log` as opposed to `/tmp/query.log`). When the path contains a full path, a volume + volume mount should be explicitly given in the Prometheus spec since the root file system is now read-only. #4566 +* [CHANGE/BUGFIX] Added skip TLS verify for the config-reloader HTTP client when informing Prometheus/Alertmanager on a config reload (partial fix for #4273). #4592 +* [CHANGE] Switched using the `endpointslice` role for Prometheus by default if it is supported by the Kubernetes API. #4535 +* [FEATURE] Added standalone admission webhook. #4494 +* [FEATURE] Support the definition of Alertmanager configuration via AlertManagerConfig instead of Kubernetes secret (EXPERIMENTAL). #4220 +* [FEATURE] Support sharding for Probe objects. #4587 +* [ENHANCEMENT] Restore Prometheus StatefulSet liveness probe so that deadlocks are detected and recovered from. #4387, #4534 +* [ENHANCEMENT] Added `-alertmanager-config-namespaces` CLI flag to the operator. #4455, #4619 +* [ENHANCEMENT] `remoteWrite` and `remoteRead` fields of the Prometheus CRD not considered experimental anymore. #4555 +* [ENHANCEMENT] Added support for follow_redirects in endpoint scrape configuration. #4563 +* [ENHANCEMENT] Added support for Oauth2 in AlertmanagerConfig CRD. #4501 +* [ENHANCEMENT] Improved logging when the given Prometheus version doesn't support some CR fields. #4571 +* [ENHANCEMENT] Added `__tmp_ingress_address` label to preserve the initial host address of the ingress object. #4603 +* [ENHANCEMENT] Fixed potential name collisions in Alertmanager configuration when merging AlertmanagerConfig objects. #4626 +* [BUGFIX] Fixed panic when validating `Probe`. #4541 +* [BUGFIX] Added validation for sourceLabels in relabel configuration. #4568 +* [BUGFIX] Allow retention to be set only by size. #4590 + +## 0.54.1 / 2022-02-24 + +* [BUGFIX] Updated relabelConfig validation to accept Prometheus default config on labeldrop relabelConfig. #4579 +* [BUGFIX] Fixed relabelConfigs for labelmap action. #4574 + +## 0.54.0 / 2022-01-26 + +* [FEATURE] Support SNS Receiver in AlertmanagerConfig CR. #4468 +* [ENHANCEMENT] Specify SA token automounting on pod-level for operator and prometheus operand. #4514 +* [ENHANCEMENT] Support following redirects and Oauth2 in HTTP Client config in raw alertmanager config secret. #4499 +* [ENHANCEMENT] Add Replicas column for Thanos Ruler. #4496 +* [ENHANCEMENT] Set User-Agent for the kubernetes client. #4506 +* [BUGFIX] Avoid race during recreation of StatefulSet(s). #4504 +* [BUGFIX] Add validation for proberSpec `url` field in `ProbeSpec`. #4483 +* [BUGFIX] Add validation for relabel configs. #4429 +* [BUGFIX] Add validation for scrapeTimeout validation. #4491 + +## 0.53.1 / 2021-12-20 + +* [BUGFIX] Fixed the validation pattern for the `february` month in the AlertManagerConfig CRD. #4458 + +## 0.53.0 / 2021-12-16 + +* [CHANGE] Added startup probe to Prometheus. #4433 #4369 +* [FEATURE] Added support for mute time intervals in the AlertManagerConfig CRD. #4388 +* [FEATURE] Added support for new matching syntax in the routes configuration of the AlertmanagerConfig CRD. #4332 +* [FEATURE] Added support for new matching syntax in the inhibit rules configuration of the AlertmanagerConfig CRD. #4329 +* [FEATURE] Added `headers` in the Remote Read configuration of the Prometheus CRD. #4323 +* [FEATURE] Added `retryOnRateLimit` in the Remote Write configuration of the Prometheus CRD. #4420 +* [FEATURE] Added support for PagerDuty links and images in the AlertManagerConfig CR. #4425 +* [ENHANCEMENT] Optimized the generated Prometheus configuration to make it compatible with the new Prometheus agent mode. #4417 +* [BUGFIX] Improved validation for the Alertmanager CRD to match with upstream Alertmanager. #4434 +* [BUGFIX] Fixed propagation of annotations from spec.podMetadata to the StatefulSet's pods. #4422 +* [BUGFIX] Ensured that `group_by` values are unique in the generated Alertmanager configuration. #4413 +* [BUGFIX] Fixed generated secrets being larger than the maximum size limit of 1048576 bytes. #4427 #4449 + +## 0.52.1 / 2021-11-16 + +* [BUGFIX] Fixed regex in relabel_configs. #4395 + +## 0.52.0 / 2021-11-03 + +* [CHANGE] Extend sharding capabilities to `additionalScrapeConfigs`. #4324 +* [CHANGE] Remove `app` label from Prometheus, Alertmanager and Thanos Ruler statefulsets/pods. #4350 +* [FEATURE] Add `alertRelabelConfigs` field to the Thanos Ruler CRD for configuring Prometheus alert relabeling features. #4303 +* [FEATURE] Add support for updated matching syntax in Alertmanager's raw config for `inhibit_rules` and `route`. #4307, #4309 +* [FEATURE] Add validating webhook for AlertManagerConfig. #4338 +* [FEATURE] Adds support for Sigv4 when configuring RemoteWrite. #3994 +* [ENHANCEMENT] Add "generic ephemeral storage" as a data storage option for Alertmanager, Prometheus and Thanos Ruler. #4326 +* [ENHANCEMENT] Improve docs and error message for "smarthost" field. #4299 +* [ENHANCEMENT] Add alerts for config reloader sidecars. #4294 +* [ENHANCEMENT] Add validations for duration and size fields for Prometheus, Alertmanager, and Thanos Ruler resources #4308, #4352 +* [ENHANCEMENT] Add s390x support to docker images. #4351 +* [ENHANCEMENT] Only load alertmanager configuration when writing configuration. #4333 +* [BUGFIX] Fix `matchLabels` selector to have empty label values in ServiceMonitor, PodMonitor, and Probe. #4327 +* [BUGFIX] Prevent rule file name collision. #4347 +* [BUGFIX] Update native kubernetes fields used in prometheus-operator CRDs. #4221 + +## 0.51.2 / 2021-10-04 + +* [BUGFIX] Validated the value of the `EnforcedBodySizeLimit` field to avoid Prometheus crash. #4285 + +## 0.51.1 / 2021-09-27 + +No change since v0.51.0. + +*The CI automation failed to build the v0.51.0 images so we had to create a new patch release.* + +## 0.51.0 / 2021-09-24 + +* [FEATURE] Added `metricRelabelings` field to the Probe CRD for configuring the metric relabel configs. #4226 +* [FEATURE] Added `volumeMounts` field to the Prometheus CRD for configuring the volume mounts of the thanos-sidecar container. #4238 +* [FEATURE] Added `enforcedBodySizeLimit` field to the Prometheus CRD. #4275 +* [FEATURE] Added `authorization` field to all HTTP configurations in the AlertmanagerConfig CRD. #4110 +* [FEATURE] Added `minReadySeconds` field to AlertManager, Prometheus and ThanosRuler CRDs. #4246 +* [FEATURE] Added support for Slack webhook URL via file path in the Alertmanager configuration secret. #4234 +* [FEATURE] Added support the `authorization` field for all HTTP configurations in the Alertmanager configuration secret. #4234 +* [ENHANCEMENT] Improved detection and rollback of manual changes to Alertmanager statefulsets. #4228 +* [BUGFIX] Invalid probes are discarded instead of stopping after the first error when reconciling probes. #4248 +* [BUGFIX] Empty basic auth username is allowed in the AlertmanagerConfig CRD. #4260 +* [BUGFIX] Update conflicts for secrets are handled properly which avoids overwriting user-defined metadata. #4235 +* [BUGFIX] The namespace label is always enforced with metricRelabelConfigs. #4272 + +## 0.50.0 / 2021-08-17 + +* [CHANGE] Remove deprecated flags `--config-reloader-memory` and `--config-reloader-cpu` in favor of `--config-reloader-memory-limit`, `--config-reloader-memory-request`, `--config-reloader-cpu-limit`, and `--config-reloader-cpu-request`. #3884 +* [CHANGE] Remove use of Kubernetes API versions being removed in v1.22. #4171 +* [FEATURE] Added support for OAuth2 authentication in remote read and remote write configuration. #4113 +* [FEATURE] Added OAuth2 configuration for ServiceMonitor, PodMonitor and Probe. #4170 +* [FEATURE] Added `prometheus_operator_spec_shards` metric for exposing the number of shards set on prometheus operator spec. #4173 +* [FEATURE] Support for `Authorization` section in various prometheus sections. #4180 +* [FEATURE] Validate prometheus rules when generating rule file content. #4184 +* [FEATURE] Support `label_limit`, `label_name_length_limit` and `label_value_length_limit` configuration fields at the Prometheus CRD level as well as support individual limits per ServiceMonitor, PodMonitor and Probe resources. #4195 +* [FEATURE] Added sample and target limits to Probe. #4207 +* [FEATURE] Added `send_exemplars` field to the `remote_write` configuration in Prometheus. #4215 #4160 +* [ENHANCEMENT] Support loading ClusterConfig from concatenated KUBECONFIG env. #4154 +* [ENHANCEMENT] Include PrometheusRule in prometheus-operator CRD category. #4213 +* [ENHANCEMENT] Preserve annotations set by kubectl. #4185 +* [BUGFIX] Thanos: listen to all available IP addresses instead of `POD_IP`, simplifies istio management. #4038 +* [BUGFIX] Add port name mapping to ConfigReloader to avoid reloader-web probe failure. #4187 +* [BUGFIX] Handle Thanos rules `partial_response_strategy` field in validating admission webhook. #4217 + +## 0.49.0 / 2021-07-06 + +* [CHANGE] Flag "storage.tsdb.no-lockfile" will now default to false. #4066 +* [CHANGE] Remove `app.kubernetes.io/version` label selector from Prometheus and Alertmanager statefulsets. #4093 +* [CHANGE] Exit if the informers cache synchronization doesn't complete after 10 minutes. #4143, #4149 +* [FEATURE] Added web TLS configuration support for Prometheus. #4025 +* [FEATURE] Add proxy_url support for Probes. #4043 +* [ENHANCEMENT] Set proper build context in version package. #4019 +* [ENHANCEMENT] Publish images on GitHub Container Registry. #4060 +* [ENHANCEMENT] Automatically generate document for operator executable. #4112 +* [ENHANCEMENT] Adds configuration to set the Prometheus ready timeout to Thanos sidecar #4118 +* [BUGFIX] Fixed bug in Alertmanager config where URLS that are taken from Kubernetes secrets might contain whitespace or newline characters. #4068 +* [BUGFIX] Generate correct scraping configuration for Probes with empty or unset `module` parameter. #4074 +* [BUGFIX] Operator does not generate `max_retries` option in `remote_write` for Prometheus version 2.11.0 and higher. #4103 +* [BUGFIX] Preserve the dual-stack immutable fields on service sync. #4119 + +## 0.48.1 / 2021-06-01 + +* [BUGFIX] Added an `app` label on Prometheus pods. #4055 + +## 0.48.0 / 2021-05-19 + +Deprecation notice: +app labels will be removed in v0.50. + +* [CHANGE] Replace app label names with app.kubernetes.io/name. #3939 +* [CHANGE] Drop ksonnet as a dependency in jsonnetfile.json. #4002 +* [ENHANCEMENT] Add default container annotation to Alertmanager pod. #3978 +* [ENHANCEMENT] Add default container annotation to Thanos ruler pod. #3981 +* [ENHANCEMENT] Optimize asset secret update logic. #3986 +* [ENHANCEMENT] jsonnet: set default container in prometheus-operator pod. #3979 +* [BUGFIX] Watch configmaps from the Prometheus allowed namespaces only. #3992 +* [BUGFIX] Reconcile resources on namespace updates when using privileged lister/watcher. #3879 +* [BUGFIX] Don't generate broken Alertmanager configuration when `http_config` is defined in the global parameters. #4041 + +## 0.47.1 / 2021-04-30 + +* [BUGFIX] Avoid reconciliations for Alertmanager statefulset on resource version changes. #3948 + +## 0.47.0 / 2021-04-13 + +The `--config-reloader-cpu` and `--config-reloader-memory` flags are deprecated +and will be removed in v0.49.0. They are replaced respectively by the +`--config-reloader-cpu-request`/`--config-reloader-cpu-limit` and +`config-reloader-memory-request`/`config-reloader-memory-limit` flags. + +* [FEATURE] Add `enableFeatures` field to the Prometheus CRD for enabling feature flags. #3878 +* [FEATURE] Add `metadataConfig` field to the Prometheus CRD for configuring how remote-write sends metadata information. #3915 +* [FEATURE] Add support for TLS and authentication configuration to the Probe CRD. #3876 +* [ENHANCEMENT] Allow CPU requests/limits and memory requests/limits of the config reloader to be set independently. #3826 +* [ENHANCEMENT] Add rules validation to `po-lint`. #3894 +* [ENHANCEMENT] Add common Kubernetes labels to statefulset objects managed by the Prometheus operator. #3841 +* [ENHANCEMENT] Avoid unneeded synchronizations on Alertmanager updates. #3943 +* [ENHANCEMENT] Retain the original job's name `__tmp_prometheus_job_name label` in the generated scrape configurations. #3828 +* [BUGFIX] Fix `app.kubernetes.io/managed-by` label on kubelet endpoint object. #3902 +* [BUGFIX] Avoid name collisions in the generated Prometheus configuration. #3913 +* [BUGFIX] Restore `prometheus_operator_spec_replicas` metrics for Alertmanager and Thanos Ruler controllers. #3924 +* [BUGFIX] Allow `smtp_require_tls` to be false in Alertmanager configuration. #3960 + +## 0.46.0 / 2021-02-24 + +* [CHANGE] Drop support for Prometheus 1.x #2822 +* [FEATURE] Add relabelingConfigs to ProbeTargetStaticConfig #3817 +* [ENHANCEMENT] Add custom HTTP headers in remoteWrite-config #3851 +* [ENHANCEMENT] CRDs are now part of prometheus-operator group allowing `kubectl get prometheus-operator` operation #3843 +* [ENHANCEMENT] Support app.kubernetes.io/managed-by label to kubelet service and endpoint objects. #3834 +* [BUGFIX] Fix the loss of the `headers` key in AlertmanagerConfig. #3856 +* [BUGFIX] Preserve user-added labels and annotations on Service, Endpoint and StatefulSet resources managed by the operator. #3810 +* [BUGFIX] Do not require child routes in AlertmanagerConfig to have a receiver. #3749 + +## 0.45.0 / 2021-01-13 + +* [CHANGE] Add schema validations to AlertmanagerConfig CRD. #3742 +* [CHANGE] Refactored jsonnet library to remove ksonnet and align with kube-prometheus #3781 +* [ENHANCEMENT] Add `app.kubernetes.io/name` label to Kubelet Service/Endpoints object. #3768 +* [ENHANCEMENT] Improve HTTP server's logging #3772 +* [ENHANCEMENT] Add namespace label to static probe metrics #3752 +* [ENHANCEMENT] Add `TracingConfigFile` field into thanos configuration. #3762 +* [BUGFIX] Fix log messages when syncing node endpoints. #3758 +* [BUGFIX] fix discovery of `AlertmanagerConfig` resources when `--alertmanager-instance-namespaces` is defined. #3759 + +## 0.44.1 / 2020-12-09 + +* [BUGFIX] Fix Alertmanager configuration for OpsGenie receiver. #3728 + +## 0.44.0 / 2020-12-02 + +* [CHANGE] Fix child routes support in AlertmanagerConfig. #3703 +* [FEATURE] Add Slack receiver type to AlertmanagerConfig CRD. #3618 +* [FEATURE] Add WeChat receiver type to AlertmanagerConfig CRD. #3619 +* [FEATURE] Add Email receiver type to AlertmanagerConfig CRD. #3692 +* [FEATURE] Add Pushover receiver type to AlertmanagerConfig CRD. #3697 +* [FEATURE] Add VictorOps receiver type to AlertmanagerConfig CRD. #3701 +* [FEATURE] Add sharding support for prometheus cluster. #3241 +* [ENHANCEMENT] Add option to allow configuring object storage for Thanos. #3668 +* [ENHANCEMENT] Add TLS support for remote read. #3714 +* [ENHANCEMENT] Include EnforcedSampleLimit as a metric. #3617 +* [ENHANCEMENT] Adjust config reloader memory requests and limits. #3660 +* [ENHANCEMENT] Add `clusterGossipInterval`, `clusterPushpullInterval` and `clusterPeerTimeout` fields to Alertmanager CRD. #3663 +* [BUGFIX] Handle all possible receiver types in AlertmanagerConfig. #3689 +* [BUGFIX] Fix operator crashing on empty Probe targets. #3637 +* [BUGFIX] Fix usage of `--prometheus-default-base-image`, `--alertmanager-default-base-image`, and `--thanos-default-base-image` flags. #3642 +* [BUGFIX] Fix matching labels with empty values when using Exists/NotExists operators. #3686 + +## 0.43.2 / 2020-11-06 + +* [BUGFIX] Fix issue with additional data from the Alertmanager config's secret not being kept. #3647 + +## 0.43.1 / 2020-11-04 + +* [BUGFIX] Fix Alertmanager controller to wait for all informers to be synced before reconciling. #3641 + +## 0.43.0 / 2020-10-26 + +This release introduces a new `AlertmanagerConfig` CRD that allows to split the +Alertmanager configuration in different objects. For now the CRD only supports +the PagerDuty, OpsGenie and webhook receivers, [other +integrations](https://github.com/prometheus-operator/prometheus-operator/issues?q=is%3Aissue+is%3Aopen+%22receiver+type%22) +will follow in future releases of the operator. The current version of the CRD +is `v1alpha1` meaning that testing/feedback is encouraged and welcome but the +feature is not yet considered stable and the API is subject to change in the +future. + +* [CHANGE] Use a single reloader sidecar (instead of 2) for Prometheus. The `--config-reloader-image` flag is deprecated and will be removed in a future release (not before v0.45.0). *Make sure to start the operator with a version of `--prometheus-config-reloader` that is at least `v0.43.0` otherwise the Prometheus pods will fail to start.* #3457 +* [FEATURE] Add `targetLimit` and `enforcedTargetLimit` to the Prometheus CRD. #3571 +* [FEATURE] Add initial support for `AlertmanagerConfig` CRD. #3451 +* [FEATURE] Add support for Pod Topology Spread Constraints to Prometheus, Alertmanager, and ThanosRuler CRDs. #3598 +* [ENHANCEMENT] Allow customization of the Prometheus web page title. #3525 +* [ENHANCEMENT] Add metrics for selected/rejected resources and synchronization status. #3421 +* [ENHANCEMENT] Configure Thanos sidecar for uploads only when needed. #3485 +* [ENHANCEMENT] Add `--version` flag to all binaries + `prometheus_operator_build_info` metric. #359 +* [ENHANCEMENT] Add `prometheus_operator_prometheus_enforced_sample_limit` metric. #3617 +* [BUGFIX] Remove liveness probes to avoid killing Prometheus during the replay of the WAL. #3502 +* [BUGFIX] Fix `spec.ipFamily: Invalid value: "null": field is immutable` error when updating governing services. #3526 +* [BUGFIX] Generate more unique job names for Probes. #3481 +* [BUGFIX] Don't block when the operator is configured to watch namespaces that don't exist yet. #3545 +* [BUGFIX] Use `exec` in readiness probes to reduce the chance of leaking zombie processes. #3567 +* [BUGFIX] Fix broken AdmissionReview. #3574 +* [BUGFIX] Fix reconciliation when 2 resources share the same secret. #3590 +* [BUGFIX] Discard invalid TLS configurations. #3578 + +## 0.42.1 / 2020-09-21 + +* [BUGFIX] Bump client-go to fix watch bug + +## 0.42.0 / 2020-09-09 + +The Prometheus Operator now lives in its own independent GitHub organization. + +We have also added a governance (#3398). + +* [FEATURE] Move API types out into their own module (#3395) +* [FEATURE] Create a monitoring mixin for prometheus-operator (#3333) +* [ENHANCEMENT] Remove multilistwatcher and denylistfilter (#3440) +* [ENHANCEMENT] Instrument client-go requests (#3465) +* [ENHANCEMENT] pkg/prometheus: skip invalid service monitors (#3445) +* [ENHANCEMENT] pkg/alertmanager: Use lower value for --cluster.reconnect-timeout (#3436) +* [ENHANCEMENT] pkg/alertmanager: cleanup resources via OwnerReferences (#3423) +* [ENHANCEMENT] Add prometheus_operator_reconcile_operations_total metric (#3415) +* [ENHANCEMENT] pkg/operator/image.go: Adjust image path building (#3392) +* [ENHANCEMENT] Specify timeouts per Alertmanager target when sending alerts. (#3385) +* [ENHANCEMENT] Push container images to Quay into coreos and prometheus-operator orgs (#3390) +* [ENHANCEMENT] Run single replica Alertmanager in HA cluster mode (#3382) +* [BUGFIX] Fix validation logic for SecretOrConfigMap (#3413) +* [BUGFIX] Don't overwrite __param_target (#3377) + +## 0.41.1 / 2020-08-12 + +* [BUGFIX] Fix image url logic (#3402) + +## 0.41.0 / 2020-07-29 + +* [CHANGE] Configmap-reload: Update to v0.4.0 (#3334) +* [CHANGE] Update prometheus compatibility matrix to v2.19.2 (#3316) +* [FEATURE] Add Synthetic Probes support. This includes support for job names. (#2832, #3318, #3312, #3306) +* [FEATURE] Support Prometheus vertical compaction (#3281) +* [ENHANCEMENT] pkg: Instrument resources being tracked by the operator (#3360) +* [ENHANCEMENT] Add SecretListWatchSelector to reduce memory and CPU footprint (#3355) +* [ENHANCEMENT] Added support for configuring CA, cert, and key via secret or configmap. (#3249) +* [ENHANCEMENT] Consolidate image url logic, deprecating `baseImage`, `sha`, and `tag` in favor of `image` field in CRDs. (#3103, #3358) +* [ENHANCEMENT] Decouple alertmanager pod labels from selector labels (#3317) +* [ENHANCEMENT] pkg/prometheus: Ensure relabeling of container label in ServiceMonitors (#3315) +* [ENHANCEMENT] misc: Remove v1beta1 crd remainings (#3311) +* [ENHANCEMENT] Normalize default durations (#3308) +* [ENHANCEMENT] pkg/prometheus: Allow enforcing namespace label in Probe configs (#3304) +* [BUGFIX] Revert "Normalize default durations" (#3364) +* [BUGFIX] Reload alertmanager on configmap/secret change (#3319) +* [BUGFIX] listwatch: Do not duplicate resource versions (#3373) + +## 0.40.0 / 2020-06-17 + +* [CHANGE] Update dependencies to prometheus 2.18 (#3231) +* [CHANGE] Add support for new prometheus versions (v2.18 & v2.19) (#3284) +* [CHANGE] bump Alertmanager default version to v0.21.0 (#3286) +* [FEATURE] Automatically disable high availability mode for 1 replica alertmanager (#3233) +* [FEATURE] thanos-sidecar: Add minTime arg (#3253) +* [FEATURE] Add scrapeTimeout as global configurable parameter (#3250) +* [FEATURE] Add EnforcedSampleLimit which enforces a global sample limit (#3276) +* [FEATURE] add ability to exclude rules from namespace label enforcement (#3207) +* [BUGFIX] thanos sidecar: log flags double definition (#3242) +* [BUGFIX] Mutate rule labels, annotations to strings (#3230) + +## 0.39.0 / 2020-05-06 + +* [CHANGE] Introduce release schedule (#3135) +* [CHANGE] Remove options configuring CRD management (manage-crds, crd-kinds, with-validation) (#3155) +* [CHANGE] Add CRD definitions to bundle.yaml (#3171) +* [CHANGE] Switch to apiextensions.k8s.io/v1 CRD and require kubernetes v1.16 or newer (#3175, #3187) +* [FEATURE] Add support prometheus query log file (#3116) +* [FEATURE] Add support for watching specified rules directory by config-relader (#3128) +* [FEATURE] Add TLS support for operator web server (#3134, #3157) +* [FEATURE] Allow to set address for operator http endpoint (#3098) +* [FEATURE] Allow setting the alertmanagers cluster.advertiseAddress (#3160) +* [FEATURE] Build operator images for ARM and ARM64 platforms (#3177) +* [ENHANCEMENT] Allow setting log level and format for thanos sidecar (#3112) +* [ENHANCEMENT] Support naming of remote write queues (#3144) +* [ENHANCEMENT] Allow disabling mount subPath for volumes (#3143) +* [ENHANCEMENT] Update k8s libraries to v1.18 (#3154) +* [ENHANCEMENT] Create separate namespace informers when needed (#3182) +* [BUGFIX] Tolerate version strings which aren't following semver (#3101) +* [BUGFIX] Retain metadata for embedded PVC objects (#3115) +* [BUGFIX] Fix definition of thanos-ruler-operated service (#3126) +* [BUGFIX] Allow setting the cluster domain (#3138) +* [BUGFIX] Allow matching only PodMonitors (#3173) +* [BUGFIX] Fix typo in statefulset informer (#3179) + +## 0.38.1 / 2020-04-16 + +* [BUGFIX] Fix definition of web service port for Alertmanager (#3125) +* [BUGFIX] Support external alert query URL for THanos Ruler (#3129) +* [BUGFIX] Do not modify the PrometheusRule cache object (#3105) + +## 0.38.0 / 2020-03-20 + +* [CHANGE] Changed ThanosRuler custom resource field alertmanagersURL type from string to []string (#3067) +* [CHANGE] Deprecate PodMonitor targetPort field (#3071, #3078) +* [FEATURE] Add queryConfig field to ThanosRuler spec (#3068) +* [FEATURE] GRPC TLS config for Thanos Ruler and Sidecar (#3059) +* [FEATURE] MergePatch Alertmanager containers (#3080) +* [FEATURE] Add VolumeMounts to Prometheus custom resources (#2871) +* [ENHANCEMENT] Update Thanos to v0.11.0 (#3066) +* [ENHANCEMENT] Clarify that Endpoint.targetPort is pod port (#3064) +* [BUGFIX] ThanosRuler restarts instead of reloading with new PrometheusRules (#3056) +* [BUGFIX] Omit QueryEndpoints if empty (#3091) + +## 0.37.0 / 2020-03-02 + +* [FEATURE] Add routePrefix to ThanosRuler spec (#3023) +* [FEATURE] Add externalPrefix to ThanosRuler spec (#3058) +* [FEATURE] Add pod template fields to ThanosRuler custom resource (#3034) +* [ENHANCEMENT] Make ports on kubelet service and endpoints match (#3039) +* [ENHANCEMENT] Update kubernetes API dependencies to v0.17.3/1.17.3 (#3042) +* [ENHANCEMENT] Simplify multi-arch building (#3035) +* [ENHANCEMENT] Default to Prometheus v2.16.0 (#3050, #3051) +* [BUGFIX] Fix stateful set being pruned by kubectl (#3029, #3030) +* [BUGFIX] Fix prometheus rule validator admitting rules with invalid label types (#2727,#2962) +* [BUGFIX] Fix flaky test in Thanos ruler (#3038) +* [BUGFIX] Fix ThanosRuler status reporting (#3045) +* [BUGFIX] Preserve pod labels and annotations in custom resources (#3041, #3043) +* [BUGFIX] Prevent stateful set update loop for alertmanager and thonos types (#3048, #3049) + +## 0.36.0 / 2020-02-10 + +* [CHANGE] Rename binary `lint` to `po-lint` (#2964) +* [CHANGE] Restrict api extension RBAC rules (#2974) +* [FEATURE] Add operator for Thanos Ruler resources (#2943) +* [FEATURE] Thanos Ruler Improvements (#2986, #2991, #2993, #2994, #3018, #3019) +* [FEATURE] Add additional printer columns for custom resources (#2922) +* [ENHANCEMENT] Set config-reloader containers resources (#2958) +* [ENHANCEMENT] Fix broken links and remove spec.version in examples (#2961) +* [ENHANCEMENT] Reduce deprecation warning verbosity (#2978) +* [ENHANCEMENT] Build tooling improvements (#2979, #2982, #2983) +* [ENHANCEMENT] Update Prometheus compatible version list (#2998) +* [ENHANCEMENT] Fix broken links in documentation (#3005) +* [ENHANCEMENT] Update default container image versions (#3007) +* [BUGFIX] Fix statefulset crash loop in Kube 1.17 (#2987) + +## 0.35.0 / 2020-01-13 + +* [CHANGE] Deprecate baseImage, tag, and sha fields in custom resources (#2914) +* [FEATURE] Add APIVersion field to Prometheus.Spec.Alerting (#2884) +* [FEATURE] Add an option to disable compaction (#2886) +* [FEATURE] Allow configuring PVC access mode (#978) +* [ENHANCEMENT] Do not disable compaction on sidecar without object storage configuration (#2845) +* [ENHANCEMENT] Fix StatefulSet being needlessly re-created (#2857) +* [ENHANCEMENT] Add metric for statefulset re-create (#2859) +* [ENHANCEMENT] Rename `mesh` ports to be prefixed with protocol (#2863) +* [ENHANCEMENT] Use kubebuilder controller-gen for creating CRDs (#2855) +* [ENHANCEMENT] Add metrics about node endpoints synchronization (#2887) +* [ENHANCEMENT] Turn off preserveUnknownFields to enable kubectl explain (#2903) +* [ENHANCEMENT] Instrument operator's list and watch operations (#2893) +* [BUGFIX] Modified prometheus wget probe when listenLocal=true (#2929) +* [BUGFIX] Fix generated statefulset being pruned by kubectl (#2944) + +## 0.34.0 / 2019-10-31 + +* [CHANGE] Make arbitraryFSAccessThroughSMs optional (#2797) +* [FEATURE] Add [prometheus,alertmanager]-instance-namespaces cmdline parameter (#2783) +* [FEATURE] Add configSecret element to the AlertmanagerSpec (#2827) +* [FEATURE] Add enforcedNamespaceLabel to Prometheus CRD (#2820) +* [FEATURE] Add exec probes against localhost:9090 to Prometheus if listenLocal is set to true (#2763) +* [FEATURE] Add honorTimestamps field to Prometheus, Podmonitor, and ServiceMonitor CRD (#2800) +* [FEATURE] Add ignoreNamespaceSelectors field to Prometheus CRD (#2816) +* [FEATURE] Add local configuration options in jsonnet/prometheus-operator (#2794) +* [FEATURE] Add overrideHonorLabels to Prometheus CRD (#2806) +* [FEATURE] Reference secrets instead of local files (#2716) +* [ENHANCEMENT] Add missing json struct tag for ArbitraryFSAccessThroughSMsConfig (#2808) +* [ENHANCEMENT] Ensure containers have "FallbackToLogsOnError" termination policy (#2819) +* [ENHANCEMENT] Improve detection of StatefulSet changes (#2801) +* [ENHANCEMENT] Only append relabelings if EnforcedNamespaceLabel value is set (#2830) +* [ENHANCEMENT] Remove unneeded Ownership change in prometheus-config-reloader (#2761) +* [ENHANCEMENT] Update k8s client to 1.16 (#2778) +* [BUGFIX] Update prometheus dependency to v2.12.0 to fix validation failure for .externalLabels admission webhook (#2779) + +## 0.33.0 / 2019-09-12 + +* [FEATURE] Add Thanos service port to governing service (#2754) +* [FEATURE] Add VolumeMounts to Alertmanager (#2755) +* [ENHANCEMENT] Bump default thanos image and version (#2746) + +## 0.32.0 / 2019-08-30 + +* [CHANGE] Change PodManagement policy to parallel in Alertmanager (#2676) +* [FEATURE] Adding label selector for Alertmanager objects discovery filtering (#2662) +* [FEATURE] Provide option to turn on WAL compression (#2683) +* [FEATURE] Support namespace denylist for listwatcher (#2710) +* [FEATURE] Add support for Volumes to Prometheus Custom Resource (#2734) +* [FEATURE] Add support for Volumes to Alertmanager Custom Resource (#2737) +* [FEATURE] Add support for InitContainers to Prometheus Custom Resource (#2522) + +## 0.31.1 / 2019-06-25 +* [BUGFIX] Increase terminationGracePeriod for alertmanager statefulSet as it cannot be 0. (#2657) + +## 0.31.0 / 2019-06-20 + +* [CHANGE] Remove gossip configuration from Thanos sidecar. This means only non-gossip configurations can be used going forward. (#2623, #2629) +* [FEATURE] Add PodMonitor, allowing monitoring pods directly without the necessity to go through a Endpoints of a Service, this is an experimental feature, it may break at any time without notice. (#2566) +* [FEATURE] Add admission webhook to validate `PrometheusRule` objects with Prometheus' promtool linting. (#2551) +* [FEATURE] Add ability to select subset of Prometheus objects to reconcile against, configurable with `--prometheus-instance-selector` flag. (#2615) +* [FEATURE] Add ability to configure size based retention on Prometheus. (#2608) +* [FEATURE] Add ability to use StatefulSet ordinal in external labels. (#2591) +* [ENHANCEMENT] Use /-/healthy and /-/ready for probes in Alertmanager. (#2600) + +## 0.30.0 / 2019-05-10 + +Note: Both kube-prometheus (#2554) and the Helm Chart (#2416) have been removed from this repository. +kube-prometheus is not hosted as github.com/coroes/kube-prometheus and the helm chart is available at https://github.com/helm/charts/tree/master/stable/prometheus-operator + +* [CHANGE] Drop support for Alertmanager < v0.15.0 (#2568) +* [FEATURE] Add Prometheus Config Reloader CPU and Memory flags (#2466) +* [FEATURE] Support `--max-samples` flag in QuerySpec (#2505) +* [FEATURE] Adding kustomization files for remote bases (#2497) +* [FEATURE] Allow disabling limits on sidecars (#2560) +* [FEATURE] Modify arbitrary parts of the operator generated containers (#2445) +* [ENHANCEMENT] Add proper Operator labels as recommended by SIG-Apps (#2427) +* [ENHANCEMENT] Watch ConfigMaps having the prometheus-name selector (#2454) +* [ENHANCEMENT] Add prometheusExternalLabelName field to Prometheus object (#2430) +* [ENHANCEMENT] Optional secret in scrapeconfig (#2511) +* [ENHANCEMENT] Update PodSecurityContext docs (#2569) +* [ENHANCEMENT] Update Kubernetes client libraries to 1.14.0 (#2570) +* [ENHANCEMENT] Use Go modules with Kubernetes 1.14 (#2571) +* [ENHANCEMENT] Update to Alertmanager v0.17.0 (#2587) +* [ENHANCEMENT] Add support for setting Log Format for Alertmanager (#2577) +* [ENHANCEMENT] Switch Deployments and StatefulSets from apps/v1beta to apps/v1 (#2593) +* [ENHANCEMENT] Add Service and Servicemonitor to bundle.yaml (#2595) +* [BUGFIX] Fix startup nodeSyncEndpoints (#2475) +* [BUGIFX] Update Thanos vendoring to include config reloader fixes (#2504) + +## 0.29.0 / 2019-02-19 + +* [FEATURE] Thanos sidecar supports external Thanos clusters (#2412) +* [FEATURE] Make replicas external label name configurable (#2411) +* [FEATURE] Flags for config reloader memory and cpu limits (#2403) +* [ENHANCEMENT] Update to Prometheus v2.7.1 as default (#2374) +* [ENHANCEMENT] Update to Alertmanager v0.16.1 as default (#2362) + +## 0.28.0 / 2019-01-24 + +* [FEATURE] CLI tool to lint YAML against CRD definitions (#2269) +* [FEATURE] Support Thanos v0.2 arbitrary object storage configuration (#2264) +* [ENHANCEMENT] Update Alertmanager to v0.16.0 (#2145) +* [ENHANCEMENT] Added AlertResendDelay to Prometheus resource (#2265) +* [ENHANCEMENT] Support min_shards configuration of the queueConfig (#2284) +* [ENHANCEMENT] Write compressed Prometheus config into Kubernetes Secret (#2243) +* [ENHANCEMENT] Add flag to enable Prometheus web admin API (#2300) +* [ENHANCEMENT] Add logFormat support for Prometheus (#2307) +* [ENHANCEMENT] Configure Thanos sidecar with route prefix (#2345) +* [BUGFIX] Fix omitting source_labels where they are unnecessary (#2292) +* [BUGFIX] Guard against nil targetPort (#2318) + +## 0.27.0 / 2019-01-08 + +* [FEATURE] Add `image` field to specify full Prometheus, Alertmanager and Thanos images. +* [FEATURE] Add prometheus query options (lookback-delta, max-concurrency, timeout). + +## 0.26.0 / 2018-11-30 + +* [CHANGE] Remove attempting to set "secure" security context (#2109). +* [CHANGE] Remove deprecated StorageSpec fields (#2132). +* [ENHANCEMENT] Better handling for pod/node labels from ServiceMonitors (#2089). +* [ENHANCEMENT] Update to Prometheus v2.5.0 as default (#2101). +* [ENHANCEMENT] Update to Alertmanager v0.15.3 as default (#2128). +* [ENHANCEMENT] Increase CPU limits for small containers to not being throttled as much (#2144). +* [BUGFIX] Sanitize thanos secret volume mount name (#2159). +* [BUGFIX] Fix racy Kubernetes multi watch (#2177). + +## 0.25.0 / 2018-10-24 + +* [FEATURE] Allow passing additional alert relabel configs in Prometheus custom resource (#2022) +* [FEATURE] Add ability to mount custom ConfigMaps into Alertmanager and Prometheus (#2028) + +## 0.24.0 / 2018-10-11 + +This release has a breaking changes for `prometheus_operator_.*` metrics. + +`prometheus_operator_alertmanager_reconcile_errors_total` and `prometheus_operator_prometheus_reconcile_errors_total` +are now combined and called `prometheus_operator_reconcile_errors_total`. +Instead the metric has a "controller" label which indicates the errors from the Prometheus or Alertmanager controller. + +The same happened with `prometheus_operator_alertmanager_spec_replicas` and `prometheus_operator_prometheus_spec_replicas` +which is now called `prometheus_operator_spec_replicas` and also has the "controller" label. + +The `prometheus_operator_triggered_total` metric now has a "controller" label as well and finally instruments the +Alertmanager controller. + +For a full description see: https://github.com/coreos/prometheus-operator/pull/1984#issue-221139702 + +In order to support multiple namespaces, the `--namespace` flag changed to `--namespaces` +and accepts and comma-separated list of namespaces as a string. + +* [CHANGE] Default to Node Exporter v0.16.0 (#1812) +* [CHANGE] Update to Go 1.11 (#1855) +* [CHANGE] Default to Prometheus v2.4.3 (#1929) (#1983) +* [CHANGE] Default to Thanos v0.1.0 (#1954) +* [CHANGE] Overhaul metrics while adding triggerBy metric for Alertmanager (#1984) +* [CHANGE] Add multi namespace support (#1813) +* [FEATURE] Add SHA field to Prometheus, Alertmanager and Thanos for images (#1847) (#1854) +* [FEATURE] Add configuration for priority class to be assigned to Pods (#1875) +* [FEATURE] Configure sampleLimit per ServiceMonitor (#1895) +* [FEATURE] Add additionalPeers to Alertmanager (#1878) +* [FEATURE] Add podTargetLabels to ServiceMonitors (#1880) +* [FEATURE] Relabel target name for Pods (#1896) +* [FEATURE] Allow configuration of relabel_configs per ServiceMonitor (#1879) +* [FEATURE] Add illegal update reconciliation by deleting StatefulSet (#1931) +* [ENHANCEMENT] Set Thanos cluster and grpc ip from pod.ip (#1836) +* [BUGFIX] Add square brackets around pod IPs for IPv6 support (#1881) +* [BUGFIX] Allow periods in secret name (#1907) +* [BUGFIX] Add BearerToken in generateRemoteReadConfig (#1956) + +## 0.23.2 / 2018-08-23 + +* [BUGFIX] Do not abort kubelet endpoints update due to nodes without IP addresses defined (#1816) + +## 0.23.1 / 2018-08-13 + +* [BUGFIX] Fix high CPU usage of Prometheus Operator when annotating Prometheus resource (#1785) + +## 0.23.0 / 2018-08-06 + +* [CHANGE] Deprecate specification of Prometheus rules via ConfigMaps in favor of `PrometheusRule` CRDs +* [FEATURE] Introduce new flag to control logging format (#1475) +* [FEATURE] Ensure Prometheus Operator container runs as `nobody` user by default (#1393) +* [BUGFIX] Fix reconciliation of Prometheus StatefulSets due to ServiceMonitors and PrometheusRules changes when a single namespace is being watched (#1749) + +## 0.22.2 / 2018-07-24 + +[BUGFIX] Do not migrate rule config map for Prometheus statefulset on rule config map to PrometheusRule migration (#1679) + +## 0.22.1 / 2018-07-19 + +* [ENHANCEMENT] Enable operation when CRDs are created externally (#1640) +* [BUGFIX] Do not watch for new namespaces if a specific namespace has been selected (#1640) + +## 0.22.0 / 2018-07-09 + +* [FEATURE] Allow setting volume name via volumetemplateclaimtemplate in prom and alertmanager (#1538) +* [FEATURE] Allow setting custom tags of container images (#1584) +* [ENHANCEMENT] Update default Thanos to v0.1.0-rc.2 (#1585) +* [ENHANCEMENT] Split rule config map mounted into Prometheus if it exceeds Kubernetes config map limit (#1562) +* [BUGFIX] Mount Prometheus data volume into Thanos sidecar & pass correct path to Thanos sidecar (#1583) + +## 0.21.0 / 2018-06-28 + +* [CHANGE] Default to Prometheus v2.3.1. +* [CHANGE] Default to Alertmanager v0.15.0. +* [FEATURE] Make remote write queue configurations configurable. +* [FEATURE] Add Thanos integration (experimental). +* [BUGFIX] Fix usage of console templates and libraries. + +## 0.20.0 / 2018-06-05 + +With this release we introduce a new Custom Resource Definition - the +`PrometheusRule` CRD. It addresses the need for rule syntax validation and rule +selection across namespaces. `PrometheusRule` replaces the configuration of +Prometheus rules via K8s ConfigMaps. There are two migration paths: + +1. Automated live migration: If the Prometheus Operator finds Kubernetes + ConfigMaps that match the `RuleSelector` in a `Prometheus` specification, it + will convert them to matching `PrometheusRule` resources. + +2. Manual migration: We provide a basic CLI tool to convert Kubernetes + ConfigMaps to `PrometheusRule` resources. + +```bash +go get -u github.com/coreos/prometheus-operator/cmd/po-rule-migration +po-rule-migration \ +--rule-config-map= \ +--rule-crds-destination= +``` + +* [FEATURE] Add leveled logging to Prometheus Operator (#1277) +* [FEATURE] Allow additional Alertmanager configuration in Prometheus CRD (#1338) +* [FEATURE] Introduce `PrometheusRule` Custom Resource Definition (#1333) +* [ENHANCEMENT] Allow Prometheus to consider all namespaces to find ServiceMonitors (#1278) +* [BUGFIX] Do not attempt to set default memory request for Prometheus 2.0 (#1275) + +## 0.19.0 / 2018-04-25 + +* [FEATURE] Allow specifying additional Prometheus scrape configs via secret (#1246) +* [FEATURE] Enable Thanos sidecar (#1219) +* [FEATURE] Make AM log level configurable (#1192) +* [ENHANCEMENT] Enable Prometheus to select Service Monitors outside own namespace (#1227) +* [ENHANCEMENT] Enrich Prometheus operator CRD registration error handling (#1208) +* [BUGFIX] Allow up to 10m for Prometheus pod on startup for data recovery (#1232) + +## 0.18.1 / 2018-04-09 + +* [BUGFIX] Fix alertmanager >=0.15.0 cluster gossip communication (#1193) + +## 0.18.0 / 2018-03-04 + +From this release onwards only Kubernetes versions v1.8 and higher are supported. If you have an older version of Kubernetes and the Prometheus Operator running, we recommend upgrading Kubernetes first and then the Prometheus Operator. + +While multiple validation issues have been fixed, it will remain a beta feature in this release. If you want to update validations, you need to either apply the CustomResourceDefinitions located in `example/prometheus-operator-crd` or delete all CRDs and restart the Prometheus Operator. + +Some changes cause Prometheus and Alertmanager clusters to be redeployed. If you do not have persistent storage backing your data, this means you will loose the amount of data equal to your retention time. + +* [CHANGE] Use canonical `/prometheus` and `/alertmanager` as data dirs in containers. +* [FEATURE] Allow configuring Prometheus and Alertmanager servers to listen on loopback interface, allowing proxies to be the ingress point of those Pods. +* [FEATURE] Allow configuring additional containers in Prometheus and Alertmanager Pods. +* [FEATURE] Add ability to whitelist Kubernetes labels to become Prometheus labels. +* [FEATURE] Allow specifying additional secrets for Alertmanager Pods to mount. +* [FEATURE] Allow specifying `bearer_token_file` for Alertmanger configurations of Prometheus objects in order to authenticate with Alertmanager. +* [FEATURE] Allow specifying TLS configuration for Alertmanger configurations of Prometheus objects. +* [FEATURE] Add metrics for reconciliation errors: `prometheus_operator_alertmanager_reconcile_errors_total` and `prometheus_operator_prometheus_reconcile_errors_total`. +* [FEATURE] Support `read_recent` and `required_matchers` fields for remote read configurations. +* [FEATURE] Allow disabling any defaults of `SecurityContext` fields of Pods. +* [BUGFIX] Handle Alertmanager >=v0.15.0 breaking changes correctly. +* [BUGFIX] Fix invalid validations for metric relabeling fields. +* [BUGFIX] Fix validations for `AlertingSpec`. +* [BUGFIX] Fix validations for deprecated storage fields. +* [BUGFIX] Fix remote read and write basic auth support. +* [BUGFIX] Fix properly propagate errors of Prometheus config reloader. + +## 0.17.0 / 2018-02-15 + +This release adds validations as a beta feature. It will only be installed on new clusters, existing CRD definitions will not be updated, this will be done in a future release. Please try out this feature and give us feedback! + +* [CHANGE] Default Prometheus version v2.2.0-rc.0. +* [CHANGE] Default Alertmanager version v0.14.0. +* [FEATURE] Generate and add CRD validations. +* [FEATURE] Add ability to set `serviceAccountName` for Alertmanager Pods. +* [FEATURE] Add ability to specify custom `securityContext` for Alertmanager Pods. +* [ENHANCEMENT] Default to non-root security context for Alertmanager Pods. + +## 0.16.1 / 2018-01-16 + +* [CHANGE] Default to Alertmanager v0.13.0. +* [BUGFIX] Alertmanager flags must be double dashed starting v0.13.0. + +## 0.16.0 / 2018-01-11 + +* [FEATURE] Add support for specifying remote storage configurations. +* [FEATURE] Add ability to specify log level. +* [FEATURE] Add support for dropping metrics at scrape time. +* [ENHANCEMENT] Ensure that resource limit can't make Pods unschedulable. +* [ENHANCEMENT] Allow configuring emptyDir volumes +* [BUGFIX] Use `--storage.tsdb.no-lockfile` for Prometheus 2.0. +* [BUGFIX] Fix Alertmanager default storage.path. + +## 0.15.0 / 2017-11-22 + +* [CHANGE] Default Prometheus version v2.0.0 +* [BUGFIX] Generate ExternalLabels deterministically +* [BUGFIX] Fix incorrect mount path of Alertmanager data volume +* [EXPERIMENTAL] Add ability to specify CRD Kind name + +## 0.14.1 / 2017-11-01 + +* [BUGFIX] Ignore illegal change of PodManagementPolicy to StatefulSet. + +## 0.14.0 / 2017-10-19 + +* [CHANGE] Default Prometheus version v2.0.0-rc.1. +* [CHANGE] Default Alertmanager version v0.9.1. +* [BUGFIX] Set StatefulSet replicas to 0 if 0 is specified in Alertmanager/Prometheus object. +* [BUGFIX] Glob for all files in a ConfigMap as rule files. +* [FEATURE] Add ability to run Prometheus Operator for a single namespace. +* [FEATURE] Add ability to specify CRD api group. +* [FEATURE] Use readiness and health endpoints of Prometheus 1.8+. +* [ENHANCEMENT] Add OwnerReferences to managed objects. +* [ENHANCEMENT] Use parallel pod creation strategy for Prometheus StatefulSets. + +## 0.13.0 / 2017-09-21 + +After a long period of not having broken any functionality in the Prometheus Operator, we have decided to promote the status of this project to beta. + +Compatibility guarantees and migration strategies continue to be the same as for the `v0.12.0` release. + +* [CHANGE] Remove analytics collection. +* [BUGFIX] Fix memory leak in kubelet endpoints sync. +* [FEATURE] Allow setting global default `scrape_interval`. +* [FEATURE] Allow setting Pod objectmeta to Prometheus and Alertmanger objects. +* [FEATURE] Allow setting tolerations and affinity for Prometheus and Alertmanager objects. + +## 0.12.0 / 2017-08-24 + +Starting with this release only Kubernetes `v1.7.x` and up is supported as CustomResourceDefinitions are a requirement for the Prometheus Operator and are only available from those versions and up. + +Additionally all objects have been promoted from `v1alpha1` to `v1`. On start up of this version of the Prometheus Operator the previously used `ThirdPartyResource`s and the associated `v1alpha1` objects will be automatically migrated to their `v1` equivalent `CustomResourceDefinition`. + +* [CHANGE] All manifests created and used by the Prometheus Operator have been promoted from `v1alpha1` to `v1`. +* [CHANGE] Use Kubernetes `CustomResourceDefinition`s instead of `ThirdPartyResource`s. +* [FEATURE] Add ability to set scrape timeout to `ServiceMonitor`. +* [ENHANCEMENT] Use `StatefulSet` rolling deployments. +* [ENHANCEMENT] Properly set `SecurityContext` for Prometheus 2.0 deployments. +* [ENHANCEMENT] Enable web lifecycle APIs for Prometheus 2.0 deployments. + +## 0.11.2 / 2017-09-21 + +* [BUGFIX] Fix memory leak in kubelet endpoints sync. + +## 0.11.1 / 2017-07-28 + +* [ENHANCEMENT] Add profiling endpoints. +* [BUGFIX] Adapt Alertmanager storage usage to not use deprecated storage definition. + +## 0.11.0 / 2017-07-20 + +Warning: This release deprecates the previously used storage definition in favor of upstream PersistentVolumeClaim templates. While this should not have an immediate effect on a running cluster, Prometheus object definitions that have storage configured need to be adapted. The previously existing fields are still there, but have no effect anymore. + +* [FEATURE] Add Prometheus 2.0 alpha3 support. +* [FEATURE] Use PVC templates instead of custom storage definition. +* [FEATURE] Add cAdvisor port to kubelet sync. +* [FEATURE] Allow default base images to be configurable. +* [FEATURE] Configure Prometheus to only use necessary namespaces. +* [ENHANCEMENT] Improve rollout detection for Alertmanager clusters. +* [BUGFIX] Fix targetPort relabeling. + +## 0.10.2 / 2017-06-21 + +* [BUGFIX] Use computed route prefix instead of directly from manifest. + +## 0.10.1 / 2017-06-13 + +Attention: if the basic auth feature was previously used, the `key` and `name` +fields need to be switched. This was not intentional, and the bug is not fixed, +but causes this change. + +* [CHANGE] Prometheus default version v1.7.1. +* [CHANGE] Alertmanager default version v0.7.1. +* [BUGFIX] Fix basic auth secret key selector `key` and `name` switched. +* [BUGFIX] Fix route prefix flag not always being set for Prometheus. +* [BUGFIX] Fix nil panic on replica metrics. +* [FEATURE] Add ability to specify Alertmanager path prefix for Prometheus. + +## 0.10.0 / 2017-06-09 + +* [CHANGE] Prometheus route prefix defaults to root. +* [CHANGE] Default to Prometheus v1.7.0. +* [CHANGE] Default to Alertmanager v0.7.0. +* [FEATURE] Add route prefix support to Alertmanager resource. +* [FEATURE] Add metrics on expected replicas. +* [FEATURE] Support for running Alertmanager v0.7.0. +* [BUGFIX] Fix sensitive rollout triggering. + +## 0.9.1 / 2017-05-18 + +* [FEATURE] Add experimental Prometheus 2.0 support. +* [FEATURE] Add support for setting Prometheus external labels. +* [BUGFIX] Fix non-deterministic config generation. + +## 0.9.0 / 2017-05-09 + +* [CHANGE] The `kubelet-object` flag has been renamed to `kubelet-service`. +* [CHANGE] Remove automatic relabelling of Pod and Service labels onto targets. +* [CHANGE] Remove "non-namespaced" alpha annotation in favor of `honor_labels`. +* [FEATURE] Add ability make use of the Prometheus `honor_labels` configuration option. +* [FEATURE] Add ability to specify image pull secrets for Prometheus and Alertmanager pods. +* [FEATURE] Add basic auth configuration option through ServiceMonitor. +* [ENHANCEMENT] Add liveness and readiness probes to Prometheus and Alertmanger pods. +* [ENHANCEMENT] Add default resource requests for Alertmanager pods. +* [ENHANCEMENT] Fallback to ExternalIPs when InternalIPs are not available in kubelet sync. +* [ENHANCEMENT] Improved change detection to trigger Prometheus rollout. +* [ENHANCEMENT] Do not delete unmanaged Prometheus configuration Secret. + +## 0.8.2 / 2017-04-20 + +* [ENHANCEMENT] Use new Prometheus 1.6 storage flags and make it default. + +## 0.8.1 / 2017-04-13 + +* [ENHANCEMENT] Include kubelet insecure port in kubelet Enpdoints object. + +## 0.8.0 / 2017-04-07 + +* [FEATURE] Add ability to mount custom secrets into Prometheus Pods. Note that + secrets cannot be modified after creation, if the list if modified after + creation it will not effect the Prometheus Pods. +* [FEATURE] Attach pod and service name as labels to Pod targets. + +## 0.7.0 / 2017-03-17 + +This release introduces breaking changes to the generated StatefulSet's +PodTemplate, which cannot be modified for StatefulSets. The Prometheus and +Alertmanager objects have to be deleted and recreated for the StatefulSets to +be created properly. + +* [CHANGE] Use Secrets instead of ConfigMaps for configurations. +* [FEATURE] Allow ConfigMaps containing rules to be selected via label selector. +* [FEATURE] `nodeSelector` added to the Alertmanager kind. +* [ENHANCEMENT] Use Prometheus v2 chunk encoding by default. +* [BUGFIX] Fix Alertmanager cluster mesh initialization. + +## 0.6.0 / 2017-02-28 + +* [FEATURE] Allow not tagging targets with the `namespace` label. +* [FEATURE] Allow specifying `ServiceAccountName` to be used by Prometheus pods. +* [ENHANCEMENT] Label governing services to uniquely identify them. +* [ENHANCEMENT] Reconcile Service and Endpoints objects. +* [ENHANCEMENT] General stability improvements. +* [BUGFIX] Hostname cannot be fqdn when syncing kubelets into Endpoints object. + +## 0.5.1 / 2017-02-17 + +* [BUGFIX] Use correct governing `Service` for Prometheus `StatefulSet`. + +## 0.5.0 / 2017-02-15 + +* [FEATURE] Allow synchronizing kubelets into an `Endpoints` object. +* [FEATURE] Allow specifying custom configmap-reload image + +## 0.4.0 / 2017-02-02 + +* [CHANGE] Split endpoint and job in separate labels instead of a single + concatenated one. +* [BUGFIX] Properly exit on errors communicating with the apiserver. + +## 0.3.0 / 2017-01-31 + +This release introduces breaking changes to the underlying naming schemes. It +is recommended to destroy existing Prometheus and Alertmanager objects and +recreate them with new namings. + +With this release support for `v1.4.x` clusters is dropped. Changes will not be +backported to the `0.1.x` release series anymore. + +* [CHANGE] Prefixed StatefulSet namings based on managing resource +* [FEATURE] Pass labels and annotations through to StatefulSets +* [FEATURE] Add tls config to use for Prometheus target scraping +* [FEATURE] Add configurable `routePrefix` for Prometheus +* [FEATURE] Add node selector to Prometheus TPR +* [ENHANCEMENT] Stability improvements + +## 0.2.3 / 2017-01-05 + +* [BUGFIX] Fix config reloading when using external url. + +## 0.1.3 / 2017-01-05 + +The `0.1.x` releases are backport releases with Kubernetes `v1.4.x` compatibility. + +* [BUGFIX] Fix config reloading when using external url. + +## 0.2.2 / 2017-01-03 + +* [FEATURE] Add ability to set the external url the Prometheus/Alertmanager instances will be available under. + +## 0.1.2 / 2017-01-03 + +The `0.1.x` releases are backport releases with Kubernetes `v1.4.x` compatibility. + +* [FEATURE] Add ability to set the external url the Prometheus/Alertmanager instances will be available under. + +## 0.2.1 / 2016-12-23 + +* [BUGFIX] Fix `subPath` behavior when not using storage provisioning + +## 0.2.0 / 2016-12-20 + +This release requires a Kubernetes cluster >=1.5.0. See the readme for +instructions on how to upgrade if you are currently running on a lower version +with the operator. + +* [CHANGE] Use StatefulSet instead of PetSet +* [BUGFIX] Fix Prometheus config generation for labels containing "-" diff --git a/otelcollector/otel-allocator/prometheus-operator/CNAME b/otelcollector/otel-allocator/prometheus-operator/CNAME new file mode 100644 index 000000000..ca3338722 --- /dev/null +++ b/otelcollector/otel-allocator/prometheus-operator/CNAME @@ -0,0 +1 @@ +www.prometheus-operator.dev \ No newline at end of file diff --git a/otelcollector/otel-allocator/prometheus-operator/CONTRIBUTING.md b/otelcollector/otel-allocator/prometheus-operator/CONTRIBUTING.md new file mode 100644 index 000000000..ccb3193b7 --- /dev/null +++ b/otelcollector/otel-allocator/prometheus-operator/CONTRIBUTING.md @@ -0,0 +1,196 @@ +--- +weight: 120 +toc: true +title: Contributing +menu: + docs: + parent: prologue +lead: "" +lastmod: "2021-03-08T08:48:57+00:00" +images: [] +draft: false +description: How can I contribute to the Prometheus Operator and kube-prometheus? +date: "2021-03-08T08:48:57+00:00" +--- + +This project is licensed under the [Apache 2.0 license](LICENSE) and accept +contributions via GitHub pull requests. This document outlines some of the +conventions on development workflow, commit message formatting, contact points +and other resources to make it easier to get your contribution accepted. + +To maintain a safe and welcoming community, all participants must adhere to the +project's [Code of Conduct](code-of-conduct.md). + +# Certificate of Origin + +By contributing to this project you agree to the Developer Certificate of +Origin (DCO). This document was created by the Linux Kernel community and is a +simple statement that you, as a contributor, have the legal right to make the +contribution. See the [DCO](DCO) file for details. + +# Email and Chat + +The project currently uses the [Kubernetes Slack](https://slack.k8s.io/): +- [#prometheus-operator](https://kubernetes.slack.com/archives/CFFDS2Z7F) +- [#prometheus-operator-dev](https://kubernetes.slack.com/archives/C01B03QCSMN) + +Please avoid emailing maintainers found in the MAINTAINERS file directly. They +are very busy and read the mailing lists. + +# Office Hours Meetings + +The project also holds bi-weekly public meetings where maintainers, +contributors and users of the Prometheus Operator and kube-prometheus can +discuss issues, pull requests or any topic related to the projects. The +meetings happen at 09:00 UTC on Monday, check the [online +notes](https://docs.google.com/document/d/1-fjJmzrwRpKmSPHtXN5u6VZnn39M28KqyQGBEJsqUOk/edit?usp=sharing) +to know the exact dates and the connection details. + +## Getting Started + +- Fork the repository on GitHub +- Read the [README](README.md) for build and test instructions +- Play with the project, submit bugs, submit patches! + +## Contribution Flow + +This is a rough outline of what a contributor's workflow looks like: + +- Create a topic branch from where you want to base your work (usually `main`). +- Make commits of logical units. +- Make sure your commit messages are in the proper format (see below). +- Push your changes to a topic branch in your fork of the repository. +- Make sure the tests pass, and add any new tests as appropriate. +- Submit a pull request to the original repository. + +Many files (documentation, manifests, ...) in this repository are auto-generated. For instance, `bundle.yaml` is generated from the *Jsonnet* files in `/jsonnet/prometheus-operator`. Before submitting a pull request, make sure that you've executed `make generate` and committed the generated changes. + +Thanks for your contributions! + +### Changes to the APIs + +When designing Custom Resource Definitions (CRDs), please refer to the existing Kubernetes guidelines: +* [API conventions](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md). +* [API changes](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api_changes.md). + +In particular, this project follows the API stability guidelines: +* For alpha API versions (e.g. `v1alpha1`, `v1alpha2`, ...), we may allow to break forward and backward compatibility (but we'll try hard to avoid it). +* For beta API versions (e.g. `v1beta1`, `v1beta2`, ...), we may allow to break backward compatibility but not forward compatibility. +* For stable API versions (e.g. `v1`), we don't allow to break backward and forward compatibility. + +### Format of the Commit Message + +We follow a rough convention for commit messages that is designed to answer two +questions: what changed and why. The subject line should feature the what and +the body of the commit should describe the why. + +``` +scripts: add the test-cluster command + +This uses tmux to setup a test cluster that you can easily kill and +start for debugging. + +Fixes #38 +``` + +The format can be described more formally as follows: + +``` +: + + + +